pytest 不跳过未标记的测试

Posted

技术标签:

【中文标题】pytest 不跳过未标记的测试【英文标题】:pytest not skipping unmarked tests 【发布时间】:2013-03-28 02:16:29 【问题描述】:

我们有一个我们希望不会执行的标记测试,因为 py.test 是用另一个标记调用的,但测试正在执行。

例如

@pytest.mark.stress
def test_one(some_fixture):
     pass

@pytest.mark.myplatform
def test_two(some_fixture):
     pass

如果我使用 --collectonly -m "myplatform and (not stress)" 作为实验运行 pytest,我发现我可以解决这个问题。我假设使用夹具在某种程度上改变了评估标记的方式,但我们假设使用夹具不会影响使用标记收集测试的方式。夹具中有代码可以查看标记,但我们不会以任何方式更改 pytest 参数。 克里斯

【问题讨论】:

我无法重现此问题。 -m 选项使用您上面的代码和一个空的 some_fixture 夹具为我正确收集每个测试。我正在使用 Python 2.7.5 和 pytest-2.5.2。你有更多信息吗? @user2249625 请试试我的回答***.com/a/37583262/4988742,如果这对你有用,请告诉我。 【参考方案1】:

改用-k 标志并保持相同的过滤逻辑“myplatform 而不是压力”。

https://pytest.org/en/latest/example/markers.html#using-k-expr-to-select-tests-based-on-their-name

【讨论】:

@JoelBerkeley 我更新了答案中的链接:pytest.org/en/latest/example/…【参考方案2】:

marker based test selection/unselection 用于将测试运行限制为明确标记的测试。如果您使用--collectonly 选项,您将无法识别它(在下面的示例中始终为collected 3 items)。

考虑测试文件test_markers.py

import pytest

@pytest.mark.stress
def test_stress():
     pass

@pytest.mark.myplatform
def test_myplatform():
     pass

def test_unmarked():
     pass

如果您想执行“压力”测试,请仅使用(-v 用于详细输出)

pytest test_markers.py -v -m stress

你会得到以下输出:

collected 3 items

test_markers.py::test_stress PASSED

如果您想执行“压力”测试和未标记的测试,请使用:

pytest test_markers.py -v -m "not myplatform"

它为您提供输出:

collected 3 items

test_markers.py::test_stress PASSED
test_markers.py::test_unmarked PASSED

【讨论】:

以上是关于pytest 不跳过未标记的测试的主要内容,如果未能解决你的问题,请参考以下文章

10pytest -- skip和xfail标记

pytest学习和使用10-Pytest中的测试用例如何跳过执行?

pytest文档12-skip跳过用例

pytest文档12-skip跳过用例

pytest-16-用例a失败,跳过用例b和c并标记失败xfail

Pytest基础使用教程