插桩工具
- 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: "/"