golang多包项目覆盖率分析工具插件overalls的使用
Golang多包项目覆盖率分析工具插件overalls的使用
概述
overalls是一个用于多包Go项目的覆盖率分析工具,它会在每个包含测试文件的目录中运行go test -covermode=count -coverprofile=profile.coverprofile
命令,然后将所有覆盖率结果合并成一个名为overalls.coverprofile
的文件,位于项目根目录中。
安装
go get github.com/go-playground/overalls
基本使用示例
# 基本用法
overalls -project=github.com/go-playground/overalls -covermode=count -debug
# 包含跨包覆盖率统计
overalls -project=github.com/go-playground/overalls -covermode=count -debug -- -coverpkg=./...
与其他工具集成
与goveralls集成
# 先运行overalls生成覆盖率文件
overalls -project=github.com/your/project -covermode=count
# 然后使用goveralls上传结果
goveralls -coverprofile=overalls.coverprofile -service travis-ci -repotoken $COVERALLS_TOKEN
与codecov.io集成
# 先运行overalls生成覆盖率文件
overalls -project=github.com/your/project -covermode=count
# 重命名文件并上传到codecov.io
mv overalls.coverprofile coverage.txt
export CODECOV_TOKEN=your_token
bash <(curl -s https://codecov.io/bash)
完整选项说明
$ overalls -help
usage: overalls -project=[path] -covermode[mode] OPTIONS -- TESTOPTIONS
overalls递归遍历项目目录结构,在每个包含go测试文件的目录中运行
'go test -covermode=count -coverprofile=profile.coverprofile',
然后将它们合并成一个名为'overalls.coverprofile'的覆盖率文件
必选选项:
-project
项目路径,可以是绝对路径或相对于'$GOPATH/src'的相对路径
例如: -project=github.com/go-playground/overalls
-covermode
测试文件时使用的模式
默认:count
可选选项:
-ignore
要忽略的目录名称列表,用逗号分隔,相对于项目路径
例如: -ignore=[.git,.hiddentdir...]
默认: '.git'
-debug
是否打印调试信息的标志
例如: -debug
默认:false
-concurrency
限制同时处理的包数量
设置时最小值必须为2或更大
例如: -concurrency=5
默认: 无限制
注意事项
- goveralls和codecover目前计算覆盖率的方式与
go tool cover
不同 - overalls(和go test)默认不会计算"跨"包的覆盖率。例如,如果包A中的测试覆盖了包B中的代码,overalls默认不会统计它。要启用此功能,请添加coverpkg标志
测试选项
在--
之后的任何标志都将原样传递给go test
。例如:
overalls -project=$PROJECT -debug -- -race -v
这将调用go test -race -v
以及-coverprofile
命令。
更多关于golang多包项目覆盖率分析工具插件overalls的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang多包项目覆盖率分析工具插件overalls的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang多包项目覆盖率分析工具overalls使用指南
overalls是一个用于分析Golang多包项目测试覆盖率的工具,它能够聚合多个包的覆盖率数据,生成统一的覆盖率报告。
安装overalls
go get -u github.com/go-playground/overalls
基本使用方法
1. 简单运行
在项目根目录下执行:
overalls -project=github.com/yourusername/yourproject -covermode=count
2. 常用参数说明
-project
: 指定项目导入路径-covermode
: 覆盖率模式(set, count, atomic)-debug
: 启用调试模式-ignore
: 忽略的目录(用逗号分隔)-concurrency
: 并发测试的包数量-timeout
: 测试超时时间
完整示例
项目结构示例
/myproject
/pkg1
pkg1.go
pkg1_test.go
/pkg2
pkg2.go
pkg2_test.go
main.go
go.mod
使用overalls的完整命令
overalls \
-project=github.com/yourusername/myproject \
-covermode=atomic \
-ignore="vendor,testdata" \
-concurrency=4 \
-timeout=5m
输出结果示例
overalls会输出每个包的覆盖率以及项目的整体覆盖率:
PASS
coverage: 78.9% of statements
github.com/yourusername/myproject/pkg1 coverage: 85.2% of statements
github.com/yourusername/myproject/pkg2 coverage: 72.5% of statements
与CI集成
1. Travis CI集成示例
.travis.yml
配置示例:
language: go
go:
- "1.20"
install:
- go get -u github.com/go-playground/overalls
script:
- overalls -project=github.com/yourusername/myproject -covermode=count
2. GitHub Actions集成示例
.github/workflows/test.yml
配置示例:
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: '1.20'
- name: Install overalls
run: go install github.com/go-playground/overalls@latest
- name: Run tests with coverage
run: overalls -project=github.com/yourusername/myproject -covermode=atomic
生成HTML报告
overalls本身不直接生成HTML报告,但可以结合go tool cover生成:
overalls -project=github.com/yourusername/myproject -covermode=count > coverage.out
go tool cover -html=coverage.out -o coverage.html
高级用法
1. 只测试特定包
overalls -project=github.com/yourusername/myproject -covermode=count ./pkg1 ./pkg2
2. 排除某些包
overalls -project=github.com/yourusername/myproject -covermode=count -ignore="pkg3,pkg4"
常见问题解决
- 内存不足:增加
-concurrency
值或减少并发数 - 测试超时:增加
-timeout
值 - 覆盖率数据不准确:确保使用
-covermode=atomic
进行并发测试
overalls是分析Golang多包项目覆盖率的强大工具,特别适合大型项目或微服务架构中的覆盖率统计。通过合理配置,可以有效地监控项目的测试质量。