gpt4 book ai didi

python - 当一个测试用例针对多个环境运行时,我们如何使其仅针对一个环境 xfail?

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

作为背景,我们的测试用例在同一产品的 20 多个部署中运行,在其中一些部署中,测试用例由于已知错误而失败,而在其他部署中,它们通过了测试。

任何人都可以帮忙提出一个建议,以便最好地“xfail”一个特定环境的测试用例吗?

我们已经可以通过 env fixture 或什至是函数调用来访问特定测试运行所针对的环境。我们只需要一种干净且合乎逻辑的方法来进行 xfail 测试。我们想做这样的事情:

我们想要什么(或类似的东西,带装饰器):

@pytest.mark.xfail(envs=["my_env_1", "my_env_18"], reason="Bug/JIRA-TICKET")
def test_my_test_case(...fixtures...):
# some code

我们目前的解决方案:这感觉很hacky?

def test_my_test_case(env, ...fixtures...):
if env in ["my_env_1", "my_env_18"]:
pytest.xfail(reason="Bug/Ticket-Number")

欢迎提出任何建议。谢谢!

最佳答案

您可以为此引入您自己的标记。示例:

测试用例

import pytest


@pytest.mark.myxfail(envs=["my_env_1", "my_env_18"], reason="Bug/JIRA-TICKET")
def test_eggs():
pass

分析myxfail标记

将文件 conftest.py 添加到您的项目/测试根目录,内容如下:

import pytest


@pytest.fixture(autouse=True)
def check_myxfail(request):
myxfail = request.node.get_closest_marker("myxfail")
if myxfail is None:
return

envs = myxfail.kwargs.get("envs", [])
if "my_env_1" in envs:
reason = myxfail.kwargs.get("reason", None)
pytest.xfail(reason=reason)

注册myxfail标记

pytest.ini 配置中:

[pytest]
markers =
myxfail: xfail the test if env matches.

示例执行

$ pytest -vrx
==================================== test session starts =====================================
...
collected 1 item

test_spam.py::test_eggs XFAIL [100%]

================================== short test summary info ===================================
XFAIL test_spam.py::test_eggs
reason: Bug/JIRA-TICKET
===================================== 1 xfailed in 0.04s =====================================

当然,您仍然必须自己实现env 处理。将 if "my_env_1"in envs 条件替换为您自己的 impl(通过 fixture/命令行 arg 等传递 env)。

关于python - 当一个测试用例针对多个环境运行时,我们如何使其仅针对一个环境 xfail?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61243995/

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