gpt4 book ai didi

pytest - py.test 给出 Coverage.py 警告 : Module sample. py 从未导入

转载 作者:行者123 更新时间:2023-12-03 23:50:35 36 4
gpt4 key购买 nike

我从这个线程运行了一个示例代码。
How to properly use coverage.py in Python?

但是,当我执行此命令时 py.test test.py --cov=sample.py它给了我一个警告,因此没有创建任何报告。

platform linux2 -- Python 2.7.12, pytest-3.2.3, py-1.4.34, pluggy-0.4.0
rootdir: /media/sf_Virtual_Drive/ASU/CSE565_testand
validation/Assignments/temp, inifile:
plugins: cov-2.5.1
collected 3 items

test.py ...Coverage.py warning: Module sample.py was never imported. (module-not-imported)
Coverage.py warning: No data was collected. (no-data-collected)

任何人都知道为什么 coverage.py不工作?

因此,如果我运行 coverage run -m py.test test.py单独地,它没有显示任何警告。

最佳答案

tl;博士
使用coverage生成统计文件.coverage然后创建一个仅适用于您的特定文件的报告。

coverage run -m pytest .\test\test_named_prng.py
coverage html --include=named_prng.py
情况
假设您的包中有一些 python 文件,并且在单个测试文件 ( test/test_named_prng.py) 中也有测试用例。您想在包中的一个特定文件 ( named_prng.py) 上测量测试文件的代码覆盖率。
\namedPrng
│ examples.py
│ named_prng.py
│ README.md
│ timeit_meas.py
│ __init__.py

└───test
test_named_prng.py
__init__.py
这里 namedPrng/__init__.py进口 examples.pynamed_prng.py ,其中另一个初始化文件为空。
An example with files is available on my GitHub.
问题
你的问题是 pytest或与 coverage您无法将报告范围限定为您的特定文件 ( named_prng.py),因为从您的包中导入的所有其他文件也包含在报告中。
根本原因
如果您有 __init__.py在要导入的模块所在的层级,然后 __init__.py __init__.py 可能会导入比必要更多的文件将被执行。有一些选项可以告诉 pytest 和 coverage 以限制您要调查的模块,但如果它们涉及您包中的其他模块,它们也会被分析。
pytest的症状
选项 --cov包的 pytest-cov , 如果您发出 pytest带有选项 --cov , 如果您要创建覆盖测试的(子)模块是从 __init__.py 导入的,则不起作用.
如果你运行 pytest (来自 namedPrng )
pytest .\test\test_named_prng.py --cov --cov-report=html
您将每 .py 收到一份报告文件,除了 timeit_meas.py ,因为它从未被导入:测试、init 和导入的 named_prng.py 也没有。 ,也不是它的初始化。
如果你运行 pytest
pytest .\test\test_named_prng.py --cov=./ --cov-report=html
然后你明确告诉 coverage (使用 pytest 调用)以包含关卡中的所有内容,因此每个 .py文件将包含在报告中。
您想告诉 Coverage 只在 named_prng.py 的源代码上创建报告。 , 但是如果你将你的模块指定为 --cov
pytest .\test\test_named_prng.py --cov=named_prng --cov-report=html
或与 --cov=named_prng.py你会得到一个警告:
Coverage.py warning: Module named_prng.py was never imported. (module-not-imported)
Coverage.py warning: No data was collected. (no-data-collected)
WARNING: Failed to generate report: No data to report.
coverage 的症状
可以单独运行coverage和report,希望可以将更详细的选项传递给coverage。
通过发行
coverage run -m pytest .\test\test_named_prng.py
coverage html
您会在 5 .py 上获得相同的报告文件。如果你试图告诉 coverage仅使用 named_prng.py经过
coverage run --source=named_prng -m pytest .\test\test_named_prng.py
或与 --source=named_prng.py , 你会收到警告
Coverage.py warning: Module named_prng.py was never imported. (module-not-imported)
Coverage.py warning: No data was collected. (no-data-collected)
并且不会创建任何报告。
解决方案
您需要使用 --include切换 coverage不幸的是,它不能传递给 pytest在 CLI 中。
使用 coverage命令行界面
您可以在代码覆盖率计算期间限制调查范围:
coverage run --include=named_prng.py -m pytest .\test\test_named_prng.py
coverage html
或在报告时。
coverage run -m pytest .\test\test_named_prng.py
coverage html --include=named_prng.py
使用 pytest + 设置文件
可以调用 pytest通过配置文件进行详细配置。您在哪里发出 pytest ,设置 .coveragerc包含内容的文件
[run]
include = named_prng.py
查看 coverage's description关于可能的选项和模式。

关于pytest - py.test 给出 Coverage.py 警告 : Module sample. py 从未导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46652192/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com