如何在 pytest 中的参数化测试函数中跳过特定测试

问题描述 投票:0回答:1

我有一个带有标记 @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 skip parameterized-tests pytest-markers
1个回答
0
投票

一种选择是在整个过程中动态分配标记

@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
© www.soinside.com 2019 - 2024. All rights reserved.