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

。 测试交流评论59字数 1928阅读模式

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

简介

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

当然可方便的扩展功能,实现测试覆盖率统计、影子数据库等实用功能。 文章源自玩技e族-https://www.playezu.com/179646.html

基础使用方式介绍

项目地址:https://github.com/uniquetruth/remote-debug-agent文章源自玩技e族-https://www.playezu.com/179646.html

项目使用 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 供测试使用。文章源自玩技e族-https://www.playezu.com/179646.html

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

[{"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 的应该比较熟悉,利用这些数据可以做测试覆盖率的统计。 文章源自玩技e族-https://www.playezu.com/179646.html

工具特性

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

更多功能持续开发完善中文章源自玩技e族-https://www.playezu.com/179646.html

Github 空间中我补充了一个 wiki 页面,比这里介绍得稍微详细一些,有兴趣欢迎前往。另外以后会争取时间在社区新写一个帖子,详细说一下大家比较关心的测试覆盖率。 文章源自玩技e族-https://www.playezu.com/179646.html

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

玩技站长微信
添加好友自动发送入群邀请
weinxin
rainbow-shownow
玩技官方公众号
官方微信公众号
weinxin
PLAYEZU
 
  • 版权提示:本站仅供存储任何法律责任由作者承担▷诈骗举报◁▷新闻不符◁▷我要投稿◁
    风险通知:非原创文章均为网络投稿真实性无法判断,侵权联系2523030730
    免责声明:内容来自用户上传发布或新闻客户端自媒体,切勿!切勿!切勿!添加联系方式以免受骗。
  • 原创转载:https://www.playezu.com/179646.html
    转载说明: 点我前往阅读>>>
匿名

发表评论

匿名网友
确定