【问题标题】:Golang coverprofile output formatGolang coverprofile 输出格式
【发布时间】:2015-10-03 11:35:41
【问题描述】:

我试图理解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 等并可以转换成另一种格式?

【问题讨论】:

    标签: testing go cover


    【解决方案1】:

    这些字段是:

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

    Source

    【讨论】:

    • 从最近的一项研究中我发现最后一个字段实际上是一个 0/​​1 标志,表明指定的语句是否被覆盖
    • 谢谢,终于找到我要找的了。
    • 回复:@Tareq Sha,我刚看了一下 go 1.15.2,最后一个字段的值不是 0/1,count 似乎更有可能
    • @TareqSha 这是线路被覆盖的次数。如果报告是使用 -covermode=set 生成的,则值将仅为 0 和 1,因为该模式不保留计数。使用 -covermode=count 或 -covermode=atomic 可以查看实际计数。
    【解决方案2】:

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

    JUnit 格式(用于汇总测试执行):

    # Prerequisites
    go get github.com/jstemmer/go-junit-report
    # Tests
    go test -v | go-junit-report > 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

    【讨论】:

    • 这是公认的答案吗?它没有回答问题!
    【解决方案3】:

    您使用 go cover 工具处理封面配置文件:

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

        go tool cover -html=c.out
    

    写出一个 HTML 文件而不是启动网络浏览器:

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

    将每个函数的覆盖率百分比显示到标准输出:

        go tool cover -func=c.out
    

    【讨论】:

    • 我没有看到 -html-func 作为选项...我错过了什么吗? pastebin.com/d2wgQyDM
    • @ChristianNuss:你需要使用封面工具。完全按照我的答案中打印的命令使用命令(直接取自go tool cover -help
    • 啊,谢谢,首先运行 go test -coverprofile,然后在该输出文件上运行 go tool cover。不过,有没有办法将原始封面输出文件转换为另一种格式,最好是 xunit?
    • @ChristianNuss:我不知道有任何翻译。邮件列表可能是询问是否有人写过的最好的地方。
    • 来自论坛的有用评论:我需要尝试每个工具,但这些工具似乎可行:groups.google.com/forum/#!topic/golang-nuts/iUc68Zrxk_c
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 2015-04-22
    • 2018-04-17
    • 2011-12-06
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多