Testing 如何测量Golang集成测试覆盖率?
我试图使用Testing 如何测量Golang集成测试覆盖率?,testing,go,code-coverage,test-coverage,Testing,Go,Code Coverage,Test Coverage,我试图使用go test-cover来衡量我正在构建的服务的测试覆盖率。这是一个RESTAPI,我正在通过旋转它、发出测试HTTP请求和查看HTTP响应来测试它。这些测试不是服务包的一部分,go tool cover返回0%的测试覆盖率。有没有办法获得实际的测试覆盖率?我希望给定端点上的最佳情况场景测试能够覆盖特定端点处理程序至少30-50%的代码,并通过添加更多常见错误测试来进一步改进这一点。据我所知,如果您想要覆盖,您需要运行go test-cover 但是,添加一个可以传递的标志很容易,它
go test-cover
来衡量我正在构建的服务的测试覆盖率。这是一个RESTAPI,我正在通过旋转它、发出测试HTTP请求和查看HTTP响应来测试它。这些测试不是服务包的一部分,go tool cover
返回0%的测试覆盖率。有没有办法获得实际的测试覆盖率?我希望给定端点上的最佳情况场景测试能够覆盖特定端点处理程序至少30-50%的代码,并通过添加更多常见错误测试来进一步改进这一点。据我所知,如果您想要覆盖,您需要运行go test-cover
但是,添加一个可以传递的标志很容易,它将启用这些额外的测试,因此您可以使它们成为测试套件的一部分,但不能正常运行它们
因此,在您的测试中添加一个命令行标志
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
我被指的是-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\u test.go
中进行了测试,该测试位于package main
中,使用的是package mypackage
。我最感兴趣的是package mypackage
的覆盖范围,因为它包含了项目中99%的业务逻辑
我对Go很陌生,所以这很可能不是通过集成测试来衡量测试覆盖率的最佳方法。您可以通过创建覆盖率html页面的方式运行Go测试。像这样:
go test -v -coverprofile cover.out ./...
go tool cover -html=cover.out -o cover.html
open cover.html
谢谢你的评论,但这并不是我所需要的。问题是覆盖率不包括项目其他包中的代码。我将更新我的问题,以反映这一点,并使其更清楚。@antonevangelatov我明白你的意思!我会留下这个答案,以防万一有人觉得它有用,我注意到你的答案中有-coverpkg
,谢谢!伟大的我只是把这联系起来谢谢Simon。这确实是我要找的!为Golang提供了一个用于精确代码覆盖率报告的实用程序:谢谢你,Sergei。我不知道,我会查出来的!