使用Coverage.py计算测试覆盖率
对于测试的质量,有一个重要的考虑指标----测试覆盖率(test coverage)。100%的测试覆盖率是理想目标,但有些时候并不是那么容易实现。对于大多数项目来说,应该尽量将测试覆盖率保持在90%左右。
Coverage.py是一个使用python编写的检查代码覆盖率的工具,我们可以使用它来检查测试覆盖率,首先使用pipenv安装它:
pipenv install coverage --dev
一. 基本用法
Coverage.py提供了命令行支持,使用起来非常简单。为了演示Coverage.py用法,使用下面一个简单的python脚本演示一下:
def func1():
print("123")
def func2():
print("456")
if __name__ == "__main__":
func1()
coverage run命令用来执行脚本并计算代码执行覆盖率,命令后要附 加脚本文件名作为执行的目标:
这会在脚本所在目录生成一个.coverage文件,其中包含了运行的结 果数据。我们使用coverage report命令来输出覆盖率报告:
通过报告我们可以看出,这个脚本代码的执行情况,一共有6行代码,1行没有执行,覆盖率为83%。 除了在命令行中输出覆盖率报告,我们还可以使用coverage html来 查看HTML版本的覆盖率报告:
coverage html
这会在脚本所在目录生成一个htmlcov文件夹,使用浏览器打开其 中的index.html文件可以看到HTML格式的覆盖率报告主页,如下:
单击对应的脚本,我们还可以查看使用颜色标出代码执行的具体覆盖情况,点击"hahaha.py"可进入如下界面:
![](/qrcode.jpg)
最后使用coverage erase可以清除 coverage report产生的.coverage文件:
二. 获取测试覆盖率
我们可以使用下面的命令在运行测试的同时开启覆盖率检查,这样 就可以获取测试覆盖率:
coverage run --source=app --branch -m unittest discover
同样,coverage report获取测试报告:
coverage report
整体覆盖率为67%,其中model.py中的代码覆盖率很不错。接下来,获取更为详细的html测试覆盖率报告:
coverage html