我想使用Coveralls跟踪项目的测试覆盖率,使用集成参考的说明 https://github.com/mattn/goveralls
cd $GOPATH/src/github.com/yourusername/yourpackage
$ goveralls your_repos_coveralls_token
但是,这仅发布一个包的结果,并且依次运行包不起作用,因为最终运行会覆盖所有其他运行。有没有人想出如何获得多个包裹的报道?
答案 0 :(得分:10)
我最终使用了这个script:
echo "mode: set" > acc.out
for Dir in $(find ./* -maxdepth 10 -type d );
do
if ls $Dir/*.go &> /dev/null;
then
go test -coverprofile=profile.out $Dir
if [ -f profile.out ]
then
cat profile.out | grep -v "mode: set" >> acc.out
fi
fi
done
goveralls -coverprofile=acc.out $COVERALLS
rm -rf ./profile.out
rm -rf ./acc.out
它基本上找到路径中的所有目录,并分别为它们打印覆盖率配置文件。然后它将文件连接成一个大的配置文件并将它们运送到工作服。
答案 1 :(得分:5)
采用Usman的答案,并改变它以支持跳过Godep和其他不相关的文件夹:
echo "mode: set" > acc.out
for Dir in $(go list ./...);
do
returnval=`go test -coverprofile=profile.out $Dir`
echo ${returnval}
if [[ ${returnval} != *FAIL* ]]
then
if [ -f profile.out ]
then
cat profile.out | grep -v "mode: set" >> acc.out
fi
else
exit 1
fi
done
if [ -n "$COVERALLS_TOKEN" ]
then
goveralls -coverprofile=acc.out -repotoken=$COVERALLS_TOKEN -service=travis-pro
fi
rm -rf ./profile.out
rm -rf ./acc.out
请注意,不是查看每个目录,而是使用go list ./...
命令,该命令列出了实际用于构建go包的所有目录。
希望能帮助他人。
**编辑**
如果您使用Go {v.1.6 +的vendor
文件夹,则此脚本会过滤掉依赖项:
echo "mode: set" > acc.out
for Dir in $(go list ./...);
do
if [[ ${Dir} != *"/vendor/"* ]]
then
returnval=`go test -coverprofile=profile.out $Dir`
echo ${returnval}
if [[ ${returnval} != *FAIL* ]]
then
if [ -f profile.out ]
then
cat profile.out | grep -v "mode: set" >> acc.out
fi
else
exit 1
fi
else
exit 1
fi
done
if [ -n "$COVERALLS_TOKEN" ]
then
goveralls -coverprofile=acc.out -repotoken=$COVERALLS_TOKEN -service=travis-pro
fi
答案 2 :(得分:2)
我一直在使用http://github.com/axw/gocov来获取代码覆盖率。
我在bash脚本中触发它,在这里我调用我的所有包。
我还使用http://github.com/matm/gocov-html格式化为html。
coverage)
echo "Testing Code Coverage"
cd "${SERVERPATH}/package1/pack"
GOPATH=${GOPATH} gocov test ./... > coverage.json
GOPATH=${GOPATH} gocov-html coverage.json > coverage_report.html
cd "${SERVERPATH}/package2/pack"
GOPATH=${GOPATH} gocov test ./... > coverage.json
GOPATH=${GOPATH} gocov-html coverage.json > coverage_report.html
;;
希望有所帮助。
答案 3 :(得分:2)
有没有人想出如何获得多个套餐的保险?
注意:使用Go 1.10(2018年第一季度),实际上......实际上是可行的 见CL 76875
cmd/go
:允许-coverprofile
正在测试多个软件包
您可以在commit 283558e
中看到多包代码覆盖率测试的实现Jeff Martin自release of Go 1.10(2018年2月)确认后in the comments:
go test -v -cover ./pkgA/... ./pkgB/... -coverprofile=cover.out
获得了良好的个人资料和go tool cover -func "cover.out"
将获得total: (statements) 52.5%
。所以它正在发挥作用!
答案 4 :(得分:1)
这是一个纯粹的GO解决方案:
我创建了一个可能有用的库,https://github.com/bluesuncorp/overalls
它所做的只是递归遍历每个目录(也就是每个包),运行go test并生成coverprofiles,然后将所有配置文件合并到项目目录根目录中的一个名为overalls.coverprofile
然后您可以使用https://github.com/mattn/goveralls之类的工具将其发送到coveralls.io
希望每个人都喜欢
答案 5 :(得分:1)
在Go 1.13中,以下命令可生成多个程序包的覆盖范围
go tool cover -html=profile.cov -o cover.html
用于html报告
mkdir -p cat1/cat2/cat3