goc go 语言测试覆盖率收集工具

https://github.com/qiniu/goc
作为工程效率领域的工作者,收集测试覆盖率是一直会去探索的领域。go 语言官方提供了go test -coverprofile来收集单测覆盖率。但是对于其他环节的测试覆盖率(如集成测试)的收集,因为其复杂性,go 语言在该领域一直没有比较方便通用的工具。



七牛云在MTSC2018介绍了一款收集集成测试覆盖率的方案,该方案在使用上存在一些不足:1. 受限于 go test 命令,程序必须关闭才能收集覆盖率;2. 会污染被测代码库,给本地开发带来不便;3. 会注入 flag

七牛工程效率团队一直在该领域耕耘探索,优化了上面的不足,并在近期开源一款通用 Go 语言测试覆盖率收集工具goc,旨在帮助大家快速收集各个测试环节的覆盖率。



goc 工具快速一览



核心原理
goc 在设计上,抛弃老的go test -c -cover模式,而是直接与 go tool cover 工具交互,避免因go test命令引入的一系列弊端。完全兼容 go 命令行工具核心命令 (go build/install/run)。命令详情:



✗ goc help
goc is a comprehensive coverage testing tool for go language.



Find more information at:
https://github.com/qiniu/goc



Usage:
goc [command]



Available Commands:
build Do cover for all go files and execute go build command
clear Clear code coverage counters of all the registered services
diff Do coverage profile diff analysis, it can also work with prow and post comments to github pull request if needed
help Help about any command
init Clear the register information in order to start a new round of tests
install Do cover for all go files and execute go install command
list Lists all the registered services
profile Get coverage profile from service registry center
register Register a service into service center
run Run covers and runs the named main Go package
server Start a service registry center



Flags:
–debug run goc in debug mode
-h, –help help for goc



Use “goc [command] –help” for more information about a command.
使用步骤
说了这么多,大家如何快速使用 goc 工具在各自业务上完成覆盖率收集呢?可以参考以下 3 个步骤:



首先通过goc server命令部署一个服务注册中心,它将会作为枢纽服务跟所有的被测服务通信。



使用goc build –center=”"命令编译被测程序。goc 不会破坏被测程序的启动方式,所以你可以直接将编译出的二进制发布到集成测试环境。



环境部署好之后,就可以做执行任意的系统测试。而在测试期间,可以在任何时间,通过goc profile –center=”"拿到当前被测集群的覆盖率结果。



也可以直接合并步骤 1 和 2 为:goc run . (参考上面 gif 步骤)
https://gocn.vip/topics/10651


Category golang