python代码覆盖率_Python——覆盖率

原标题:Python——覆盖率

1. 介绍

Coverage工具用于测量Python代码覆盖率。Coverage使用代码分析工具和python标准库提供的trace函数确认哪一行代码可以执行和那一行代码已经被执行,因此被测试代码不能复写trace函数。

2. 版本

Coverage.py支持如下Python版本:

• CPython 2.6, 2.7 and 3.3到3.7.

• PyPy2 5.6 和PyPy3 5.5.

• Jython 2.7.1, 可运行无报告.

• IronPython 2.7.7, 可运行无报告.

3. 安装

Coverage.py可以采用pip install coverage 指令进行安装,或在

https://pypi.python.org/pypi/coverage下载需要的安装包进行安装。

4. 指令

• run – 运行Python脚本并测试脚本代码覆盖率。

• report – 报告脚本运行的覆盖率结果。

• html –生成html格式的代码覆盖率报告文件。

• xml – 生成xml格式的代码覆盖率报告文件。

• annotate – 用覆盖结果注释源文件。

• erase – 删除之前收集的覆盖率数据。

• combine – 将多个覆盖率文件合并成一个。

• debug – 调试模式。

Coverage.py使用多种指令实现覆盖率测量任务。可以采用--help子指令来查看指令的具体用法,例如coverage run –help。

5. 运行

$ coverage run my_program.py arg1 arg2

blah blah ..your program's output.. blah blah

使用run指令指定要测试的覆盖率文件来进行覆盖率测量,arg1 arg2为 my_program.py脚本的命令行参数。

$ coverage run -m packagename.modulename arg1 arg2

blah blah ..your program's output.. blah blah

你也可以使用-m来制定要测试的覆盖率模块来进行覆盖率测量。

$ coverage run --branch my_program.py arg1 arg2

blah blah ..your program's output.. blah blah

如果你想要统计脚本的分支覆盖率,可以加入—branch参数,但要记住—branch是coverage的子命令,需要放在run命令之后,my_program.py之前,一面当成my_program.py脚本的输入参数来处理。

6. 警告

运行覆盖率统计脚本时可以出现如下警告提示:

• “Trace function changed, measurement is likely wrong: XXX (trace-changed)”

Coverage进行代码覆盖率测量以来Python内建的trace函数,如果被测量脚本里存在trace函数覆盖Python内建trace函数,测量将被中断。

• “Module XXX has no Python source (module-not-python)”

Coverage进行代码覆盖率测试时需要关联Python代码的源文件,coverage通过源代码文件来定位覆盖行与分支位置。

• “Module XXX was never imported (module-not-imported)”

要测量的模块没有被正确导入。

• “No data was collected (no-data-collected)”

要测量的模块被正确导入,但测量的模块没有被执行,因此Coverage无法收集被测量模块的数据。

• “Module XXX was previously imported, but not measured (module-not-measured)”

要测量的模块在Coverage运行之前被导入,导致Coverage不能对被测量模块进行正确的处理,需要确保被测量模块导入在Coverage运行之后。

• “–include is ignored because –source is set (include-ignored)”

Both --include and --source were specified while running code. Both are meant to focus measurement on a particular part of your source code, so --include is ignored in favor of --source.

7. 数据

Coverage测量的覆盖率数据默认存储在“.coverage”文件,可以设置COVERAGE_FILE环境变量改变默认的文件名。

$ coverage erase

Erase指令可以清空数据文件里的内容。

$ coverage combine

Combine指令可以合并多个机器不同进程的数据文件。

8. 报告

Coverage提供report, html, annotate, and xml命令用于生成报告。 --include 和 –omit子命令用于指定白名单与黑名单。当源文件找不到时可以使用--ignore-errors子命令强制生成报告。--fail-under子命令可以设置覆盖率的最低阈值,当覆盖率低于指定阈值时命令行将接收到状态码2。

9. 实例

我们新建一个sort.py文件,写入如下代码:

#coding=utf-8

__author__ = 'damao'

def bubble(data):

"""

冒泡排序程序

:param data:

:return:

"""

for i in range(len(data)-1):

for j in range(len(data)-1-i):

if data[j] > data[j+1]:

data[j], data[j+1] = data[j+1], data[j]

return data

if __name__ == '__main__':

data = [5, 3, 8, 6, 1, 4, 7, 2]

bubble(data)

我们进入sort.py文件所在目录执行coverage run sort.py运行覆盖率统计程序,会在目录生成.coverage文件。.coverage文件是文本文件我们可以使用文本编辑器进行编辑,不过要注意文件格式随着coverage工具的版本可能会改变。

我们使用coverage report指令生成覆盖率报告,想生成带分支的覆盖率报告可以使用coverage run --branch sort.py从新生成.coverage文件,再执行coverage report指令。

Name Stmts Miss Branch BrPart Cover

-------------------------------------------

sort.py 10 0 8 1 94%

我们还可以使用coverage html指令生成网页格式的覆盖率报表,默认生成在htmlcov文件夹下,使用浏览器打开sort_py.html文件可以查看覆盖率数据。

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中常用的代码覆盖率测量工具是Coverage.py。该工具通常在测试执行期间测量代码覆盖率。它使用Python标准库中提供的代码分析工具和跟踪钩子来确定哪些行是可执行的,哪些行已执行。Coverage.py可以在许多版本的Python上运行,包括CPython 2.7和CPython 3.5等版本。 通过使用Coverage.py,开发人员可以了解他们的测试用例是否覆盖了代码的各个部分,从而更好地衡量测试的质量和完整性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python代码覆盖率测量-Python开发](https://download.csdn.net/download/weixin_42135462/19057629)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [coveragepy:Python代码覆盖率测量](https://download.csdn.net/download/weixin_42115003/18199251)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python 线程的使用 python线程基础知识,提供python2示例代码,供参考学习](https://download.csdn.net/download/li171049/88228363)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值