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
    默认: 无限制

注意事项

  1. goveralls和codecover目前计算覆盖率的方式与go tool cover不同
  2. 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

1 回复

更多关于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"

常见问题解决

  1. 内存不足:增加-concurrency值或减少并发数
  2. 测试超时:增加-timeout
  3. 覆盖率数据不准确:确保使用-covermode=atomic进行并发测试

overalls是分析Golang多包项目覆盖率的强大工具,特别适合大型项目或微服务架构中的覆盖率统计。通过合理配置,可以有效地监控项目的测试质量。

回到顶部