go coverage 覆盖率工具

article/2025/10/23 12:12:45

文章

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%

也许从这些测试中可以得到关于性能优化的提示。


http://chatgpt.dhexx.cn/article/BkknLJf0.shtml

相关文章

gtest-coverage

原文地址https://paul.pub/gtest-and-coverage/ 对代码进行单元测试是几乎每个软件工程师都要完成的工作。本文以C语言为基础&#xff0c;讲解如何进行单元测试并生成测试报告。 前言 测试是软件开发过程中一个必须的环节&#xff0c;测试确保软件的质量符合预期。 对于工程…

Formal Verification (五) coverage、sign-off flow

coverage type formal和simulation一样&#xff0c;也是基于coverage-driven的验证方式&#xff1b;针对formal的coverage metrics&#xff0c;可以分为以下几种&#xff08;不同工具定义略有不同&#xff0c;本文以Jaspergold为例&#xff09;&#xff1a; code coverage c…

Idea coverage覆盖率测试工具的使用

知其然 知其所以然创作不易 求点赞&#x1f44d; 求关注❤️ 求分享&#x1f465;絮叨 最近项目中&#xff0c;每次Build的时候会触发sonar程序去扫描代码&#xff0c;打出测试覆盖率&#xff0c;也就是coverage。如果不到80%以上&#xff0c;就要去补Test case。可是我们在开…

SV -- Coverage 覆盖率

SV – Coverage 覆盖率 本文内容来自&#xff1a; http://www.asic-world.com/systemverilog/coverage.htmlhttps://verificationguide.com/systemverilog/systemverilog-array-manipulation-methods/https://blog.csdn.net/bleauchat/article/details/90445713 (本文的主要来源…

VCS coverage覆盖率工具常用功能

目录 简介 Coverage Metrics覆盖指标&#xff1a; merge VCS相关命令 常用编译选项&#xff1a; 常用仿真选项&#xff1a; 系统函数&#xff1a; 使用URG及其参数&#xff1a; 用DVE查看coverage&#xff1a; 简介 可通过 -cm_hier 配置文件来控制覆盖率收集范围 C…

vcs/urg 进行覆盖率coverage merge及部分merge到整体

目录 1.vcs收coverage基本Option 2.相同代码的merge 3.部分merge到整体 3.1 mapfile 3.2 -map使用语法 3.3合并的常见问题 3.3.1 UCAPI-MAP-SHAPEMISMATCH coverage相关的用户手册可以在本人的百度云盘中查看Coverage Technology User Guide.pdf 还可以参考gsithxy的博文…

代码覆盖率 ——语句覆盖 Statement Coverage、分支覆盖 Branch Coverage、 路径覆盖 Path Coverage的区别

我们以下面代码为例&#xff1a; public static boolean Method(boolean a, boolean b) {int x 2;int y -4;if(a)x y;elsex -2*x;if(b)y 0-x;return ((100/(xy))> 0);}语句覆盖 Statement Coverage 当我们要实现100% Statement Coverage&#xff0c;只需以下两个test…

NGS 测序深度和覆盖度—Depth、Coverage

文章目录 前言这是比较基本的两个概念&#xff1a;二者的关系&#xff1a;例子&#xff1a;使用**bamdst**计算覆盖度安装 使用参考&#xff1a; 前言 温故而知新&#xff0c;刚入门的时候没有好好记笔记&#xff0c;现在补上&#x1f611; 公众号&#xff1a;猪猪的乌托邦 这…

idea插件Coverage(用例覆盖率)使用

idea插件Coverage&#xff08;用例覆盖率&#xff09;使用 选择测试用例中要执行的包、类或方法&#xff0c;右键选择Run …with Coverage。 执行结束后可在右侧查看覆盖率结果。可以点击导出按钮导出覆盖率报告。注意&#xff1a;若只执行了包中的某个类或方法&#xff0c;则…

浅谈coverage

