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 = x
        self.y = y

    def plus(self):
        return self.x + self.y

    def subtract(self):
        return self.x - self.y

    def multiply(self):
        return self.x * self.y

    def divide(self):
        return self.x / self.y

单元测试源码:test_demo.py

import unittest
from demo import CalcDemo


class 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的使用介绍完毕。

微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!

在这里插入图片描述

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值