覆盖率项目实践"/>
goc统计go语言代码覆盖率项目实践
一、背景
分析未覆盖部分的代码,从而反推测试用例设计场景是否覆盖充分,没有覆盖到的代码是否存在设计的盲点,以便后续补充测试场景。
代码覆盖率高不一定能说明测试质量就一定高,但是反过来看,代码覆盖率低的,测试质量就一定是比较薄弱的(个人认为:低于60%),可以作为定量自我审视测试是否充分的重要工具之一。
二、技术选型
工具 | 优点 | 缺点 |
---|---|---|
go test -cover | 自带的简单覆盖率工具,易于使用 适合单元测试快速获取覆盖率数据 | 只能输出行覆盖率,无法对函数和语句覆盖率进行细粒度分析 只能以单元测试方式启动,无法打包项目进行正常部署 对代码插桩 |
goc | 可以生成具有更细粒度的覆盖率信息,如函数和语句级别的覆盖率 可以对项目打包,按照我们公司现在的流程部署 提供注册中心统一管理被测服务 | 对代码插桩 只支持goc build .打包 |
三、goc介绍
goc github:
简介:goc 是专为 Go 语言打造的一个综合覆盖率收集系统,尤其适合复杂的测试场景,比如系统测试时的代码覆盖率收集以及精准测试。
架构设计:
四、工具安装
goc安装
# Mac/AMD64
curl -s | grep "browser_download_url.*-darwin-amd64.tar.gz" | cut -d : -f 2,3 | tr -d \" | xargs -n 1 curl -L | tar -zx && chmod +x goc && mv goc /usr/local/bin
gocov 和 gocov-html安装,生成覆盖率报告
go install github/axw/gocov/gocov@latest
go install github/matm/gocov-html/cmd/gocov-html@latest
五、本地项目代码覆盖率统计
项目github:simple-go-server
步骤1:复制项目代码到本地
步骤2:启动goc注册中心服务
goc server
步骤3:使用"goc build"编译项目
goc build
步骤4:运行项目
./simple-go-server
步骤5:执行测试用例
步骤6:收集覆盖率
goc profile -o temp.cov
步骤7:生成覆盖率报告
gocov convert temp.cov |gocov-html >temp.html
覆盖率报告截图:
六、集成到Jenkins
实现流程图
exclude.txt排出文件内容:
simple-go-server/xxx.go
simple-go-server/test
Jenkins 执行shell 配置
# 获取服务ip address
target_url=$(goc list --center="domainA:7777" | jq '.simple-go-server[0]')#清除存量覆盖率数据
goc clear --center="domainA:7777" --address=$target_url#执行自动化测试用例
newman run at_testcases.json#收集覆盖率数据
goc profile --address=$target_url --center="domainA:7777" -o temp.cov#排出不想收集文件
grep -v -F -f exclude.txt temp.cov > temp.cov#拉取最新代码
cd simple-go-server
git pull#生成代码覆盖率报告
gocov convert temp.cov | gocov-html > temp_report_cov.html
七、Q&A
问题1:如何忽略某些文件的覆盖率统计?
背景:在统计项目的代码覆盖率时,统计的覆盖率是整个项目下所有代码的覆盖率,实际执行测试时项目下有很多代码是完全执行不到的,比如框架生成的代码等等,如果这些都统计进去的话,会拉低整个项目的代码覆盖率值,所以一般我们只关心具体业务的代码覆盖率即可
答:
如仅需统计项目下的src文件夹下的代码覆盖率方法1:指明需要覆盖的文件路径goc profile --coverfile src #需覆盖的路径仅有一个时
goc profile --coverfile src/main --converfile src/list #需覆盖的路径超过1个时
方法2:忽略不需要覆盖的文件路径goc profile --skipfile /app #仅忽略一个路径时
goc profile --skipfile /app/errors --skipfile /app/test #忽略路径超过1个时
问题2:如何清除存量代码覆盖率统计数据?
答:goc clear
问题3:如何合并两个代码覆盖率文件?
答:goc merge a.cov b.cov -o merge.cov
问题4:如何统计增量代码覆盖率?
答:还在思考中
更多推荐
goc统计go语言代码覆盖率项目实践
发布评论