pytest没有跳过无标记的测试

时间:2013-04-05 15:27:38

标签: python pytest

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

e.g。

@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 args。 克里斯

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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