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

2022-07-07  本文已影响0人  TesterHome

本文由uniquetruth发表于TesterHome论坛,点击原文链接可查看作者的更多文章并与ta在线交流。

一直想找一个技术社区开源一个自己个人的项目,希望能被更多人看到、使用这个东西,在测试上帮助到大家。

简介

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

基础使用方式介绍

项目地址:https://github.com/uniquetruth/remote-debug-agent
项目使用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的应该比较熟悉,利用这些数据可以做测试覆盖率的统计。

工具特性

更多功能持续开发完善中

可能没有特别适合的标签,就选了测试覆盖率这个, 如果有对测试覆盖率或者影子数据库等技术感兴趣的朋友也欢迎交流。
个人Github空间也有其它更多开源分享欢迎参观,近期也在寻找合适的工作机会,欢迎勾搭:laughing:

本文由uniquetruth发表于TesterHome论坛,点击原文链接可查看作者的更多文章并与ta在线交流。

今日份的知识已摄入~

想要学习更多关于测试/测试开发技术、测试管理和质量保障的干货知识?
想要结识质量行业大牛和业界精英?
欢迎关注第十届中国互联网测试开发大会·深圳站 >>

上一篇下一篇

猜你喜欢

热点阅读