一、go test方式(已存在xxxx.go代码文件, 实现xxxx_test.go测试文件,执行如下go test命令即可)
go test -gcflags='-N -l' -covermode=count -coverprofile=${DEPLOY}coverage.out -coverpkg ./source/... ./source/...
-gcflags='-N -l' 禁止编译器优化及内联, 这样能保证代码逻辑会被执行到
-covermode=count 表示生成的二进制中包含要统计覆盖率的计数信息
-coverprofile 要产出的覆盖率文件
-coverpkg 后面是要统计覆盖率的文件源码
代码编译结束后,会生成coverage.out文件
二、编译代码,编译出二进制文件执行(运行系统测试,需要使用插桩产物)
mian_test.go文件中设置SystemTest标识,要运行系统测试,必须在执行测试二进制文件的时候带 -SystemTest 参数
生成插桩后的二进制文件:
go test -c -o (BIN)/(BIN)/(EXENAME).test -covermode=count -coverpkg ./source/... ./source
-c 表示 生成测试二进制文件
-o 后面是输出的二进制文件名
-covermode=count 表示生成的二进制中包含要统计覆盖率的计数信息
-coverpkg 后面是要统计覆盖率的文件源码
xxxx.test即为插桩产物,该文件在每一行代码后写入一个唯一的计数器,并检查在执行该二进制文件后调用此计数器的次数
以打桩二进制文件启动服务:
nohup ./bin/$FILENAME -SystemTest -test.coverprofile ../../total_coverage.cov -log_dir=./log -v=0>./log/panic.log 2>&1 &
执行测试case:
执行完测试case之后,会生成total_coverage.cov文件
将以上单元测试生成的文件coverage.out,合并至系统测试生成的文件total_coverage.cov中,执行go tool cover -html=total_coverage.cov -o total_coverage.html