Go工具链之go tool cover使用方法和示例详解

 更新时间:2023年07月19日 09:23:42   作者:路多辛  
go tool cover是Go工具链中的一个命令,作用是分析测试用例的代码覆盖率,本文将对go tool cover 作用,使用方法和使用场景作一个简单的介绍,感兴趣的同学可以参考阅读一下

go tool cover 作用

go tool cover 是 Go 工具链中的一个命令,作用是分析测试用例的代码覆盖率。通过对测试覆盖文件进行分析,帮助开发人员和测试人员了解在测试中哪些代码执行了以及执行了多少次。

通过代码覆盖率分析可以知道测试用例执行后覆盖了多少代码行、分支和语句以及是否存在未被测试用例覆盖的代码,有助于发现代码中的潜在问题和错误,提高代码的质量和可靠性。

go tool cover 使用方法和使用示例

首先需要提供使用 go test 命令生成的代码覆盖文件(也可提供通过其他方式生成的和 go test 生成的文件格式一致的文件)。举个例子,以 github.com/luduoxin/json-validator-go 项目为例,clone 代码后,切换到项目的 validator 目录,打开终端,执行如下命令:

 $ go test -coverprofile=c.out

截取 c.out 的前两行内容如下

mode: set
github.com/luduoxin/json-validator-go/validator/scanner.go:11.30,15.2 3 

第二行每个部分代表的意思如下:

"文件:起始行.起始列,结束行.结束列 该基本块中的语句数量 该基本块被执行到的次数"

接下来看下使用go tool cover 来分析上面生成的文件 c.out 的方法,使用如下命令来查看每个方法的覆盖率和总的覆盖率

$ go tool cover -func=c.out

默认是将结果输出到标准输出,可以使用 -o 将结果输出到其他地方,例如输出到文件:

$ go tool cover -func=c.out -o coverage.out

使用如下方法生成一个 html 页面并且自动打开浏览器来展示覆盖率的详细情况:

$ go tool cover -html=c.out

这样可以非常直观地查看代码覆盖率的情况,已被覆盖的代码被标记为绿色(绿色越深,表示被覆盖的次数越多)、未被覆盖的代码被标记为红色、不需要检测的代码被标记为灰色,将鼠标移到代码块上,还会弹出对应的被覆盖次数。也可以不自动打开浏览器展示,而是将 html 内容输出到其他地方:

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

要生成覆盖文件,首先需要对源代码插桩,使用 go tool cover 可以生成插桩后的代码,例如:

go tool cover -mode=set -var=CoverageVariableName scanner.go

执行后会输出插桩后的源代码到标准输出。

go tool cover 使用场景

可以用于以下场景:

  • 开发人员可以用于分析单元测试用例的覆盖率,通过分析单元测试用例的覆盖率,以优化单元测试用例。
  • 测试人员可以用于分析测试用例的覆盖率,通过一定的手段,随着测试用例的不断执行,持续生成覆盖文件,然后使用 go tool cover 分析覆盖率,发现可能存在的测试盲点和未被测试用例覆盖的代码。

到此这篇关于Go工具链之go tool cover使用方法和示例详解的文章就介绍到这了,更多相关go tool cover使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang中的http.Server源码深入分析

    Golang中的http.Server源码深入分析

    这篇文章主要介绍了Golang中的http.Server源码,实现一个http.Server非常容易,只需要短短几行代码,同时有了协程的加持,Go实现的http.Server能够取得非常优秀的性能,下面我们来分析看看http.Server的源码
    2023-05-05
  • go语言的四数相加等于指定数算法

    go语言的四数相加等于指定数算法

    这篇文章主要介绍了go语言的四数相加等于指定数算法的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Golang请求fasthttp实践

    Golang请求fasthttp实践

    本文主要介绍了Golang请求fasthttp实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Golang项目搭配nginx部署反向代理负载均衡讲解

    Golang项目搭配nginx部署反向代理负载均衡讲解

    这篇文章主要为大家介绍了Golang项目搭配nginx部署正反向代理负载均衡讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 重学Go语言之基础数据类型详解

    重学Go语言之基础数据类型详解

    Go语言有非常强大的数据类型系统,其支持的数据类型大体上可分为四类:基础数据类型、引用数据类型、接口类型、复合类型。本文就来讲讲它们各自的用法吧
    2023-02-02
  • golang 四则运算计算器yacc归约手写实现

    golang 四则运算计算器yacc归约手写实现

    这篇文章主要为大家介绍了golang 四则运算 计算器 yacc 归约的手写实现,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 基于golang channel实现的轻量级异步任务分发器示例代码

    基于golang channel实现的轻量级异步任务分发器示例代码

    这篇文章主要给大家介绍了关于基于golang channel实现的轻量级异步任务分发器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Go 中 time.After 可能导致的内存泄露问题解析

    Go 中 time.After 可能导致的内存泄露问题解析

    这篇文章主要介绍了Go 中 time.After 可能导致的内存泄露,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Golang语言如何高效拼接字符串详解

    Golang语言如何高效拼接字符串详解

    最近在做性能优化,有个函数里面的耗时特别长,看里面的操作大多是一些字符串拼接的操作,而字符串拼接在 golang 里面其实有很多种实现,下面这篇文章主要给大家介绍了关于Golang语言如何高效拼接字符串的相关资料,需要的朋友可以参考下
    2021-11-11
  • 解决老版本goland无法调试新版本go的问题

    解决老版本goland无法调试新版本go的问题

    这篇文章主要给大家介绍了如何解决老版本goland无法调试新版本go的问题,文中通过代码示例给大家讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-11-11

最新评论