wayLocation日记4
wayLocation 本地方法测试工具开发日记4
因为技术上的一些限制和业务饱和,所以工具开发进度很久都没有大规模的增长,😩不过很久也就一个星期。 现在技术上的难点有:监控Sql的解析、事务处理、历史信息保留、分布式方法的事务处理等 其实很多技术难点并不是现在实现不了,而是以现在的手段实现出来都有一些漏洞。
技术难点
历史保留
比如历史信息保留的问题,开始想的很简单,直接使用Cokkie存储本次调用方法的返回值。和Method入参、类名等等页面回显信息。 但是当开发出来的时候,突然发现没有注意到Cokkie最大只能存储4KB的字符串。这直接导致了想把一个Cookie作为历史信息的思路搅合了。 不过也是马上转换了思想,将每次调用的信息存储在name为Cookie.name+Cookie.length 上,但是局限性很大。 因为我无法确定方法调用的返回值大小,所以导致现在使用Cookie根本无从下手。 虽然想了需求分析时期的另一种方案:写一个文件出去,但是现在没有生成隐藏文件的技术。导致这个功能点直接停掉了,未来应该会从直接在项目中生成文件,或者历史保留的时限只在本次项目启动 - 项目结束这个范围内。
事务处理
事务处理的思路,拦截出sql,逆执行sql语句。 但是当一个方法中,sql执行次数多且复杂,或者调用函数进行计算执行时。 发生只使用逆执行的手段很难完美实现伪事务的思路。 思路暂时停留在这里,未来应该为根据拦截器,拦截事务出发。
监控sql的解析
这几天好不容易完成了对所有sql语句的监控,虽然抓到了sql,但是对他进行解析是目前的一大难点。 因为对MapperStatem这些对象很不熟悉,所以关于sql类对象的所有属性都需要一点点调试、百度分析出来。 而且以我目前来看,还没找到监控sql执行后的类type出现。 目前还没有确定的解决方案,只能寻求各路大牛帮助了。
微服务问题
当时也考虑到,如果一个方法中调用了其他服务的方法怎么办。 最好的解决方法是直接不管,但是作为一个测试工具,更希望的是返回出调用这个微服务的名称、入参、出参。 同时最好也是能监控到这个微服务中设计的sql db操作。 不过现在这点是完全没有思路, 未来可能会弃掉这个需求。
当前进度
当前在不考虑sql、事务、微服务的前提下是已经可以推出测试版本正常使用了。 但是参数的解析还可以再度优化,不过需要时间去打理。 现在的功能已经可以按照文档正常的进行一个文档测试操作。
担忧
首先是工具还没有在任何项目上引入使用过,所以还不知道他的危害性。 不过据我了解,工具使用迭代文件夹这样的模式去获取项目中所有类的类名。 是否有点...太有侵犯性了😶,而且因为是根据启动类的类加载路径,也就是项目根路径进行文件迭代的。 万一有人把两个项目下到了一个文件夹里,那这个思路是完全不可用了。 所以即使开发完之后还是那个问题需要重度考虑。 参数的解析问题,如果知道Swagger那种测试文档是怎样解析出参数结构的话。就不过使用文件迭代这种极度危险的方式了。 所以还需要话时间去看swagger这种纯英文的源码,害。 感觉至少还要2个月才能看到工具的第一版推出使用咯