此为系列博客

本来是在赶作业的,但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. 参考资料

简书:https://www.jianshu.com/p/307bcf8a6ac8

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