PyTest:如何从函数中获取参数化参数列表
PyTest: How to get list of parametrized arguments from within the function
给定一个包含固定装置和参数化参数的测试函数,如何获得参数化参数及其值的字典?我可以使用 request.node.name
或 os.environ.get('PYTEST_CURRENT_TEST')
访问序列化的值列表,但这并没有给出相应的参数名称。 PyTest 打印它们,但我需要在自定义错误处理挂钩中访问它们。
@pytest.mark.parametrize('a', [False, True])
@pytest.mark.parametrize('b', [1, 2])
def test_foo(request, fixt_y, fixt_z, a, b): # fixt_y/z are some fixtures
print(request.node.name) # e.g., test_foo[0-1-False]
print(os.environ.get('PYTEST_CURRENT_TEST')) # e.g., test_file.py::test_foo[0-1-False] (call)
我想要的是以某种方式让 {'a': False, 'b': 1}
进入 test_foo
。
我不确定是否有更简单的方法,但这行得通
@pytest.mark.parametrize('a', [False, True])
@pytest.mark.parametrize('b', [1, 2])
def test_foo(request, fixt_y, fixt_z, a, b): # fixt_y/z are some fixtures
mark_param_names = [
mark.args[0]
for mark in reversed(request.node.keywords["pytestmark"])
]
# the params dict below contains the params names and their values
params = {p: request.getfixturevalue(p) for p in mark_param_names}
print(request.node.name) # e.g., test_foo[0-1-False]
print(os.environ.get('PYTEST_CURRENT_TEST')) # e.g., test_file.py::test_foo[0-1-False] (call)
给定一个包含固定装置和参数化参数的测试函数,如何获得参数化参数及其值的字典?我可以使用 request.node.name
或 os.environ.get('PYTEST_CURRENT_TEST')
访问序列化的值列表,但这并没有给出相应的参数名称。 PyTest 打印它们,但我需要在自定义错误处理挂钩中访问它们。
@pytest.mark.parametrize('a', [False, True])
@pytest.mark.parametrize('b', [1, 2])
def test_foo(request, fixt_y, fixt_z, a, b): # fixt_y/z are some fixtures
print(request.node.name) # e.g., test_foo[0-1-False]
print(os.environ.get('PYTEST_CURRENT_TEST')) # e.g., test_file.py::test_foo[0-1-False] (call)
我想要的是以某种方式让 {'a': False, 'b': 1}
进入 test_foo
。
我不确定是否有更简单的方法,但这行得通
@pytest.mark.parametrize('a', [False, True])
@pytest.mark.parametrize('b', [1, 2])
def test_foo(request, fixt_y, fixt_z, a, b): # fixt_y/z are some fixtures
mark_param_names = [
mark.args[0]
for mark in reversed(request.node.keywords["pytestmark"])
]
# the params dict below contains the params names and their values
params = {p: request.getfixturevalue(p) for p in mark_param_names}
print(request.node.name) # e.g., test_foo[0-1-False]
print(os.environ.get('PYTEST_CURRENT_TEST')) # e.g., test_file.py::test_foo[0-1-False] (call)