快捷搜索: 王者荣耀 脱发

精准化测试之:jacoco实现增量代码覆盖率统计

精准化测试可解决的问题:

根据代码变更确定用例范围

更准确深入地覆盖被测业务

白盒探索式测试

从线上数据反推有效测试用例

字节码插桩目的

1.获取执行时代码的调用链数据

2.覆盖率是调用链的一种精简模式

jacoco能解决测试哪些问题?

1.测试中帮助覆盖代码的所有逻辑

2.监视研发的所有改动

3.缩小测试范围,减少工作量.

1.被测项目的插桩操作

1.插桩原理:

2.两种插桩方式:1.on-the-fly模式(不需要停机,实时获取覆盖率,无需提前进行字节码插桩); 2.offline模式(需停机).

on-the-fly:JVM中通过-javaagent参数指定特定的jar文件启动instrumentation的代理程序,代理程序在通过class loader装载一个class前判断是否转换为修改的class文件,将统计代码插入class,测试覆盖率分析可以在jvm执行测试代码的过程中完成.

offline:在测试前先对文件进行插桩,然后生成插过桩的class或者jar包,测试插过桩的class和jar包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理,并生成报告.

3.增量代码覆盖率统计实现原理:

4.精准化测试平台架构设计:

1.获取用例执行时所调用的方法/类.:------>得到hashmap表

1.jacco使用运行时插针的模式.

2.执行(单条)用例,生成(单条)用例覆盖率统计情况,收集统计情况中被染色的代码方法,就

是用例的调用链涉及到的方法.

3.将用例名与被染色的方法进行管理处理成hashmap表,hashmap格式:{用例名:调用链涉

及到的方法},存储在数据库中.

2.git diff获取两个分支代码中的不同的行,然后根据AST抽象语法树特点查询到代码行所对应

的方法/类.------?得到diff表

3.根据方法名/类名查询hashmap表中对应的用例名,就可以知道需要执行哪些用例了.

经验分享 程序员 微信小程序 职场和发展