我有一个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
更新:我需要澄清一下,我的测试分布在多个类中。更新了我的代码示例,以使其更加清晰。
答案 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_parameter_set”简单地标记完整测试或仅对测试的某些参数化进行标记,并且只有在使用--extended-parameter-set
选项调用pytest时,它才会运行。