背景描述&#xff1a; 公司需要对测试用例的对工程代码的覆盖率做统计&#xff0c;因此需要用到coverage&#xff0c;这里有个特殊的点&#xff0c;公司的工程运行时要在容器中进行的。 实际应用&#xff1a; 1. 首先&#xff0c;需要下载coverage&#xff1a; pip3 install…

Python代码覆盖率分析工具Coverage

目录 简介 安装 命令行中使用 调用API使用 简介 Coverage是一个Python代码覆盖率分析工具&#xff0c;它可以用于衡量Python测试代码的质量。通过给代码执行带来的覆盖率数据&#xff0c;Coverage可以帮助开发人员找出被回归测试代码中的漏洞&#xff0c;并且指明哪些代码…

coverage 测试代码覆盖率

测试覆盖率&#xff0c;简单的说&#xff0c;就是评价测试活动覆盖产品代码的指标。测试的目的&#xff0c;是确认产品代码按照预期一样工作&#xff0c;也可以看作是产品代码工作方式的说明文档。进一步考虑&#xff0c;测试覆盖率可以看作是产品代码质量的间接指标&#xff0…

GIS原理篇 Coverage

一、什么是 Coverage Coverage 是一种用于存储矢量数据的地理相关数据模型&#xff0c;它包含地理要素的空间&#xff08;位置&#xff09;数据和属性&#xff08;描述性&#xff09;数据。Coverage 使用一组要素类来表示地理要素。每个要素类存储一组点、线&#xff08;弧&am…

Python:代码覆盖率工具coverage

简介&#xff1a;覆盖率测量通常用于衡量测试的有效性。它可以显示您的代码的哪些部分正在被测试执行&#xff0c;哪些不是。coverage是一个测量 Python 程序代码覆盖率的工具。它监视您的程序&#xff0c;注意代码的哪些部分已被执行&#xff0c;然后分析源代码以识别可能已执…

configure--prefix

本文主要说明--prefix参数的作用&#xff0c;其主要用在编译安装源代码应用中的./configure环节。 ./configure --help 查看详细的说明帮助 1、源码安装一般包括几个步骤&#xff1a;配置&#xff08;configure&#xff09;&#xff0c;编译&#xff08;make&#xff09;&…

路由策略 匹配工具 IP-Prefix

⦁ p-prefix-name&#xff1a;指定地址前缀列表的名称。字符串形式&#xff0c;长度范围是1&#xff5e;169&#xff0c;不支持空格&#xff0c;区分大小写。 ⦁ index index-number&#xff1a;指定本匹配项在地址前缀列表中的序号。整数形式&#xff0c;取值范围是1&am…

CondaValueError: The target prefix is the base prefix. Aborting.

报错截图 错误原因 conda命令错误 正确做法 conda create -n py38 python3.8

zuul 里面的 prefix 和 strip-prefix 怎么使用

首先两个是配置路由前缀的&#xff0c; 下面是我网上找的一段话&#xff1a; prefix &#xff1a;前缀&#xff0c;当请求匹配前缀时会进行代理strip-prefix &#xff1a;代理前缀默认会从请求路径中移除&#xff0c;通过该设置关闭移除功能&#xff0c; 当 stripPrefixtrue …

Trie树(Prefix Tree)介绍

本文用尽量简洁的语言介绍一种树形数据结构 —— Trie树。 一、什么是Trie树 Trie树&#xff0c;又叫字典树、前缀树&#xff08;Prefix Tree&#xff09;、单词查找树 或 键树&#xff0c;是一种多叉树结构。如下图&#xff1a; 上图是一棵Trie树&#xff0c;表示了关键字集…

configure --prefix=/的作用和用法

非root用户安装python和gcc的时候&#xff0c;总是需要设定这个&#xff0c;只知道是个路径&#xff0c;具体是什么路径&#xff0c;代表什么不清楚。 不明白就百度&#xff1a; configure --prefix/是干啥用的&#xff1f;这个路径代表了什么&#xff1f; Configure是一个可…