gpt4 book ai didi

pytest - 如何根据命令行选项/fixture 跳过 pytest 中的测试

转载 作者:行者123 更新时间:2023-12-04 16:46:12 29 4
gpt4 key购买 nike

我有一个 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

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

最佳答案

我们使用非常相似的东西来运行“扩展参数集”。为此,您可以使用以下代码:
在 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 时才会运行它。选项

关于pytest - 如何根据命令行选项/fixture 跳过 pytest 中的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56450741/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com