golang递归覆盖率测试工具插件库roveralls的使用
roveralls - Go递归覆盖率测试工具
roveralls是一个用于测试Go包及其所有子包覆盖率的工具。它会输出一个名为"roveralls.coverprofile"的覆盖率配置文件,供goveralls等工具使用。
基本用法
最简单的用法是测试当前包及其子包,并在运行命令的目录中创建roveralls.coverprofile
文件:
$ roveralls
查看帮助
要查看命令帮助信息:
$ roveralls -help
roveralls runs coverage tests on a package and all its sub-packages. The
coverage profile is output as a single file called 'roveralls.coverprofile'
for use by tools such as goveralls.
Usage of roveralls:
-covermode count,set,atomic
Mode to run when testing files: count,set,atomic (default "count")
-help
Display this help
-ignore dir1,dir2,...
Comma separated list of directory names to ignore: dir1,dir2,... (default ".git,vendor")
-short
Tell long-running tests to shorten their run time
-v Verbose output
在浏览器中查看结果
要在浏览器中查看代码覆盖率:
$ go tool cover -html=roveralls.coverprofile
与goveralls配合使用
roveralls
的输出与标准的go test -coverprofile=profile.coverprofile
相同,但在输出文件中包含多个测试文件。因此可以与goveralls
等工具一起使用。
如果你想从.travis.yml
脚本中调用它,可以使用:
- $HOME/gopath/bin/roveralls
- $HOME/gopath/bin/goveralls -coverprofile=roveralls.coverprofile -service=travis-ci
完整示例
下面是一个完整的示例,展示如何使用roveralls测试项目并查看覆盖率:
- 首先安装roveralls:
go get github.com/lawrencewoodman/roveralls
- 在项目根目录运行测试:
roveralls -v -covermode=atomic
- 查看覆盖率报告:
go tool cover -html=roveralls.coverprofile
- 如果需要忽略某些目录(如vendor和testdata):
roveralls -ignore="vendor,testdata" -v
贡献
如果你想改进这个程序,可以向github上的仓库提交pull request。请将任何pull request放在单独的分支中以方便集成,并添加测试以证明其有效。如果你发现错误,请在项目的issues跟踪器上报告。
更多关于golang递归覆盖率测试工具插件库roveralls的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang递归覆盖率测试工具插件库roveralls的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用roveralls进行Golang递归覆盖率测试
roveralls是一个用于Golang的递归覆盖率测试工具,它能够测量并报告项目中所有包的测试覆盖率,包括子目录中的包。下面我将详细介绍如何使用roveralls。
安装roveralls
首先需要安装roveralls工具:
go get github.com/LawrenceWoodman/roveralls
基本使用方法
- 运行测试并生成覆盖率数据:
roveralls
- 指定输出文件:
roveralls -output coverage.html
- 排除某些目录:
roveralls -exclude "vendor/*,testdata/*"
完整示例
下面是一个完整的示例,展示如何在项目中集成roveralls:
// main.go
package main
import "fmt"
func Add(a, b int) int {
return a + b
}
func Subtract(a, b int) int {
return a - b
}
func main() {
fmt.Println("Add:", Add(2, 3))
fmt.Println("Subtract:", Subtract(5, 2))
}
// main_test.go
package main
import "testing"
func TestAdd(t *testing.T) {
result := Add(2, 3)
if result != 5 {
t.Errorf("Expected 5, got %d", result)
}
}
// 故意不测试Subtract函数以展示覆盖率
运行覆盖率测试
在项目根目录下运行:
roveralls -output coverage.html -exclude "*_test.go"
这将会:
- 递归查找所有Go包
- 运行测试
- 生成覆盖率报告
- 排除测试文件本身
- 输出HTML格式的覆盖率报告
与CI集成
可以在CI脚本中添加roveralls,例如在GitHub Actions中:
name: Test with roveralls
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Install roveralls
run: go get github.com/LawrenceWoodman/roveralls
- name: Run tests with roveralls
run: roveralls -output coverage.html
- name: Upload coverage
uses: actions/upload-artifact@v2
with:
name: coverage-report
path: coverage.html
高级选项
roveralls还提供了一些高级选项:
-covermode
:设置覆盖率模式(set, count, atomic)-coverpkg
:指定要计算覆盖率的包-v
:详细输出模式-timeout
:设置超时时间
例如:
roveralls -covermode=atomic -coverpkg=./... -v -timeout=5m
注意事项
- roveralls会递归查找所有子目录中的Go包,确保你的项目结构合理
- 对于大型项目,可能需要增加超时时间
- 覆盖率报告可以帮助识别未被测试的代码路径
- 建议将覆盖率阈值作为CI的一部分,确保测试覆盖率不会下降
roveralls是一个简单但强大的工具,特别适合需要测量整个项目覆盖率而不仅仅是单个包覆盖率的场景。