go 程序代码覆盖率采集

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值