文章

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 覆盖率工具相关推荐

  1. 测试覆盖率工具:EclEmma

    测试覆盖率工具:EclEmma 目录 1 测试覆盖率实现技术 2 EclEmma介绍 3 EclEmma测试覆盖率指标 4 EclEmma安装 5 示例项目介绍   5.1 创建项目   5.2 用C ...

  2. 覆盖率工具gcov,lcov实践

    覆盖率工具gcov,lcov实践记录 背景 本文记录的是gcov和lcov在统计一个分布式数据库的代码覆盖率过程中遇到的问题. 介绍 *gcov是一个测试代码覆盖率的工具,随着gcc一起发布,不需要进 ...

  3. Java覆盖率工具jacoco,Cobertura

    最近研究Java覆盖率工具,了解到了jacoco,Cobertura这两款,但是Cobertura没有维护了,不支持新的java语法.下面简单介绍一下这两个工具的使用. 简介 市场上主要代码覆盖率工具 ...

  4. 测试覆盖率工具--EMMA

    测试覆盖率(Code Coverage) 测试覆盖率,简单的说,就是评价测试活动覆盖产品代码的指标.测试的目的,是确认产品代码按照预期一样工作,也可以看作是产品代码工作方式的说明文档.进一步考虑,测试 ...

  5. Jacoco覆盖率工具使用

    Jacoco介绍 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序.很多第 ...

  6. Python覆盖率工具

    在 Python 中我们已经有了一个不错的覆盖率工具来帮助我们.你可以在实验楼环境中安装它: $ sudo pip3 install coverage 覆盖率示例 $ coverage3 run mo ...

  7. Android 增量代码测试覆盖率工具实践

    当业务快速发展,新业务不断出现,开发同学粗心的情况下,难免会出现少测漏测的情况,如何保证新增代码有足够的测试覆盖率?当一段正常的代码,开发却修改了,测试人员没有测试其功能,如果保证能够发现? 所以代码 ...

  8. 代码扫描工具测试覆盖率工具

    测试覆盖率工具 转载于:https://www.cnblogs.com/vivian-test/p/5398289.html

  9. iOS 覆盖率检测原理与增量代码测试覆盖率工具实现

    背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...

最新文章

  1. Science:人类迎来目前最为全面的癌症染色质可及性图谱
  2. 牛博威:成熟的反外挂系统一般企业未必能承受
  3. Android开源框架——内存泄漏检测工具 LeakCanary
  4. python和r语言比较_Python和R语言之分析对比 - 数据分析
  5. java中数据库连接池_Java中的数据库连接池
  6. yum安装时报RPM-GPG-KEY错
  7. MySQL【案例讲解】分组函数
  8. 建立局域网计算机应安装,两台电脑如何建立局域网
  9. 敏捷开发用户故事系列之三:用户建模
  10. SqlServer中如何按姓氏笔画排序
  11. 物联网 ToB 的背后,开发者应了解什么?| CSDN 博文精选
  12. 培训师之绕口令与气息练习
  13. 小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点...
  14. java如何使用md5加密_Java中MD5加密
  15. 高维数据存储 —— R 树
  16. 电脑用户计算机名文件夹,电脑用户名文件夹名称更改
  17. dataview中写入对象_DataView对象
  18. Android 记录自己的错误(Fatal signal 6 (SIGABRT), code -6 in tid 16701 (RenderThread))
  19. Proxy是代理,Reflect是干嘛用的?
  20. ioncube_loader_win_5.2.dll to be installed

热门文章

  1. MySQL删除唯一性约束unique
  2. 技术小咖之windows图形界面基础
  3. 关于GPT3的一些思考
  4. 进件(贷前)项目的从0到1
  5. 微软3D Movie Maker开源
  6. static与全局变量
  7. 制作U盘启动盘的方法
  8. AM335x-StarterWare用户手册(三)
  9. remote1 Android,Kamoer RemoteAPP
  10. cppcheck 自定义规则_cppcheck代码静态检查工具及相关工具插件用法介绍