我有一个带有标记 @pytest.mark.win_11 和 @pytest.mark.parametrize('os,result',[('win_11','result1'),('win_8','result2')] 的 pytest 函数)
当我以“pytest -m win_11”运行测试时,它正在运行两组参数的测试。我只想在操作系统版本为 win_11 时运行测试。
那么,我们可以将标记和参数化选项结合起来进行单次测试吗? 当测试作为“pytest -m win_11”运行时,有没有办法跳过 os = win_8 的测试?
代码如下:
import pytest
@pytest.mark.win_11
@pytest.mark.parametrize('os_version,result',[('win_11','result1'),('win_8','result2')])
def test_set1_1(os_version, expected_result):
# some code
一种选择是在整个过程中动态分配标记
@pytest.mark.parametrize
def parametrize():
for version, result in [('win_11', 'result1'), ('win_8', 'result2')]:
marks = []
if version == 'win_11':
marks.append(Mark('win_11', (), {}))
else:
marks.append(Mark('win_8', (), {}))
yield pytest.param(version, result, marks=marks)
@pytest.mark.parametrize('os_version, result', parametrize())
def test_set1_1(os_version, result):
print(os_version, result)
不带标记
pytest
============================= test session starts =============================
collecting ... collected 2 items
example.py::test_set1_1[win_11-result1] PASSED [ 50%]
win_11 result1
example.py::test_set1_1[win_8-result2] PASSED [100%]
win_8 result2
与
pytest -m win_11
============================= test session starts =============================
collecting ... collected 2 items / 1 deselected / 1 selected
example.py::test_set1_1[win_11-result1] PASSED [100%]
win_11 result1