一直想找一个技术社区开源一个自己个人的项目,希望能被更多人看到、使用这个东西,在测试上帮助到大家。
一个专为 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 空间中我补充了一个 wiki 页面,比这里介绍得稍微详细一些,有兴趣欢迎前往。另外以后会争取时间在社区新写一个帖子,详细说一下大家比较关心的测试覆盖率。
可能没有特别适合的标签,就选了测试覆盖率这个, 如果有对测试覆盖率或者影子数据库等技术感兴趣的朋友也欢迎交流。
个人 Github 空间也有其它更多开源分享欢迎参观,近期也在寻找合适的工作机会,欢迎勾搭