go coverage 覆盖率工具
文章
https://go.dev/blog/cover
测试覆盖度
定义:Test coverage(测试覆盖度)用于衡量一个包中的代码被测试用例覆盖的程度。
如果运行所有的测试用例能够触发包中80%的代码运行,我们就认为测试覆盖度为80%。
通常情况下,要计算测试覆盖率,需要对执行文件进行二进制拦截,比如gcov工具:通过在每个逻辑分支之后添加一个断点,来标记这个分支是否被执行到。这种基于二进制拦截的方法移植性不够好,需要针对不同CPU架构来实现。
go test -cover
通过对源代码进行重写,在分支中添加对应的监控语句来实现。例子:
package sizefunc Size(a int) string {switch {case a < 0:return "negative"case a == 0:return "zero"case a < 10:return "small"case a < 100:return "big"case a < 1000:return "huge"}return "enormous"
}
重写后:
func Size(a int) string {GoCover.Count[0] = 1switch {case a < 0:GoCover.Count[2] = 1return "negative"case a == 0:GoCover.Count[3] = 1return "zero"case a < 10:GoCover.Count[4] = 1return "small"case a < 100:GoCover.Count[5] = 1return "big"case a < 1000:GoCover.Count[6] = 1return "huge"}GoCover.Count[1] = 1return "enormous"
}
GoCover.Count[]
是一个计数器,用于统计程序中每个分支对应是否执行过。
go test -cover
只输出百分比结果,可以通过go test -coverprofile=cover.out
来查看详细的情况:
这个文件是不容易解读的,通过go tool cover -html=cover.out
打开网页查看:
热力图
覆盖度工具不仅可以记录分支是否被执行,还可以记录分支被执行了多少次。
go test -covermode=set|count|atomic
:
-covermode
:
- set: 默认模式,统计是否执行
- count: 计数
- atomic: count的并发安全版本,仅当需要精确统计时使用
统计fmt
包:
$ go test -covermode=count -coverprofile=count.out fmt
ok fmt 1.320s coverage: 95.1% of statements
将鼠标悬浮在代码块上可以看到具体执行的数据。
通过go tool cover -func=count.out
查看每个函数的覆盖度:
$ go tool cover -func=count.out
fmt/format.go: init 100.0%
fmt/format.go: clearflags 100.0%
fmt/format.go: init 100.0%
fmt/format.go: computePadding 84.6%
fmt/format.go: writePadding 100.0%
fmt/format.go: pad 100.0%
...
fmt/scan.go: advance 96.2%
fmt/scan.go: doScanf 96.8%
total: (statements) 91.7%
也许从这些测试中可以得到关于性能优化的提示。
go coverage 覆盖率工具相关推荐
- 测试覆盖率工具:EclEmma
测试覆盖率工具:EclEmma 目录 1 测试覆盖率实现技术 2 EclEmma介绍 3 EclEmma测试覆盖率指标 4 EclEmma安装 5 示例项目介绍 5.1 创建项目 5.2 用C ...
- 覆盖率工具gcov,lcov实践
覆盖率工具gcov,lcov实践记录 背景 本文记录的是gcov和lcov在统计一个分布式数据库的代码覆盖率过程中遇到的问题. 介绍 *gcov是一个测试代码覆盖率的工具,随着gcc一起发布,不需要进 ...
- Java覆盖率工具jacoco,Cobertura
最近研究Java覆盖率工具,了解到了jacoco,Cobertura这两款,但是Cobertura没有维护了,不支持新的java语法.下面简单介绍一下这两个工具的使用. 简介 市场上主要代码覆盖率工具 ...
- 测试覆盖率工具--EMMA
测试覆盖率(Code Coverage) 测试覆盖率,简单的说,就是评价测试活动覆盖产品代码的指标.测试的目的,是确认产品代码按照预期一样工作,也可以看作是产品代码工作方式的说明文档.进一步考虑,测试 ...
- Jacoco覆盖率工具使用
Jacoco介绍 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序.很多第 ...
- Python覆盖率工具
在 Python 中我们已经有了一个不错的覆盖率工具来帮助我们.你可以在实验楼环境中安装它: $ sudo pip3 install coverage 覆盖率示例 $ coverage3 run mo ...
- Android 增量代码测试覆盖率工具实践
当业务快速发展,新业务不断出现,开发同学粗心的情况下,难免会出现少测漏测的情况,如何保证新增代码有足够的测试覆盖率?当一段正常的代码,开发却修改了,测试人员没有测试其功能,如果保证能够发现? 所以代码 ...
- 代码扫描工具测试覆盖率工具
测试覆盖率工具 转载于:https://www.cnblogs.com/vivian-test/p/5398289.html
- iOS 覆盖率检测原理与增量代码测试覆盖率工具实现
背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...
最新文章
- Science:人类迎来目前最为全面的癌症染色质可及性图谱
- 牛博威:成熟的反外挂系统一般企业未必能承受
- Android开源框架——内存泄漏检测工具 LeakCanary
- python和r语言比较_Python和R语言之分析对比 - 数据分析
- java中数据库连接池_Java中的数据库连接池
- yum安装时报RPM-GPG-KEY错
- MySQL【案例讲解】分组函数
- 建立局域网计算机应安装,两台电脑如何建立局域网
- 敏捷开发用户故事系列之三:用户建模
- SqlServer中如何按姓氏笔画排序
- 物联网 ToB 的背后,开发者应了解什么?| CSDN 博文精选
- 培训师之绕口令与气息练习
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点...
- java如何使用md5加密_Java中MD5加密
- 高维数据存储 —— R 树
- 电脑用户计算机名文件夹,电脑用户名文件夹名称更改
- dataview中写入对象_DataView对象
- Android 记录自己的错误(Fatal signal 6 (SIGABRT), code -6 in tid 16701 (RenderThread))
- Proxy是代理,Reflect是干嘛用的?
- ioncube_loader_win_5.2.dll to be installed