【需求】代码覆盖率是什么?为什么要统计代码覆盖率?
1 覆盖率即统计在时间段内哪些代码被执行和调用了,如有100行代码覆盖率统计就是从开始统计时间到结束时间执行了多少的代码的比例。
2 为什么要用,补充测试case。接到一个测试需求,按业务等设计了测试case,但心里没有底case是不是能覆盖所有场景?加上代码覆盖完善之前的case。
【工具】coverage 统计python代码覆盖率
pip install coverage -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com #加上国内下载源确保下载成功
C:\Users\Desktop>coverage --help #确认安装成功
Coverage.py, version 3.6
Measure, collect, and report on code coverage in Python programs.
usage: coverage <command> [options] [args]
Commands:
annotate Annotate source files with execution information.
。。。
【使用工具案例】
首先找一个待统计的测试文件,如test.py (可以看出只有else之后的语句不执行)
import json
test = 'aaaaa'
def writejson():
testdata = {
"uris": ["files/6f49779435a62fe8211da0e9f515fe0d73b22fe4/logs/owl/storage"]
}
testdata = json.dumps(testdata)
print(testdata)
if test:
print('22222222222222')
else:
print('33333333333333333')
writejson()
开始覆盖率统计执行
C:\Users\Desktop>coverage run test.py #开始统计执行,执行完会自动生成个.coverage的文件
C:\Users\chenyandong\Desktop>coverage report -m #命令行统计概要,执行率90%
Name Stmts Miss Cover Missing
-------------------------------------
test 10 1 90% 15
C:\Users\chenyandong\Desktop>coverage html
C:\Users\chenyandong\Desktop>coverage html -d reportcoveragehtml #生成reportcoveragehtml的文件夹,包含html的结果报告,看起来更直观(如下图)
统计结果文件,红色底色的行表示没有执行。
含有几个参数,用法差不多自己玩下就会了。如:coverage annotate test.py 会生成一个test.py,cover文件,内容如下图(!表示没有执行的代码行)
> import json
> test = 'aaaaa'
> def writejson():
> testdata = {
> "uris": ["files/6f49779435a62fe8211da0e9f515fe0d73b22fe4/logs/owl/storage"]
> }
> testdata = json.dumps(testdata)
> print(testdata)
> if test:
> print('22222222222222')
! else:
! print('33333333333333333')
> writejson()