精准测试常用插桩工具

插桩工具

  • jacoco-cli
  • jvm-sandbox jvm-sandbox-repeater
  • byteman
  • bytebuddy
  • javaagent premain agentmain
  • asm
  • javaassit

覆盖率工具

手工测试覆盖率

自动化测试覆盖率

覆盖率关联

  • testcase id → traceid
  • traceid → thread
  • code → thread
  • code <-> version
  • testcaseid => [code, code]

覆盖率统计

java -jar jacococli.jar report 3.exec  \
  --classfiles start-site.jar  \
  --sourcefiles ~/ke/shift_left/start.spring.io/start-site/src/main/java/  \
  --html report \
  --csv 3.csv  \
  --xml 3.xml

覆盖率分析

  • 格式化覆盖率数据 xml jacoco
  • testcase id => { “file:number”: coverage, branch line }
  • 动态化jacoco的html

流程

  • 手工测试 自动化测试
  • 服务器更新覆盖率数据
  • 及时dump覆盖率到exec
  • exec 转 xml文件
  • 读取xml文件 更新到数据库 redis mysql
  • 精准测试工具或者服务读取redis mysql 渲染jacoco的html前端 websocket 定时刷新

行为染色

  • 反向代理
  • 封装框架请求

加入trace字段

代码染色

  • 读取trace字段
  • 保存上下文

染色示例

- className: "org.springframework.web.servlet.DispatcherServlet@37f21974"
  functionName: "service"
  lineNum: 0
  arguments:
  - "org.apache.catalina.connector.RequestFacade@759ff4fb"
  - "org.apache.catalina.connector.ResponseFacade@4355eeed"
  returnObject: null
  event: "before"
  threadId: 47
  extra:
    ip: "127.0.0.1"
    ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML,\
      \ like Gecko) Chrome/100.0.4896.127 Safari/537.36"
    url: "/"
4 个赞