最近每次在和客户聊自动化测试的时候都会引出一个问题,我怎么知道我的测试做的是有效的呢?哪些是我没有测试到的部分?
其实在这点上的解决方案是比较成熟的,很多传统大型软件公司都能做到智能化的覆盖率统计分析及测试拓展,然而这样的方案了解的人却比较少,大大出乎了云层的意料,所以这次云层来给大家分享一下关于这个知识点的内容。
首先来简单聊一下覆盖率,在单元测试中很容易通过覆盖率工具获取对代码的调用情况。
这里的覆盖率都是在junit类的单元测试框架获取了,那么能不能让系统在生产运行的情况下获取动态覆盖率呢?所谓的运行时动态获取覆盖率,答案是肯定的,通过Jacoco插桩的模式即可。
首先需要下载Jacoco的代理Agent,然后在应用启动的时候加载这个Agent来收集覆盖率。
这里我们使用一个Springboot项目,打包获取Jar包,并使用Java -jar启动(War包要通过Tomcat启动插桩模式)
代码语言:javascript复制java -javaagent:lib/jacocoagent.jar=destfile=e:/jacoco.exec,output=file -jar demo-0.0.1-SNAPSHOT.jar
接着使用PostMan对被测对象的方法进行访问相应的功能接口,可以看到jacoco.exec文件已经发生了变化,也就是刚才的接口访问带来了覆盖率统计的变化。传统一般使用ant调用jacoco的解析来生成报告,这里可以直接使用IDEA工具自带的覆盖率读取功能。
可以发现前面Postman调用的代码已经被覆盖了,而别的模块没有被覆盖。通过这样的方式可以快速了解当前自动化体系的漏测及覆盖率,从而提高测试用例的有效性。