在标记条件中访问pytest.ini中设置的pytest选项

2024-05-13 17:42:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为webapp编写测试,有时需要一段时间才能在生产服务器上看到更改。我不希望这些测试失败,但我也不想忽视它们。因此,在对生产服务器运行时,我希望将此类测试标记为xfail,但我无法访问标记中的options对象,该对象可以在testcase内部访问。一旦这些测试通过XPASS,标记将被移除。同样,这些测试也不应该被忽略

有没有可能这样做

@pytest.mark.xfail(
    options.getini("base_url") == options.getini("production_server"), 
    reason="Change not yet deployed to the production server")
def test_apidoc(self, request, base_url):

我能看到的唯一解决办法是:

def test_apidoc(self, request, base_url):
    not_production_ready(request)
    if request.config.getoption("base_url") == request.config.getini("production_server"):
        pytest.xfail("Changes not yet deployed to the production")
    pass

但这将立即忽略测试


Tags: 对象标记服务器urlbaseserverpytestrequest
1条回答
网友
1楼 · 发布于 2024-05-13 17:42:35

您可以动态地附加标记-我将引入另一个标记,例如provisional_xfail,它只用于一个目的:如果设置与所需的设置匹配并且标记存在,那么测试将添加一个xfail标记。例如:

# conftest.py

def pytest_collection_modifyitems(config, items):
    if config.getoption('prod') == True:
        for item in items:
            if item.get_closest_marker('provisional_xfail') is not None:
                item.add_marker(pytest.mark.xfail(reason='Should fail for now with prod settings'))

测试获取provisional_xfail标记:

import pytest


@pytest.mark.provisional_xfail
def test_spam():
    assert False

相关问题 更多 >