问题标签 [pytest-cov]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5342 浏览

python - GitLab CI 的单元测试覆盖率

我正在尝试为其中一个 Python 项目设置单元测试覆盖率工具。我设法编写了 GitLab CI YML 文件的脚本,但在触发时会出错。这是我得到的错误:

在 中test_run.py,我有以下导入:

这是我的 GitLab CI YML 文件:

__init__.py在 src 文件夹中有需要的东西。src 文件夹有一个名为 data 的子文件夹,我在单元测试中将其导入为:

有什么我想念的吗?

0 投票
2 回答
2674 浏览

python - pytest-cov 如何报告由于 pexpect.spawn 而执行的 python 代码的覆盖率?

我有一个 Python 项目,它使用 pytest-cov 进行单元测试和代码覆盖率测量。

我的项目的目录结构是:

我使用 Travis 运行pytest --cov=rift tests每次签入,并使用 codecov 查看代码覆盖率结果。

被测包提供了一个命令行界面(CLI),它从标准输入读取命令并在标准输出上产生输出。它以python rift.

测试目录包含两种类型的测试。

第一类测试是测试单个类的传统单元测试。例如,测试 test_table.py 导入 table.py,并执行传统的 pytest 测试(使用 assert 等)。代码覆盖率测量对这些测试按预期工作:codecov 准确报告 rift 包中的哪些行被或未被覆盖测试。

第二种测试使用 pexpect:它用于pexpect.spawn("python rift")启动 rift 包。然后它pexpect.sendline用于将命令注入 CLI (stdin) 并用于pexpect.expect检查 CLI (stdout) 上命令的输出。测试功能运行良好,但 codecov 没有报告这些测试的代码覆盖率。

问题:如何获得代码覆盖率测量结果以报告生成的裂痕包中的覆盖线,以使用 pexpect 进行第二类测试?

注意:我省略了几个我认为不相关的细节,完整的源代码在https://github.com/brunorijsman/rift-python(更新:这个 repo 现在包含答案中建议的工作解决方案)

0 投票
1 回答
746 浏览

python - 使覆盖仅计算成功的测试并忽略 xfailing 测试

我有许多项目,我使用pytest.mark.xfail标记来标记失败但不应该失败的测试,以便可以在问题解决之前添加失败的测试用例。我不想跳过这些测试,因为如果我做的某件事导致它们开始通过,我想知道这一点,以便我可以删除xfail标记以避免回归。

问题是,因为xfail测试实际上一直运行到失败,所以导致失败的任何行都被计为“已覆盖”,即使它们是 no pass test 的一部分,这给了我关于我的代码实际上有多少的误导性指标测试为工作。一个最小的例子是:

包.py

test_pkg.py

运行python -m pytest --cov=pkg,我得到:

如您所见,所有五行都被覆盖,但第 3 行和第 4 行仅在xfail测试期间被命中。

我现在处理这个问题的方法是设置tox运行类似的东西pytest -m "not xfail" --cov && pytest -m xfail,但是除了有点麻烦之外,那只是过滤掉带有xfail标记的东西,这意味着条件xfails 也会被过滤掉,无论是否条件满足。

有没有办法计算coveragepytest不计算失败测试的覆盖率?或者,我可以使用一种忽略测试覆盖率的机制,如果满足条件xfail,它只会忽略条件测试。xfail

0 投票
1 回答
3074 浏览

python - codecov 无法使用 pytest 收集数据 - “Coverage.py 警告:未收集数据。”

我正在尝试在我的公共 travis 存储库上设置 codecov,但到目前为止还无法成功生成报告并将其上传到 codecov.io。我似乎在终端中收到了一个错误的报告,上面说我的代码的 0% 被覆盖并发出警告。

据我所知,我的 .travis.yml 和 shell 脚本完全符合 pytest-cov 和 codecov 文档中指定的约定。

我的 travis 终端包含完整的日志在这里:https ://www.travis-ci.com/jmaggio14/imagepypelines/jobs/163802897#L681

我的仓库可以在这里找到:https ://github.com/jmaggio14/imagepypelines/tree/89a6bbc2fadc94a51570d80be356941df1a87a87

我的(缩短的) .travis.yml 文件如下:

我最终收到以下警告和一条消息,说我的代码的 0% 已被我的测试覆盖

0 投票
2 回答
872 浏览

unit-testing - 具有线路覆盖率和最小限制的 Pytest 覆盖率,如业力/伊斯坦布尔

  1. 在 Karma 的 Instanbul 覆盖模块中,您可以为不同类型的覆盖设置阈值。如果某些覆盖率未达到其最小值,则 instanbul 会引发错误。这在使用 jenkins 构建项目时非常有用,您必须保持这样的限制。是否可以使用 pytest-cov 或任何其他模块获得类似的功能?

https://ibb.co/y4J3JrG

  1. pytest-cov 仅生成语句覆盖率。是否也可以获得行/代码覆盖率?
0 投票
3 回答
9287 浏览

python - 在pytest中导入文件不匹配

我在包中有一个名称为“test”的文件,当我运行 pytest 时出现错误

如果我从文件中删除“测试”,它可以正常工作,但不幸的是我无法更改它。

所以问题是如何告诉 pytest 忽略这个文件?

0 投票
2 回答
417 浏览

pycharm - 如何让 PyC​​harm 了解某些文件/目录被排除在覆盖范围之外?

我如何让 PyC​​harm 了解某些文件/目录被排除在覆盖范围之外,因为现在它向我显示 venv 和测试等目录的“0% 文件,未覆盖”。

Alt+Shift+F6,我选择仅报告来自 src/ 目录的文件的 .coverage 文件,但 PyCharm 也向我显示其他文件和目录的覆盖率。我该如何解决?

0 投票
1 回答
1585 浏览

python - .coveragerc 无法找到我想省略的文件

我正在使用和插件tox自动运行我的测试。但是,我正在获取我在以下文件中省略的文件的覆盖率报告:pytestpytest-cov.coveragerc

似乎tox不使用我的.coveragerc. 我试图用 明确指定配置文件--cov-config={toxinidir}/.coveragerc,但我再次得到相同的结果。

简化的项目结构:

这是我的tox.ini

这是我的.coveragerc

这是我的pytest.ini

我认为这已经足够了,但如果您需要更多输出/信息,请告诉我。

我该如何克服这个问题?

0 投票
2 回答
2026 浏览

python - pytest结果是什么意思?

我正在学习用Python进行测试,现在我正在使用pytest-cov

我尝试运行这个命令:

测试完成后,我得到了这样的报告:

有几件事让我仍然对我在文档中找不到的报告感到困惑:什么是 StmtsMissCoverMissing,如果Cover上的结果不是 100% 这意味着我的代码仍然很糟糕还是什么..?

0 投票
0 回答
59 浏览

python - python pytest-coverage:测试在测试中实际调用了模块定义

我对我拥有的一些 ctypes 代码有疑问,其中 pytest-coverage 过度夸大了我的“真实”测试覆盖率。

这是模块的样子(使用虚拟示例):

问题是,当我运行时pyest_coverage,我的代码覆盖率显示为 100%,即使在我的单元测试中从未调用过python 。 add另有说明,如果我不这样做

我希望我的报道反映这一点,这意味着我想反映add“没有真正经过测试”。

选项

我的模块承受不起任何性能损失。我想到的一件事是这样做:

或者

但我担心这两种重组,为了测试,会影响代码的性能

有什么想法可以欺骗 pytest 或 pytest-coverage 不计add为已覆盖,除非某些测试函数实际调用add