如何计算测试的总代码覆盖率

Shr*_*ash 4 integration-testing code-coverage go go-testing

我需要计算 golang 项目的代码覆盖率,其中测试源将是用 Java 语言编写的集成测试。这需要首先对 go build 进行检测,然后在服务器上运行,以便测试可以运行,并且在测试结束后我们才能知道代码覆盖率是多少?我在互联网上没有找到这方面的单一参考,所有存在的都是单元测试,可以轻松运行并用于计算覆盖率

koz*_*zmo 5

首先,使用-coverprofile标志生成覆盖率配置文件,并告诉命令在哪里存储信息。

%  go test ./... -coverprofile cover.out              
?       some.project/somepkg            [no test files]
ok      some.project/somepkg/service    0.329s  coverage: 53.3% of statements

Run Code Online (Sandbox Code Playgroud)

go tool cover与标志一起使用-func并将其指向先前生成的文件。这将向您显示项目中每个包的代码覆盖率,并在底部显示总覆盖率。

%  go tool cover -func cover.out         

some.project/somepkg/service/.go:27:          FuncA        100.0%
some.project/somepkg/service/service.go:33:   FuncB        100.0%
some.project/somepkg/service/service.go:51:   FuncC        0.0%
total:                                        (statements) 53.3%

Run Code Online (Sandbox Code Playgroud)
%  go tool cover -func cover.out | fgrep total:
total:                                        (statements) 53.3%
Run Code Online (Sandbox Code Playgroud)
%  go tool cover -func cover.out | fgrep total | awk '{print $3}'
100.0%
Run Code Online (Sandbox Code Playgroud)
%  go tool cover -func cover.out | fgrep total | awk '{print substr($3, 1, length($3)-1)}'
100.0
Run Code Online (Sandbox Code Playgroud)