如何根据命令行选项/固定装置在pytest中跳过测试

时间:2019-06-04 20:14:27

标签: pytest fixtures skip

我有一个pytest套件,其中包含测试Web服务的多个文件。这些测试可以在不同的类型上运行,将它们称为A型和B型,用户可以指定要针对哪种类型的测试运行。虽然大多数测试适用于A和B型,但有些不适用于B型。当使用--type = B标志运行pytest时,我需要能够跳过某些测试。

这是我的conftest.py文件,在其中我根据类型设置了灯具

import pytest

#Enable type argument
def pytest_addoption(parser):
    parser.addoption("--type", action="store", default="A", help = "Specify a content type, allowed values: A, B")

@pytest.fixture(scope="session", autouse=True)
def type(request):
    if request.node.get_closest_marker('skipb') and request.config.getoption('--type') == 'B': 
        pytest.skip('This test is not valid for type B so it was skipped')
        print("Is type B")
    return request.config.getoption("--type")

然后,在跳过测试功能之前,我要添加标记,如下所示:

class TestService1(object):

    @pytest.mark.skipb()
    def test_status(self, getResponse):
        assert_that(getResponse.ok, "HTTP Request OK").is_true()
        printResponse(getResponse)

class TestService2(object):

    @pytest.mark.skipb()
    def test_status(self, getResponse):
        assert_that(getResponse.ok, "HTTP Request OK").is_true()
        printResponse(getResponse)

我能够运行pytest并且没有得到任何解释器错误,但是它不会跳过我的测试。这是我用来运行测试的命令:

pytest -s --type=B

更新:我需要澄清一下,我的测试分布在多个类中。更新了我的代码示例,以使其更加清晰。

1 个答案:

答案 0 :(得分:0)

我们使用非常相似的方法来运行“扩展参数集”。为此,您可以使用以下代码:

在conftest.py中:

def pytest_addoption(parser):
    parser.addoption(
        "--extended-parameter-set",
        action="store_true",
        default=False,
        help="Run an extended set of parameters.")

def pytest_collection_modifyitems(config, items):
    extended_parameter_set = config.getoption("--extended-parameter-set")

    skip_extended_parameters = pytest.mark.skip(
        reason="This parameter combination is part of the extended parameter "
        "set.")

    for item in items:
        if (not extended_parameter_set
                and "extended_parameter_set" in item.keywords):
            item.add_marker(skip_extended_parameters)

现在,您可以使用“ extended_pa​​rameter_set”简单地标记完整测试或仅对测试的某些参数化进行标记,并且只有在使用--extended-parameter-set选项调用pytest时,它才会运行。