Python测试 Coverage代码覆盖率
本来是在赶作业的,但coverage真的太好用了太好用了太好用了太好用了,必须得给他写一篇教程!目录1. 安装coverage2. 编写自己的工程文件工具类测试代码3. coverage生成报告生成可视化报告生成多个文件的报告4. 参考资料1. 安装coveragepip install coverage2. 编写自己的工程文件这里我编写了一个简单的工程文件为例,实际中可以直接用在你自...
此为系列博客
本来是在赶作业的,但coverage真的太好用了太好用了太好用了太好用了,必须得给他写一篇教程!
1. 安装coverage
pip install coverage
2. 编写自己的工程文件
这里我编写了一个简单的工程文件为例,实际中可以直接用在你自己的工程中。
工具类
首先在工程中新建utils文件夹,在该文件夹下写ManyFunctions.py
文件,实现了加分和除法两个功能,内容如下
'''
Summary:
加法函数
'''
def add(a,b):
return a+b
'''
Summary:
除法函数
'''
def add(a,b):
if b == 0:
return float('inf')
else:
return a/b
测试代码
然后再在工程中直接新建test.py文件,调用上述代码,内容如下:
from utils.ManyFunctions import *
if __name__ == '__main__':
print(add(1,1))
print(div(1,2))
该代码会执行add函数的全部内容,以及div函数的部分内容,除以0的代码并不能被执行到,接下来就用coverage来进行分析。
3. coverage生成报告
现在整个工程的文件目录如下:
在test.py所在的路径下,运行
coverage run test.py
如果用的是pycharm可以直接在终端里运行,如下图所示:
可以看到左边的文件目录中生成了.coverage
文件,这就是测试报告了,接下来运行coverage report
来查看覆盖情况
可以看到最后一列就是覆盖情况了,ManyFunctions.py
的覆盖率只有83%,可以运行coverage report -m
来查看详细情况:
多了一列Missing,表示的是在ManyFunctions.py文件中,第14行的语句没有被执行到,这也正是div函数中return float('inf')
所在的那一行。
生成可视化报告
接下来执行
coverage html
,可以将上述报告生成为html,如下图:
可以看到目录下又多了一个htmlcov文件夹,里面保存的就是html格式的报告了。生成html的命令也可以使用
coverage html 文件名
来生成指定文件名的报告,而不是默认的htmlcov文件夹。
打开htmlcov文件夹,点击index.html,就可以看到报告了:
点击utils\ManyFunction.py,可以看到红色标注出来的内容就是没有被执行到的部分。
生成多个文件的报告
上述方法只能生成一个文件的报告,如果再用coverage run 另一个文件
的话,新生成的.coverage就会覆盖掉之前的,因此就有了下面的方法:
coverage run -p test.py
coverage run -p test2.py
分别对两个test文件生成报告,最后再合并。
首先编写test2.py文件,把除以0的情况包含进来。
from utils.ManyFunctions import *
if __name__ == '__main__':
print(div(1,0))
然后依次执行上述的指令,看到多了两个coverage文件
执行下列语句,合并多个测试用例覆盖率报告
coverage combine
两个很长的文件就会合并成一个.coverage了:
再执行coverage html
,可以看到覆盖率终于达到了100%。
4. 参考资料
更多推荐
所有评论(0)