如何衡量Golang集成测试覆盖率?

xoshrz7s  于 2023-03-21  发布在  Go
关注(0)|答案(4)|浏览(195)

我正在尝试使用go test -cover来测量我正在构建的服务的测试覆盖率。它是一个REST API,我正在通过旋转它来测试它,进行测试HTTP请求并检查HTTP响应。这些测试不是服务包的一部分,go tool cover返回0%的测试覆盖率。是否有方法获得实际的测试覆盖率?我希望有最好的-在给定端点上进行用例场景测试,以覆盖特定端点处理程序至少30-50%的代码,并通过添加更多常见错误测试来进一步改进。

ijxebb2r

ijxebb2r1#

我被指向了-coverpkg指令,它做了我需要的事情--测量特定包中的测试覆盖率,即使测试使用了这个包而不是它的一部分。

$ go test -cover -coverpkg mypackage ./src/api/...
ok      /api    0.190s  coverage: 50.8% of statements in mypackage
ok      /api/mypackage   0.022s  coverage: 0.7% of statements in mypackage

相比

$ go test -cover ./src/api/...
ok      /api    0.191s  coverage: 71.0% of statements
ok      /api/mypackage   0.023s  coverage: 0.7% of statements

在上面的例子中,我在main_test.go中进行了测试,而package main使用了package mypackage。我最感兴趣的是package mypackage的覆盖率,因为它包含了项目中99%的业务逻辑。
我是Go语言的新手,所以很有可能这不是通过集成测试来度量测试覆盖率的最佳方法。

ibrsph3r

ibrsph3r2#

你可以用创建覆盖率html页面的方式运行go测试。像这样:

go test -v -coverprofile cover.out ./...
go tool cover -html=cover.out -o cover.html
open cover.html
6ie5vjzr

6ie5vjzr3#

据我所知,如果你想覆盖你需要运行go test -cover
然而,添加一个您可以传入的标志来启用这些额外的测试是很容易的,这样您就可以将它们作为测试套件的一部分,但不正常运行它们。
因此,在whatever_test.go中添加一个命令行标志

var integrationTest = flag.Bool("integration-test", false, "Run the integration tests")

然后在每个测试中做类似这样的事情

func TestSomething(t *testing.T){
    if !*integrationTest {
        t.Skip("Not running integration test")
    }
    // Do some integration testing
}

然后运行集成测试

go run -cover -integration-test
vddsk6oq

vddsk6oq4#

2015年:
这些测试不是服务包的一部分,go工具覆盖率返回0%的测试覆盖率
2023年3月,Go 1.20封面补充:
Go语言1.20支持收集程序(应用程序和集成测试)的代码覆盖率概要文件,而不仅仅是单元测试。
要收集程序的覆盖率数据,请使用go build-cover标志构建它,然后运行生成的二进制文件,并将环境变量GOCOVERDIR设置为覆盖率配置文件的输出目录。
有关如何开始的详细信息,请参阅“coverage for integration tests”登录页。有关设计和实施的详细信息,请参阅proposal
如“Code coverage for Go integration tests“中所述,
在1.20版本中,Go语言的覆盖工具不再局限于包测试,而是支持从更大的集成测试中收集概要文件。
示例:

$ go build -cover -o myprogram.exe myprogram.go
$ mkdir somedata
$ GOCOVERDIR=somedata ./myprogram.exe
I say "Hello, world." and "see ya"
$ ls somedata
covcounters.c6de772f99010ef5925877a7b05db4cc.2424989.1670252383678349347
covmeta.c6de772f99010ef5925877a7b05db4cc

还有

使用coverage数据文件

Go语言1.20引入了一个新的工具,“covdata”,可以用来从GOCOVERDIR目录中读取和操作覆盖率数据文件。

$ go tool covdata percent -i=somedata
    main    coverage: 100.0% of statements
    mydomain.com/greetings  coverage: 100.0% of statements

相关问题