收集 Golang 覆盖率

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. ECUG Meetup ·第3期。 如何收集 美Golang 实时覆盖率 李意扬 七牛云视频业务质量保障负责人,测试开发专家 ECUG Mee 期 效率优化与质佳实践专场
2. ECUG Meetup ·第3期。 01 现状 目录 02 CONTENT 新工具 03 原理 04 扩展 ECUG Meetup 第3期 聚效率优化气 晟佳实践专场 (. VIPTEST
3. ECUG Meetup ·第3期。 01 现状 ECUG Meetup 第3期 (. VIPTEST
4. ECUG 其他语言覆盖率工具 Meetup ·第3期。 RCoV JaCoCoRce RCOV pcov coverlet coverletJaCoCo JaCoco RCOV gcov JaCoCo JaCoco gcov RCOV gcov pCOV Coverag Coverage BCOV=CCOV Coverle1 Coverage RCoV pCoVPCoV RCovCoverage RCOV Jcov JaCoCo pcov coverlet ECUG Meetup 第3期 婴效率优化与质佳实践专场 ECUG X ( VIPTEST >
5. ECUG Golang 覆盖率 Meetup 单测覆盖率 ·第3期。 kcp.go kcp_test.go go test -cover kcpgo test-cover -coverprofile=cover.out PASS coverage: 42.9% of statements ok kcp/kcp0.001s → kcp cat cover.out mode: set kcp/kcp/kcp.go:3.25,4.121 1 kcp/kcp/kcp.go:16.516.221 kcp/kcp/kcp.go:5.16,6.2611 kcp/kcp/kcp.go:7.178.221@ kcp/kcp/kcp.go:9.1710.2311 kcp/kcp/kcp.go:11.1812.2110 kcp/kcp/kcp.go:13.19,14.2210 文件名:起始行.起始列,结束行.结束列该基本块中的语句数量该基本块被执行到的次数 ECUG Meetup第3期 ECUG X ( VIPTEST
6. ECUG Golang覆盖率 Meetup 集测覆盖率 ·第3期。 测试手段与被测程序分离 How? ECUG Meetup 第3期 (. VIPTEST
7. ECUG Golang 覆盖率 Meetup 传统集测覆盖率收集方案 ·第3期。 gotest 中有一个-C的fag,可以将单测的代码和被单测调用的代码编译成二进制包执行 ECUG Meetup 第3期 起效优化点 (. VIPTEST
8. ECUG Golang覆盖率 Meetup 传统集测覆盖率收集方案 ·第3期。 gotest 中有一个-C的fag,可以将单测的代码和被单测调用的代码编译成二进制包执行 FUNC TESTMAINSTART(T *TESTING.T) 1.新增测试代码,调用原main 函数 varargs[lstring fo arg := RANGE OS.ARGS 1 if!strings.Hasprefix(arg,"-test") aRgs=aP(RgARg) 0S.ARgS=arg main() ECUG Meetup 第3期 起效优化与佳续度专换 ECUG
9. ECUG Golang覆盖率 Meetup 传统集测覆盖率收集方案 ·第3期。 gotest 中有一个-C的fag,可以将单测的代码和被单测调用的代码编译成二进制包执行 2.将此函数编译成二进制文件 kcpgo test :-coverpkg="./..."-C -0 cover.test ECUG Meetup 第3期 坚效优化与佳续质专换 : VIPTEST
10. ECUG Golang覆盖率 Meetup 传统集测覆盖率收集方案 ·第3期。 go test 中有一个-C的 fag,可以将单测的代码和被单测调用的代码编译成二进制包执行 3.运行二进制文件,指定运行的测试方法 TestMainStart,输出覆盖率文件 kcp:/cover.test-test.run"TestMainStart" -test.coverprofile=cover.out ECUG Meetup 第3期 最效电代化气 佳实专换 ECUC X ( VIPTEST
11. ECUG Golang覆盖率 Meetup 传统集测覆盖率收集方案 ·第3期。 调用 main 开始 initO TestMainStart(t *testing.T) main 输出覆盖率报告 结束 main 函数结束 最效电代化气 ECUG Meetup 第3期 最佳实践专场 ECUG X ( VIPTEST
12. ECUG Golang 覆盖率 Meetup 传统集测覆盖率收集方案 ·第3期。 缺点: 1.项目里必须新增一个测试代码文件 2,改变了程序启动方式 3.被测程序必须退出才能获取覆盖率报告 4.覆盖率报告存储在远端 5.对分布式应用不友好 ECUG Meetup第3期 飞效术在与 晨佳实践专场 (. VIPTEST
13. ECUG Meetup ·第3期。 02 新工具 ECUG Meetup 第3期 (. VIPTEST
14. 新工具 g0c ECUG Meetup ·第3期。 https://github.com/qiniu/goc ECUG Meetup 第3期 (. VIPTEST
15. 新工具 g0c ECUG Meetup ·第3期。 项目甲必架 测试代码文件 ECUG Meetup 第3期 (. VIPTEST
16. goc git:(V2 CUG 新工 goc git:(V2) X git:(v2) x go build -o main . NUC gon leetup ·第3期 ECUG Meet GST X
17. 新工具 g0c ECUG MeetuP ·第3期。 改变程序动方式 kcp:/cover.test-test.run "TestMainStart"-test.coverprofile=cover.out VS kcp ./kcp ECUG Meetup第3期 军效率优化与质佳实践专场 Q.VIPTEST
18. 新工具 g0c ECUG Meetup ·第3期。 金获取覆盖率报告 ECUG Meetup 第3期 (. VIPTEST
19. simple-go-server git:(master) simple-go-server git:(master) simple-go-server git(master) sim NUC ple-go-server http:2021/11/2821:56:48_Simple go S6 rver http: 2021/11/2821:56:48Version: http: 2021/11/28 21:56:48 GitTag: http: 2021/11/28 21:56:48GitCommit: http:2021/11/2821:56:48GitTreestate http:2021/11/2821:56:48Serverisst arting.. http:2021/11/28 21:56:48 Server is re ady to handle requests at:5000 2021/11/2821:56:48[goc]rinfol rpc co nnected to goc server http:2021/11/28 21:57:20 163810784047 8447619GET/127.0.0.1:56168cur1/7.6 8.0 ECUG门
20. 新工具 g0c ECUG Meetup ·第3期。 对分布式这上 ECUG Meetup 第3期 起效化身 (. VIPTEST
21. test G NUC NUC test (ss test L NUC ECU 了七牛会
22. ECUG Meetup ·第3期。 03 原理 ECUG Meetup 第3期 (. VIPTEST
23. ECLG Meetup ·第3期。 覆盖率技术剖析 语句覆盖率,在测试时运行被测程序后,程序中 被执行到的可执行语句的比率 ECUG Meetup 第3期 最效电优化与佳实哦专 (. VIPTEST
24. ECUG 覆盖率技术剖析 Meetup Coverage.py ·第3期。 Python基于行的统计 sys.settrace(tracefunc) 基于解释器提供的能力,每执行一行调用一次tracefunc 函数,便可统计覆盖率 ECUG Meetup第3期 起效优化点 ECUR : VIPTEST
25. ECUG 覆盖率技术剖析 Meetup gcov ·第3期。 x=0; BB1 x=0 c/c++ 基于块的源码插桩-gCov do arc BB2 y=f(x,y); y=f(x,y) BB:基本块 X=X+1; X=x+1 arc ARC:从一个BB到另一个BB叫跳转 jwhile(x<y) x>=y arc 对ARC部分插桩,计算ARC的执行次数 printfC) printfy) BB3 ECUG Meetup 第3期 采效率优化气 收佳实专换 QVIPTEST 七牛元
26. ECUG 覆盖率技术剖析 Meetup Orglng Jacoco on-the-fly ·第3期。 INVOKE A0 INVOKE A0 INVOKE CONDO) INVOKE condo PUBLIC STATIC VOID EXAMPLE () 2. AO): 3 IF (CONDO) T 4. BO: NVOKEI 15 INVOKE b0 1 ELSE T 6 CO: 7. 8. DO: GOTO 9. ECUG Meetup 第3期 X VIPTEST
27. ECUG 覆盖率技术剖析 Meetup Golang 一第3期。 go test-cover 剖析 FUNC MAIN() A :=0 3 IF A == 0 4 FMT.PRINTIN("HELLO 1") 5 1 ELSE T 6 FMT.PRINTIN("HELLO 2") X ECUG Meetup 第3期 ECUG X VIPTEST :
28. ECUG 覆盖率技术剖析 Meetup Golang ·第3期。 go test-cover 剖析 FUNC MAIN() A I= 0 If A fMt.PRINTIN("HELLO 1 else fmt.PRINTIN("HELLo 2″ ECUG Meetup 第3期 最佳实践专场 ECUG X ( VIPTEST
29. ECUG 覆盖率技术剖析 Meetup Golang 一第3期。 gotest-cover剖析 FUNC MAIN() (GOCOVER.COUNTI0L++: 2 a := 0 插入计数器 3 IF A == 0 IGOCOVER.COUNT[1L++: 4 FMT.PRINTIN("HELLO 1") 5 T ELSET GOCOVER.COUNT[2L++:0 6 FMT.PRINTIN("HELLO 2") 8 ECUG Meetup 第3期 最佳实践专场 起效化身 X VIPTEST > ECUG
30. ECUG 覆盖率技术剖析 Meetup Golang ·第3期。 var structt COUNT [3Juint32 POS [3 * 3]uint32 NumStmt [3juint16 gotest-cover剖析 POS: [3 * 3]UINT320 定义计数器 XC // [0] 8 7.9. 0X3000C // [1] 9 // [21 10 NUMSTMT: [3UINT160 12 2,//0 1,//1 1,//2 16 ECUG Meetup 第3期 起效优化与佳实度专换 X @ VIPTEST
31. ECUG Meetup ·第3期。 goc 如何解决痛点 ECUG Meetup 第 3期 (. VIPTEST
32. ECUG g0c 如何解决痛点 Meetup ·第3期。 项目甲必架 测试代码文件 改变 go build goc build go install goc install go run gocrun ECUG Meetup 第 3期 最效电代化 佳实践专场 (. VIPTEST
33. ECUG g0c 如何解决痛点 Meetup ·第3期。 判断工程类型 GOPATH Go module 复制所有GOPATH 复制整个工程到临 依赖到临时目录 时目录 ast/parser 注入计数器 注入计数器变量定义 调用 go build/install/run 原生命令 ECUG Meetup 第 3期 促效电优化气 ECUG X ( VIPTEST
34. ECUG g0c 如何解决痛点 Meetup ·第3期。 或获取覆盖率报 注入变量定义 ast/parser 插桩 给每一个main 包注入 HTTPAPI ECUG Meetup 第3期 (. VIPTEST
35. ECUG g0c 如何解决痛点 Meetup 一第3期。 GoCover STRUCT T [3]uint32 POS [3 * 3]uint32 NumStmt [3juint16 http://agent ip/v1/cover/coverage POS: [3 * 3LUINT320 C // TO] 9. 0X3000C // [1] // [21 11 NUMSTMT: [3luint16f 2.//0 正 1,//1 14 1,//2 15 16 ECUG Meetup 第3期 起效优化与佳实度专换 ECUG X ( VIPTEST )
36. ECUG g0c 如何解决痛点 Meetup ·第3期。 在远! GET /v1/cover/coverage 插桩后的服务 cmd: goc profile ECUG Meetup 第3期 (. VIPTEST
37. ECUG goc 如何解决痛点 Meetup ·第3期。 对分布式一 插桩后的服务1 注册 cmd: goc server GET http://goc server/vl/cover/register 1./ 服务名 2. ip:port ECUG Meetup 第3期 (. VIPTEST
38. ECUG g0c 如何解决痛点 Meetup ·第3期。 插桩后的服务1 注册 插桩后的服务2 cmd: goc server 插桩后的服务3 插桩后的服务4 ECUG Meetup 第3期 X ( VIPTEST
39. ECUG g0c 如何解决痛点 Meetup ·第3期。 插桩后的服务1 代理 拉取 插桩后的服务2 cmd: goc server 插桩后的服务3 请求、合并 插桩后的服务4 cmd: goc profile ECUG Meetup 第3期 聚效电优化点 X ( VIPTEST
40. ECUG goc 如何解决痛点 Meetup ·第3期。 对分布式应用不友好-遗留问题云原生应用不友好 1. Docker 2.Kubernetes 必须预先开启端口 3.防火墙 ECUG Meetup 第3期 聚效电优化与佳实度专推 VIPTEST
41. ECUG g0c 如何解决痛点 Meetup 一第3期。 对云原生应用不友好-gocvl遗留问题 插桩后的服务1 插桩后的服务2 cmd: goc server 拉取 插桩后的服务3 请求、合并 插桩后的服务4 cmd: goc profile NAT ECUG Meetup 第3期 聚效率优化点 ECUG X ( VIPTEST
42. ECUG Meetup ·第3期。 goc v2 ECUG Meetup 第 3期 (. VIPTEST
43. ECUG goc v2 如何解决痛点 Meetup ·第3期。 插桩后的服务1 websocket 连接 注册 cmd: goc server GET ws://server/v2/internal/ws/rpcstream 1./ 服务名 2. ip:port ECUG Meetup 第3期 (. VIPTEST
44. ECUG goc v2 如何解决痛点 Meetup ·第3期。 插桩后的服务1 ws长连接 cmd: goc server ECUG Meetup 第3期 (. VIPTEST
45. ECUG goc v2 如何解决痛点 Meetup 一第3期。 插桩后的服务1 ws长连接 插桩后的服务2 cmd: goc server 插桩后的服务3 插桩后的服务4 ECUG Meetup 第3期 X ( VIPTEST
46. ECUG g0c v2如何解决痛点 Meetup ·第3期。 应用不友好 插桩后的服务1 ws 长连接 插桩后的服务2 cmd: goc server 插桩后的服务3 插桩后的服务4 docker/k8s 无需做端口配置 NAT ECUG Meetup 第3期 聚效电优化与最佳实践专场 XVIPTEST
47. ECUG Meetup ·第3期。 04 扩展 ECUG Meetup 第3期 (. VIPTEST
48. ECUG 扩展 Meetup ·第3期。 集成进已有系统,展示PR/MR增量覆盖率 COVERALLS sonarQube Codecov ECUG Meetup 第3期 婴效率优化与最佳实践专场 ECUC VIPTEST
49. ECUG 扩展 Meetup ·第3期。 实时覆盖率实现精准测试 1.cmd:goc profile 轮询获取全量覆盖率 2.cmd:goc watch 实时推送增量覆盖率(goc V2) ECUG Meetup 第3期 起效化点 (. VIPTEST
50. goc git:(V2) CUG goc gIT:(V2) NUC 8 func main(){ goc gIT:(V2) eetup i:=1 9 :git:(V2) goc NUC 第3期。 10 for f 17 time.Sleep(2 * time.Second) ifi%2==11 itt 11 fmt.Println("hello,world") f else t itt 17 fmt.Println("hello,earth") 18 19 14,2 Bot -/KCP2 (SSH) hello,earth hello, world hello, earth NUC hello, world hello, earth hello, world hello, earth hello, world hello, earth hello, world hello, earth hello, world hello.earth hello,world hello,earth ECUG Meel TX
51. ECUG 扩展 Meetup ·第3期。 实时覆盖率实现精准测试 vscode demo 实时显示覆盖率-基于 cmd:goc profile 轮询 ECUG Meetup 第3期 起效化点 (. VIPTEST
52. Gomain.go ECUG Gomain.go>?main Meetup FUNC MAIN() T ·第3期。 R := GIN.DEFAULT() R.GET("/i"func(c *gin.Context) 10 C.JSON(200,gin.Ht 83 "message":"pong1", 12 13 o 14 FUNC(C *GIN.CONTEXT) 15 NAME:= C.QUERY("NAME") La 16 if name =="A" C.JSON(200,gin.Hf 8122 "message":"pong2a", Telse ifname =="" C.JSON(200,gin.Ht 22 "message":"pong2 b”, 18232 T ELSE T C.JSON(200,gin.Ht "message":"pong2 c", 28 29 PROBLEMS OUTPUT TERMINAL DEBUG CONSOLE 2:ZSh Liyiyang@work http://127 1:8080/01n927name [16:05:51] ECUG Meetup MPTEST X
53. ECUG 扩展 Meetup ·第3期。 goc server 有丰富的接口 vI接口 功能 √口 功能 获取覆盖率 GET /v1/cover/profile GET /v2/cover/profile 获取覆盖率 POST /v1/cover/clear 重置覆盖率 DELETE/v2/cover/profile 重置覆盖率 获取服务列表 GET /v2/agents GET /v1/cover/list 获取服务列表 (仅服务名、ip) (服务名、ip、服务在线状态) 删除服务 DELETE /v2/agents POST /vl/cover/remove 删除服务 ws://xxx/v2/cover/ws/watch 实时推送覆盖率 ECUG Meetup 第3期 坚效优化与佳续质专换 ECUG X ( VIPTEST )
54. Q&A ECUG Meetup 第 3期 (. VIPTEST
55. 谢谢 ECUG Meetup 第 3期 (. VIPTEST

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-16 02:40
浙ICP备14020137号-1 $Map of visitor$