关于jvm:JVM-字节码测试运用远程调试测试覆盖影子数据库

27次阅读

共计 2020 个字符,预计需要花费 6 分钟才能阅读完成。

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

始终想找一个技术社区开源一个本人集体的我的项目,心愿能被更多人看到、应用这个货色,在测试上帮忙到大家。

简介

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

根底应用形式介绍

我的项目地址:https://github.com/uniquetrut…
我的项目应用 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 数据库,也提供了十分便当的接口扩大反对其它关系型数据库
  • 反对热插拔:不必改利用的启动文件也可应用,对线上环境长期应用提供了可能

更多功能继续开发欠缺中

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

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

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

正文完
 0