使用 pytest_generate_tests() 时如何在 pytest.param 中设置动态标记参数
How to set dynamic marks parameter in pytest.param when using pytest_generate_tests()
我有一个 pytest 设置,其中我的所有测试都通过存储在 YAML 文件中的数据进行参数化。该 YAML 文件中包含各种测试实例的自定义标记。为了简单起见,我删除了大部分代码。问题是下面的变量标记需要是 _pytest.mark.structures.MarkDecorator
类型
我似乎无法从字符串更改对象类型。我在想一定有一个 simpler/different 方法来实现我想做的事情,但我只是没有看到它...
def pytest_generate_tests(metafunc):
######################################################################
# A bunch of code removed for simplicity but cm is defined in yaml file
######################################################################
cm = "custom_marker"
marker = f"pytest.mark.{cm}"
final_str = pytest.param((1,2), marks=marker)
这并没有直接回答你的问题,但我写了一个名为 parametrize_from_file
的库,用于从 YAML/TOML/JSON/NT 文件中进行参数化测试(在 pytest 中)的确切目的。它支持自定义标记,并且可能比编写自己的参数化代码容易得多。
根据 Kale 的回复发布答案。谢谢羽衣甘蓝
我需要改变这个:
cm = "custom_marker"
marker = f"pytest.mark.{cm}"
final_str = pytest.param((1,2), marks=marker)
对此:
cm = "custom_marker"
marker = getattr(pytest.mark, cm)
final_str = pytest.param((1,2), marks=marker)
我有一个 pytest 设置,其中我的所有测试都通过存储在 YAML 文件中的数据进行参数化。该 YAML 文件中包含各种测试实例的自定义标记。为了简单起见,我删除了大部分代码。问题是下面的变量标记需要是 _pytest.mark.structures.MarkDecorator
类型我似乎无法从字符串更改对象类型。我在想一定有一个 simpler/different 方法来实现我想做的事情,但我只是没有看到它...
def pytest_generate_tests(metafunc):
######################################################################
# A bunch of code removed for simplicity but cm is defined in yaml file
######################################################################
cm = "custom_marker"
marker = f"pytest.mark.{cm}"
final_str = pytest.param((1,2), marks=marker)
这并没有直接回答你的问题,但我写了一个名为 parametrize_from_file
的库,用于从 YAML/TOML/JSON/NT 文件中进行参数化测试(在 pytest 中)的确切目的。它支持自定义标记,并且可能比编写自己的参数化代码容易得多。
根据 Kale 的回复发布答案。谢谢羽衣甘蓝 我需要改变这个:
cm = "custom_marker"
marker = f"pytest.mark.{cm}"
final_str = pytest.param((1,2), marks=marker)
对此:
cm = "custom_marker"
marker = getattr(pytest.mark, cm)
final_str = pytest.param((1,2), marks=marker)