微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于外部库代码覆盖率的 pytest-cov 选项

如何解决用于外部库代码覆盖率的 pytest-cov 选项

目前我正在尝试为 python 项目实现一个自动化测试工具。是否可以使用 pytest-cov 模块从外部库收集代码覆盖率?据我所知,只有 coverage 模块会报告来自外部库的代码覆盖率!

示例:

import random


def test_rand():
  assert random.randint(0,10) == 5

使用命令 coverage run -m --pylib pytest file.py::test_rand 我们可以从外部库(例如我们的例子中的 random 模块)获取代码覆盖率。

是否可以使用 pytest-cov 来做同样的事情?

解决方法

默认情况下,pytest-cov 将报告所有库的覆盖率,包括外部库。

如果您对代码运行 pytest --cov,它将生成许多行覆盖范围,包括 pypytestimportlib 等。

要限制覆盖范围,即您只想随机检查覆盖范围,只需将模块名称传递给 cov 选项,例如pytest --cov=random。覆盖率报告然后只考虑命名的模块。您还可以通过指定多个 cov 值来传递多个模块,例如pytest --cov=random --cov=pytest

这是一个运行测试以生成仅针对 random

的覆盖率的示例
$ pytest --cov=random
====== test session starts ======
platform linux -- Python 3.6.12,pytest-6.2.4,py-1.10.0,pluggy-0.13.1
plugins: cov-2.12.1
collected 1 item

test_something.py F
[100%]

=========== FAILURES ============
___________ test_rand ___________

    def test_rand():
      import random
    
>     assert random.randint(0,10) == 5
E     AssertionError: assert 0 == 5
E      +  where 0 = <bound method Random.randint of <random.Random object at ...>>(0,10)

test_something.py:6: AssertionError

---------- coverage: platform linux,python 3.6.12-final-0 -----------
Name             Stmts   Miss  Cover
/.../random.py     350    334     --
TOTAL              350    334     5%

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。