Golang如何在运行环境中进行覆盖率测试

程序入口不是main函数,而是用Test函数来启动,代码实例如下:

// main.go
package main

import (
)

func main() {
}
//main_test.go
package main

import (
    "testing"
)

func TestMainApp(t *testing.T) {
    main()
}

利用go test -c参数来生产可执行的二进制文件。

但是一般情况下,项目代码并不会在一个文件或目录中,我们可以使用 coverpkg 参数来构建应用,具体参数如下:

go test -coverpkg="./..." ./cmd -c -o main.test

构建完成测试版本的二进制程序后,我们需要在测试环境部署这个特殊构建的测试版本应用,同时为了避免运行其他测试函数,我们需要对测试的入口函数进行限制,用如下命令来启动函数:

 ./main.test -test.run '^TestMainApp$' -test.coverprofile=system.out

最后输出结果会出现在system.out文件中,这是一个golang支持的覆盖率文件,格式如下

pkg.deepin.io/deepinid/certify/pkg/model/individual.go:16.57,19.2 2 0
pkg.deepin.io/deepinid/certify/pkg/model/individual.go:22.56,24.2 1 0
pkg.deepin.io/deepinid/certify/pkg/api/v1/user_certify.go:24.47,41.2 1 0

我们可以用go tool转换为人类可理解的格式:

go tool cover -html=system.out -o coverage.html

之后,我们可以在持续集成环境上部署上测试版本的程序,并在自动化测试结束后收集代码覆盖率信息

发表评论

电子邮件地址不会被公开。 必填项已用*标注