Golang覆盖率分析输出格式

46

我正在理解在go test中使用的-coverprofile cover.out选项,特别是文件的格式。

例如,对server.go进行覆盖,会将输出写入cover.out

mode: set
github.com/cnuss/api_server/server.go:47.2,48.16 2 0
github.com/cnuss/api_server/server.go:52.2,53.16 2 0
github.com/cnuss/api_server/server.go:57.2,58.16 2 0
github.com/cnuss/api_server/server.go:62.2,63.16 2 0
github.com/cnuss/api_server/server.go:67.2,68.16 2 0
github.com/cnuss/api_server/server.go:72.2,73.16 2 0
github.com/cnuss/api_server/server.go:77.2,78.16 2 0
  1. 每个不同的列代表什么意思?
  2. 输出格式是否符合“标准”格式,例如gcov,xunit等,并且可转换为另一种格式?
3个回答

59

字段如下:

name.go:line.column,line.column numberOfStatements count

源代码


6
根据最近的研究,我发现最后一个字段实际上是一个0/1标志,用于指示特定语句是否被覆盖。 - Tareq Sha
谢谢,我终于找到了我想要的东西。 - Roger Russel
回复:@Tareq Sha,我刚看了一下go 1.15.2,最后一个字段的值不是0/1,count更有可能。 - Paul Rubel
3
如果使用-covermode=set生成报告,这些值将只是0和1,因为该模式不保留计数。而使用-covermode=count或-covermode=atomic,则可以查看实际计数。@TareqSha它代表了代码行被覆盖的次数。 - FGM
@Christian Nuss 这应该被标记为正确答案。 - Maria Ines Parnisari

14

golang-nuts社区(https://groups.google.com/forum/#!forum/golang-nuts)提供了一些有用的工具,可将Go覆盖率转换为更有用的格式。

JUnit格式(用于总结测试执行情况):

# Prerequisites
go install github.com/jstemmer/go-junit-report/v2@latest
# Tests
go test -v 2>&1 ./... | go-junit-report -set-exit-code > report.xml

代码覆盖率详细信息的 Cobertura 格式:

# Prerequisites
go get github.com/axw/gocov/gocov
go get github.com/AlekSi/gocov-xml
# Coverage
go test -coverprofile=cover.out
gocov convert cover.out | gocov-xml > coverage.xml

指引我朝这个方向的帖子在这里: https://groups.google.com/forum/#!topic/golang-nuts/iUc68Zrxk_c


21
为什么这个回答被接受了?它并没有回答问题! - Sam Jones
1
@SamJones 第一次吗? - ken

11

使用go cover工具处理覆盖率概要文件:

打开一个显示带注释源代码的Web浏览器:

    go tool cover -html=c.out

将HTML文件写出而不是启动Web浏览器:

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

在stdout中显示每个函数的覆盖率百分比:

    go tool cover -func=c.out

我没有看到-html-func作为选项... 我有什么遗漏吗?http://pastebin.com/d2wgQyDM - Christian Nuss
1
@ChristianNuss:你需要使用覆盖工具。请按照我的答案中准确打印的命令使用(这些命令直接来自于go tool cover -help)。 - JimB
啊,谢谢。首先运行go test -coverprofile,然后在该输出文件上运行go tool cover。但是,有没有一种方法将原始的覆盖输出文件转换为另一种格式,最好是xunit? - Christian Nuss
2
@ChristianNuss:我不知道有没有翻译器。如果有人写了一个,邮件列表可能是询问的最佳地点。 - JimB
论坛中有一个有用的评论:我需要尝试每个工具,但这些工具似乎是可行的:https://groups.google.com/forum/#!topic/golang-nuts/iUc68Zrxk_c - Christian Nuss
go tool cover -h - 030

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接