测试覆盖率 JVM 字节码测试运用 - 远程调试、测试覆盖、影子数据库

目录

前言:

简介

基础使用方式介绍

工具特性


前言:

在软件开发中,测试覆盖率是一个非常重要的指标,它表示代码中所有的测试用例是否都已经被覆盖到。JVM 字节码测试是一种比较新的测试方法,它可以对 JVM 字节码进行测试,从而更加全面地覆盖代码中的所有逻辑。

简介

一个专为 JVM 系语言 web 应用设计的,专注于集成测试阶段的后端测试工具。本质功能是监控代码执行,做远程调试使用。比如可以让你实时的了解到在前端点击某个按钮后,后端执行的代码细节,包括每一个方法的名称、参数返回值、执行的代码行号,调用的 sql 语句等信息。

当然可方便的扩展功能,实现测试覆盖率统计、影子数据库等实用功能。

基础使用方式介绍

项目使用 gradle 构建,下载源码后,使用gradle agentTest命令,可编译出一个 java 探针,并且与所有需要的二进制文件出现在 build/lib 目录下。之后就可以将所有 jar 包放到服务器的任意目录中,然后将-javaagent:${你的目录}/remote-debug-agent.jar=includes=com.foo.bar,apiport=8098配置到 web 应用启动参数的 java_opts 中(例如使用 tomcat 的话,可修改 catalina.sh 来添加该参数)。被测应用启动后,探针会启动一个内置的 jetty 服务器,并在 8098 端口上提供一组 api 供测试使用。

假设你的被测应用在前端有一个按钮,点击按钮后会调用到后端 com.foo.bar.MyClass 类中的某个方法,那么在测试这个按钮前,可先发送一个请求http://ip:8098/trace/start(用 jmeter、curl 甚至浏览器发都行,只要与测试操作源自同一台机器即可),之后点击按钮后,再发送请求http://ip:8098/trace/list,探针即会返回刚才执行代码的细节。你可以看到类似这样的数据

[{
    "method": "java.lang.String com.foo.bar.MyClass.handle()",  //执行的方法签名
    "coverage": "[11,13][16,16]",  //执行了哪几行代码
    "cost time": 2,  //执行耗时
    "calls": [{  //该方法调用的底层方法
        "coverage": "[21,21][24,24]",
        "cost time": 1,
        "method": "boolean foo.bar.MyClass.largeThanHalf(double)",
        "parameters": ["0.24444334899195885"],
        "return value": "0"
    }],
    "return value": "random number( 0.24444334899195885 ) is little than half",  //该方法的返回值
    "sql": "select 1 from dual"  //该方法执行的sql语句
}]

以上是一个远程调试的示例,应用场景应该是集成测试阶段灰盒测试,当然白盒、黑盒,甚至开发调试都可以用。另外也提供 dump 代码行覆盖情况的接口,用过 jacoco 的应该比较熟悉,利用这些数据可以做测试覆盖率的统计。

工具特性

  • 线程隔离: 代码执行情况是分线程记录的,且能通过一些信息标识调用者身份,因此可在集成环境中多人同时使用,互不影响
  • 自然染色: 调用者身份使用其发起的请求中的天然信息进行染色,无需给测试人员增加额外的客户端
  • 调用链传递: 调用者身份信息可在多个都使用了探针的应用间传递(如果这些应用间使用 http 协议通信的话),也就是说非常适合微服务架构使用(特意支持了 Feign-Hystrix 组件)
  • Servlet 框架支持: 工具支持大部分使用 HttpServlet 的框架或中间件,比如 spring-web、tomcat 等,也提供了非常方便的接口扩展支持其它同类框架
  • 支持 Struts2
  • 支持 Dubbo
  • 支持 Spring RabbitMQ
  • 支持 JVM 系语言: 探针工作在字节码层,所以不仅支持 Java,也支持 Groovy、Scala 等语言(特意支持了 Play 框架)
  • SQL 语句监控: 探针默认支持 oracle 和 mysql 数据库,也提供了非常便利的接口扩展支持其它关系型数据库
  • 支持热插拔: 不用改应用的启动文件也可使用,对线上环境临时使用提供了可能

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

猜你喜欢

转载自blog.csdn.net/Free355/article/details/131915558