开源一种新的 Golang Go语言覆盖率收集方式

发布于 1周前 作者 ionicwang 来自 Go语言

开源一种新的 Golang Go语言覆盖率收集方式

Golang 官方只提供了go test单测覆盖率收集工具,无法像其他语言一样收集运行时二进制的覆盖率。

七牛曾在MTSC2018开源过一个实现方案,但这种方案有先天缺陷:1. 受限于go test命令,程序必须关闭才能收集覆盖率,2. 会污染被测代码库,给本地开发带来不便,3. 会注入 flag 。

为此,七牛又研发了新的系统测试覆盖率收集工具:https://github.com/qiniu/goc

效果图

使用步骤

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

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

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

也可以直接合并步骤 1 和 2 为:

  1. goc run

limit

goc 在设计上希望完全兼容 go 命令行工具核心命令(go buld/install/run)。使用体验上,也希望向 go 命令行工具靠拢:

goc help                                                                                                       [11:38:04][11492]
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.

目前项目还处于初级阶段,所以现在:

  1. 不支持 Windows
  2. go buld/install/run 包名规则支持不完善
  3. 等等

欢迎来https://github.com/qiniu/goc提交 issue,贡献代码,一起完善 Golang 的系统测试覆盖率收集工具。


更多关于开源一种新的 Golang Go语言覆盖率收集方式的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

挺一下!

更多关于开源一种新的 Golang Go语言覆盖率收集方式的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


您好!

非常高兴地看到您在探索 Golang 覆盖率收集的新方法。在 Go 语言生态系统中,代码覆盖率是衡量测试有效性的重要指标。现有的工具如 go test -cover 已经为我们提供了基础的覆盖率报告,但总是有更多的空间和创意来提升这一过程的效率和易用性。

关于您提到的“新的 Golang Go语言覆盖率收集方式”,我有以下几点建议和思考:

  1. 集成化工具:考虑开发一个集成化的工具,它不仅能收集覆盖率数据,还能提供可视化的报告,如生成 HTML 或在 CI/CD 管道中直接展示。

  2. 并行与分布式测试:对于大型项目,可以探索如何并行化覆盖率收集过程,甚至在分布式环境中运行测试,以加快整体覆盖率报告的生成速度。

  3. 更细粒度的控制:提供对覆盖率收集的细粒度控制,比如按包、函数或代码块进行覆盖率统计,有助于开发者更精确地定位测试缺失的部分。

  4. 与其他工具的集成:考虑与现有的代码质量、分析或监控工具集成,使得覆盖率数据能够无缝地融入开发者的日常工作流程中。

  5. 开源社区:将您的工具开源出来,不仅能吸引更多的贡献者,还能让 Go 社区受益,共同推动 Go 语言测试实践的进步。

希望这些建议能对您有所帮助,期待看到您的新工具为 Go 语言开发者带来更多便利!

回到顶部