Python:代码覆盖率工具coverage
简介:覆盖率测量通常用于衡量测试的有效性。它可以显示您的代码的哪些部分正在被测试执行,哪些不是。coverage是一个测量 Python 程序代码覆盖率的工具。它监视您的程序,注意代码的哪些部分已被执行,然后分析源代码以识别可能已执行但未执行的代码。
安装:
pip install coverage
官方文档:http://coverage.readthedocs.org/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 unittest
from 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 coverage
import 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的使用介绍完毕。
微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!
Python:代码覆盖率工具coverage相关推荐
- python代码覆盖率工具——coverage
今天发现了一个好用的python代码覆盖率检查工具:coverage, 可以高亮显示代码中哪些语句未被执行,哪些执行了,方便单测. 环境: Linux x86_64 (不能连外网) 下载: 上 htt ...
- python代码覆盖率工具_Python代码覆盖率分析工具Coverage
简介 在测试中,为了度量产品质量,代码覆盖率被作为一种测试结果的评判依据,在Python代码中用来分析代码覆盖率的工具当属Coverage.代码覆盖率是由特定的测试套件覆盖被测源代码的程度来度量,Co ...
- 聊聊 Python 代码覆盖率工具 - 大咖爱爬虫
1. 代码覆盖率 单元测试代码覆盖率作为一种度量方式,可以计算单元测试用例对于被测代码的覆盖程度,即:被执行的代码数量和代码总数量的比值 统计代码覆盖率 ,经常在单元测试后再进行,可以为测试结果提供评 ...
- PYTHON代码审查工具
这两天看了python相关代码的审查.覆盖等工具,先记录下来,后边再总结其用法. 1. python的review工具 1.1 Review board Review board 是一个 基于web ...
- python代码覆盖率测试_利用coverage工具进行Python代码覆盖率测试
Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率情况. Coverage安装 1.安装命令:pip install coverage 2.查看cov ...
- python代码覆盖率测试_Python代码覆盖率分析工具----Coverage
本文来自Tynam Yang投稿 简介 在测试中,为了度量产品质量,代码覆盖率被作为一种测试结果的评判依据,在Python代码中用来分析代码覆盖率的工具当属Coverage.代码覆盖率是由特定的测试套 ...
- Python 代码覆盖率统计工具 coverage.py
Python 代码覆盖率统计工具 coverage.py coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中 ...
- Python代码覆盖率分析工具Coverage
简介 在测试中,为了度量代码质量,代码覆盖率被作为一种测试结果的评判依据,在Python代码中用来分析代码覆盖率的工具有很多,Coverage就是其中一个.代码覆盖率是由特定的测试套件覆盖被侧源代码的 ...
- 学习笔记: 代码覆盖率-code coverage
由于<Pycharm学习笔记01:PyCharm介绍>提出此名词,比较陌生. Code coverage is a metric that can help you understand ...
最新文章
- 蓝桥杯 扑克序列(全排列)
- 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
- C#操作注册表全攻略
- 在一行上添加一个简单的if-then-else语句[重复]
- c语言影碟出租程序设计总结,vc++影碟出租系统的设计与开发
- Packagist发布个人的Composer包
- python类class基础
- 优秀HTML5网站学习范例:从“饥饿游戏浏览器”谈用户体验
- swiftui_SwiftUI的混合包
- Linux 输入输出重定向 2>/dev/null和>/dev/null 2>1和2>1>/dev/nul
- android webview 长按复制,Android webview 点击或长按有蒙层 – 热爱改变生活
- oracle中的case when then else end 用法
- 太原理工大学这两年程序设计等竞赛奖牌统计
- phpcms文章点击量统计方法
- 大数据第一季--Hadoop(day1)-徐培成-专题视频课程
- javaCRC8计算的坑
- qt之QTcpSocket
- DirectX12(D3D12)基础教程(十九)—— 多实例渲染
- 快速查询每个快递单号物流详情,支持国内常用的快递公司
- SwiftUI 问答之更改 TabView 选项卡时如何运行函数
热门文章
- 前端面试题:如何画一条0.5px的线
- Android 蓝牙 Bluetooth 自动回连 取消pin码校验弹出框
- LaTeX学习---字体设置
- 拿到一份代码如何跑起来
- python使用you-get下载视频
- 2018-2-13-win10-uwp-smms图床
- [车联网安全自学篇] ATTACK安全之交互式/非交互式Shell和登录式/非登录式Shell的检测
- H5+CSS+JS Tab导航栏自动切换
- GILT市场方兴未艾
- has been injected into other beans[XXXXXXXXXX] in its raw version as part of a circular reference