2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Python:代码覆盖率工具coverage

Python:代码覆盖率工具coverage

时间:2020-04-26 19:09:15

相关推荐

Python:代码覆盖率工具coverage

简介:覆盖率测量通常用于衡量测试的有效性。它可以显示您的代码的哪些部分正在被测试执行,哪些不是。coverage是一个测量 Python 程序代码覆盖率的工具。它监视您的程序,注意代码的哪些部分已被执行,然后分析源代码以识别可能已执行但未执行的代码。

安装:

pip install coverage

官方文档:/en/latest/

官方提供2种统计结果方式:

1、Coverage 命令行2、Coverage API

快速使用:单元测试运行命令以“python”开头,只需将初始“python”替换为“coverage run”即可。

unittest范例:被测代码demo.py

class CalcDemo:def __init__(self, x, y):self.x = xself.y = ydef plus(self):return self.x + self.ydef subtract(self):return self.x - self.ydef multiply(self):return self.x * self.ydef divide(self):return self.x / self.y

单元测试源码:test_demo.py

import unittestfrom demo import CalcDemoclass TestDemo(unittest.TestCase):def test_plus(self):self.assertEquals(CalcDemo(6, 4).plus(), 10)def test_subtract(self):self.assertEquals(CalcDemo(6, 4).subtract(), 2)if __name__ == '__main__':unittest.main(verbosity=2)

运行单元测试:python test_demo.py

运行代码覆盖率工具coverage:coverage run test_demo.py

生成简易版覆盖结果:coverage report

生成覆盖率统计详细结果报告:coverage html -d my_coverage_result

其中my_coverage_result 是自定义生成的报告的目录名称。

打开目录内index.html,点击被测的目标demo.py

参数说明:

statements:代码总行数,不包含空行和注释行missing:未执行的代码行数coverage:代码覆盖率

将会清晰的看到单元测试代码覆盖的情况。

其中:总行数为12行,已测试行数10行,所以覆盖率为:

10 / 12 = 0.83 即:代码覆盖率为83%

点击界面红色 2 missing 还能看到专门标出了未测的代码地方。

coverage.py 的API 位于一个名为coverage. 大多数接口都在coverage.Coverage类中。Coverage 对象上的方法大致对应于命令行界面中可用的操作

范例:

import coverageimport unittest# 实例化一个对象cov = coverage.coverage()cov.start()# 测试套件suite = unittest.defaultTestLoader.discover("./", "test_demo.py")unittest.TextTestRunner().run(suite)# 结束分析cov.stop()# 结果保存cov.save()# 命令行模式展示结果cov.report()# 生成HTML覆盖率报告cov.html_report(directory='result_html')

执行结果:

同样会生成result_html的自定义目录报告,打开index.html,均可点击对应文件查看代码覆盖的情况。

查看demo.py的覆盖情况:

pytest范例:被测代码demo.py

建议安装插件:pytest-cov

安装pytest-cov:

pip install pytest-cov

用法1:pytest --cov

用法2:pytest --cov=src src即目标内全部文件的代码

例如src目录下有3个文件:a.py、b.py、c.py

执行结果:

生成报告:pytest --cov=src --cov-report=html

查看报告:

自此,代码覆盖率工具coverage命令行模式,API模式,以及在unittest和pytest的使用介绍完毕。

微信公众号:玩转测试开发

欢迎关注,共同进步,谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。