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测试项目并查看覆盖率:

  1. 首先安装roveralls:
go get github.com/lawrencewoodman/roveralls
  1. 在项目根目录运行测试:
roveralls -v -covermode=atomic
  1. 查看覆盖率报告:
go tool cover -html=roveralls.coverprofile
  1. 如果需要忽略某些目录(如vendor和testdata):
roveralls -ignore="vendor,testdata" -v

贡献

如果你想改进这个程序,可以向github上的仓库提交pull request。请将任何pull request放在单独的分支中以方便集成,并添加测试以证明其有效。如果你发现错误,请在项目的issues跟踪器上报告。


更多关于golang递归覆盖率测试工具插件库roveralls的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang递归覆盖率测试工具插件库roveralls的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用roveralls进行Golang递归覆盖率测试

roveralls是一个用于Golang的递归覆盖率测试工具,它能够测量并报告项目中所有包的测试覆盖率,包括子目录中的包。下面我将详细介绍如何使用roveralls。

安装roveralls

首先需要安装roveralls工具:

go get github.com/LawrenceWoodman/roveralls

基本使用方法

  1. 运行测试并生成覆盖率数据:
roveralls
  1. 指定输出文件:
roveralls -output coverage.html
  1. 排除某些目录:
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"

这将会:

  1. 递归查找所有Go包
  2. 运行测试
  3. 生成覆盖率报告
  4. 排除测试文件本身
  5. 输出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

注意事项

  1. roveralls会递归查找所有子目录中的Go包,确保你的项目结构合理
  2. 对于大型项目,可能需要增加超时时间
  3. 覆盖率报告可以帮助识别未被测试的代码路径
  4. 建议将覆盖率阈值作为CI的一部分,确保测试覆盖率不会下降

roveralls是一个简单但强大的工具,特别适合需要测量整个项目覆盖率而不仅仅是单个包覆盖率的场景。

回到顶部