集成测试中的 golang 代码覆盖率?

golang code coverage in integration tests?

看来 "go tool cover -var=foo" 的重点可能是生成可以部署在集成测试工具中的检测代码。有人为此目的使用此功能吗?如果是这样,是否有定期转储计数器的常规方法?似乎棘手的部分是几乎同时对所有感兴趣的文件执行此操作。即使那样,一些偏差(如果使用 -mode=count)也是不可避免的。

我们使用它从我们的各种测试中收集代码覆盖率以获得跨测试的单个代码覆盖率数字并查看未发现的代码路径 * 模块测试 * 集成测试 * UI 测试 * API 测试 * 单元测试

实现这个的方法是

  • 构建一个启用覆盖的检测二进制文件 (app.debug)。下面的命令生成一个 app.debug 并启用覆盖检测

    $ go test -c -covermode=atomic -coverpkg="pkg/path/..." -o app.debug
    
  • 在测试和 运行 测试中使用此 app.debug 而不是您的应用程序。我们的是一个 HTTP 服务器,但这应该适用于大多数应用程序。每个测试生成一个单独的 cov 文件,稍后需要合并。

    $ ./app.debug -test.coverprofile=functest.cov -- app.params
    
  • 合并所有测试cov文件得到一个cov文件。为此,你可以使用gocovmerge

    $ find $COVERAGE_DIR -name *.cov | xargs gocovmerge > final.cov
    

您终于有了一个覆盖率文件,它为您提供了来自各种覆盖率的代码覆盖率的完整图片。