go 覆盖率采集
curl -O https://bootstrap.pypa.io/pip/2.7/get-pip.py
python get-pip.py --user
cd ~/.local/bin
./pip install diff-cover==3.0.1
go get -u github.com/AlekSi/gocov-xml@latest
go get -u github.com/axw/gocov/gocov@latest
go get -u github.com/wadey/gocovmerge@latest
MakeFile
1.0
coverage-test: .IGNORE
@go tool cover -html=coverage.out -o coverage.html
@go tool cover -func=coverage.out -o coverage.txt
@gocov convert coverage.out | gocov-xml > coverage.xml
@echo "单元测试覆盖率为:\033[31m `tail -n 1 coverage.txt | awk '{print $$3}'` \033[0m"
@diff-cover coverage.xml --compare-branch=HEAD^ --html-report report.html
.IGNORE:
go test -mod=mod -v -gcflags=all='-N -l' -p=4 -covermode=count -coverprofile=coverage.out -run="^Test" -coverpkg=$(go list ./... | grep -Ewv '') ./...
2.0
#!/bin/bash
diff_commit=$1
if [ ! -n "$diff_commit" ]; then
diff_commit="HEAD^"
fi
GOTESTENV=on go test -mod=mod -v -gcflags=all='-N -l' -p=4 -timeout 600s -covermode=count -coverprofile=coverage.out -run="^Test" ./...
go tool cover -html=coverage.out -o coverage.html
go tool cover -func=coverage.out -o coverage.txt
gocov convert coverage.out | gocov-xml > coverage.xml
coverage_data=`tail -n 1 coverage.txt | awk '{print $3}'`
echo "单元测试覆盖率为:$coverage_data "
diff-cover coverage.xml --compare-branch=$diff_commit --html-report report.html --fail-under=80 > result.txt
cat result.txt
up_coverage=`grep "Coverage:" result.txt | awk -F: '{print $2}'`
if [ ! -n "$up_coverage" ]; then
up_coverage="%0"
fi
echo "新增测试覆盖率为:$up_coverage "
2.0
#!/bin/sh
origin_branch=$1 # 构建计划变量 GIT_BRANCH
diff_branch=$2 # 构建计划变量 DIFF_BRANCH
artifact_version=$3 # 构建计划变量 ARTIFACT_VERSION
creator=$4 # 构建计划变量 CREATOR
if [ ! -n "$diff_branch" ]; then
# 默认master分支比较
diff_branch="origin/master"
fi
if [[ ! "$diff_branch" = origin/* ]]; then
diff_branch="origin/${diff_branch}"
fi
origin_commit=$(git rev-parse $origin_branch) # GIT_COMMIT
diff_commit=$(git rev-parse $diff_branch) # DIFFCOMMIT
total_line=$(git diff $origin_commit --numstat `git hash-object -t tree /dev/null` | awk 'BEGIN{ total_line = 0 } { total_line += $1 + $2 } END { printf total_line }')
add_line=$(git diff $origin_commit $diff_commit --pretty=tformat: --numstat | awk 'BEGIN{ add_line = 0 } { add_line += $2 } END { printf add_line }')
##单元测试准备
COVERAGE_DIR=/tmp/$PWD/coverage-unit
rm -rf $COVERAGE_DIR
mkdir -p $COVERAGE_DIR
suffix=unit-test
##触发单元测试
for package in $(go list ./... | grep -v $(go list -m)/test); do
coverfile="$(echo $package | tr / -).$suffix"
GOARCH=amd64 GOTESTENV=on go test -c $package -gcflags=all='-N -l' -p=4 -timeout 600s -o $COVERAGE_DIR/$coverfile -cover -covermode=count -coverpkg=./...
if [ -f "$COVERAGE_DIR/$coverfile" ] ; then
GOTESTENV=on $COVERAGE_DIR/$coverfile -test.coverprofile $COVERAGE_DIR/$coverfile.coverage.out -test.v -test.run="^Test"
fi
done
gocovmerge $COVERAGE_DIR/*.coverage.out > $COVERAGE_DIR/coverage.out
go tool cover -html=$COVERAGE_DIR/coverage.out -o $COVERAGE_DIR/coverage_code.html ## coverage_code.html 具体覆盖代码
go tool cover -func=$COVERAGE_DIR/coverage.out -o $COVERAGE_DIR/coverage_func.txt ## coverage_func.txt 方法覆盖率
gocov convert $COVERAGE_DIR/coverage.out | gocov-xml > $COVERAGE_DIR/coverage_stat.xml ##coverage_stat.xml代码行覆盖率
diff-cover $COVERAGE_DIR/coverage_stat.xml --compare-branch=$diff_branch --html-report $COVERAGE_DIR/diff_report.html --fail-under=80 > $COVERAGE_DIR/diff_stat.txt ##新增覆盖代码统计信息及详情
echo '\n增量覆盖率数据:'
cat $COVERAGE_DIR/diff_stat.txt
echo
##上传单元测试数据
curl -L -Ss --request POST "http://***/api/v1/unitCover/create" \
--header "Cookie: base_token=t5ndh8dn03mc0xp6zspm5hxm72jkbhtn" \
--form "upload[]=@"$COVERAGE_DIR/coverage.out"" \
--form "upload[]=@"$COVERAGE_DIR/coverage_code.html"" \
--form "upload[]=@"$COVERAGE_DIR/coverage_func.txt"" \
--form "upload[]=@"$COVERAGE_DIR/coverage_stat.xml"" \
--form "upload[]=@"$COVERAGE_DIR/diff_report.html"" \
--form "upload[]=@"$COVERAGE_DIR/diff_stat.txt"" \
--form "originbranch=$origin_branch" \
--form "diffbranch=$diff_branch" \
--form "originCommitSha=$origin_commit" \
--form "diffCommitSha=$diff_commit" \
--form "artifactVersion=$artifact_version" \
--form "creator=$creator" \
--form "totalLine=$total_line" \
--form "addLine=$add_line"
##清理单元测试文件
rm -rf $COVERAGE_DIR
3.0
#!/bin/sh
origin_branch=$1 # 构建计划变量 GIT_BRANCH
diff_branch=$2 # 构建计划变量 DIFF_BRANCH
artifact_version=$3 # 构建计划变量 ARTIFACT_VERSION
creator=$4 # 构建计划变量 CREATOR
if [ ! -n "$diff_branch" ]; then
# 默认master分支比较
diff_branch="origin/master"
fi
if [[ ! "$diff_branch" = origin/* ]]; then
diff_branch="origin/${diff_branch}"
fi
origin_commit=$(git rev-parse $origin_branch) # GIT_COMMIT
diff_commit=$(git rev-parse $diff_branch) # DIFFCOMMIT
total_line=$(git diff $origin_commit --numstat `git hash-object -t tree /dev/null` | awk 'BEGIN{ total_line = 0 } { total_line += $1 + $2 } END { printf total_line }')
add_line=$(git diff $origin_commit $diff_commit --pretty=tformat: --numstat | awk 'BEGIN{ add_line = 0 } { add_line += $2 } END { printf add_line }')
##单元测试准备
COVERAGE_DIR=./.coverage-unit
rm -rf $COVERAGE_DIR
mkdir -p $COVERAGE_DIR
##触发单元测试
GOTESTENV=on go test -mod=mod -v -gcflags=all='-N -l' -p=4 -timeout 600s -covermode=count -coverprofile=$COVERAGE_DIR/coverage.out -run="^Test" $(go list ./... | grep -v $(go list -m)/test)
go tool cover -html=$COVERAGE_DIR/coverage.out -o $COVERAGE_DIR/coverage_code.html ## coverage_code.html 具体覆盖代码
go tool cover -func=$COVERAGE_DIR/coverage.out -o $COVERAGE_DIR/coverage_func.txt ## coverage_func.txt 方法覆盖率
gocov convert $COVERAGE_DIR/coverage.out | gocov-xml > $COVERAGE_DIR/coverage_stat.xml ##coverage_stat.xml代码行覆盖率
diff-cover $COVERAGE_DIR/coverage_stat.xml --compare-branch=$diff_branch --html-report $COVERAGE_DIR/diff_report.html --fail-under=80 > $COVERAGE_DIR/diff_stat.txt ##新增覆盖代码统计信息及详情
echo '\n增量覆盖率数据:'
cat $COVERAGE_DIR/diff_stat.txt
echo
##上传单元测试数据
curl -L -Ss --request POST "http://***/api/v1/unitCover/create" \
--header "Cookie: base_token=t5ndh8dn03mc0xp6zspm5hxm72jkbhtn" \
--form "upload[]=@"$COVERAGE_DIR/coverage.out"" \
--form "upload[]=@"$COVERAGE_DIR/coverage_code.html"" \
--form "upload[]=@"$COVERAGE_DIR/coverage_func.txt"" \
--form "upload[]=@"$COVERAGE_DIR/coverage_stat.xml"" \
--form "upload[]=@"$COVERAGE_DIR/diff_report.html"" \
--form "upload[]=@"$COVERAGE_DIR/diff_stat.txt"" \
--form "originbranch=$origin_branch" \
--form "diffbranch=$diff_branch" \
--form "originCommitSha=$origin_commit" \
--form "diffCommitSha=$diff_commit" \
--form "artifactVersion=$artifact_version" \
--form "creator=$creator" \
--form "totalLine=$total_line" \
--form "addLine=$add_line"
##清理单元测试文件
rm -rf $COVERAGE_DIR