开源推荐 介绍一款 go 语言测试覆盖率收集工具

e06084 · 2020年07月05日 · 最后由 e06084 回复于 2020年07月06日 · 1454 次阅读
本帖已被设为精华帖!

前言

作为工程效率领域的工作者,收集测试覆盖率是一直会去探索的领域。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 个步骤:

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

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

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

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

Join us!!!

goc 工具还在起步阶段,有很多可以期待的功能,欢迎一起加入贡献 👏

Github 地址:https://github.com/qiniu/goc

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio
astaxie 将本帖设为了精华贴 07月05日 21:00

goc 可以仅本机运行吗?

kevin 回复

goc server 可以在任何地方运行哦,譬如 goc server 启动地址 100.100.20.10:10000,那么被测的服务在编译时候指定 goc build --center=100.100.20.10:10000 既可。因为被测服务启动时候需要跟 goc server 通信。goc server 和被测服务启动只需要可通信即可。

yulibaozi GoCN 每日新闻(2020-07-07) 中提及了此贴 07月07日 20:10
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册