精准化测试可解决的问题:
根据代码变更确定用例范围
更准确深入地覆盖被测业务
白盒探索式测试
从线上数据反推有效测试用例
字节码插桩目的
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表中对应的用例名,就可以知道需要执行哪些用例了.