golang适合gitlab的ci的覆盖率配置
golang本身的test方法非常的好用,配合gitlab的ci环境下还可以有更多的提示与嵌入功能
核心配置
直接放最终的代码:
...
test-coverage:
stage: test
script:
- go get github.com/axw/gocov/gocov
- go get github.com/jstemmer/go-junit-report
- go get github.com/boumenot/gocover-cobertura
- go test -coverprofile=coverage.txt -covermode count `go list ./... | grep -v tests` -v 2>&1 | go-junit-report > report.xml
- gocover-cobertura < coverage.txt > coverage.xml
- gocov convert coverage.txt | gocov report
artifacts:
reports:
junit: report.xml
cobertura: coverage.xml
coverage: '/Total Coverage: \d+\.\d+/'
...
说明:
其他前置的准备go环境;切换proxy,后续的编译二进制和deploy没有放出来,核心部分的tests主要分成三个逻辑:
- 统一的一次执行test
- 默认的cli输出重定向到go-junit-report里面直接分析
- 实际的输出写入coverprofile后续分析
- 将golang的输出生成转换到
coverage.xml
- 将golang的输出显示成最终的报告,同时提供最终的
Total Coverage
信息regex用
最终效果:
- merge-request页面渲染:
- code-change页面渲染:
参考链接:
https://docs.gitlab.com/ee/user/project/merge_requests/test_coverage_visualization.html
https://docs.gitlab.com/13.10/ee/ci/pipelines/job_artifacts.html#artifactsreports
https://docs.gitlab.com/ee/ci/unit_test_reports.html https://github.com/boumenot/gocover-cobertura
https://github.com/axw/gocov
https://github.com/jstemmer/go-junit-report