gpt4 book ai didi

当一个参数由另一个参数生成时,pytest 两级参数化

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

我有一个场景,我有一个参数列表。每个参数都可以生成另一个参数列表,我想根据这两个参数参数化我的测试。

类似于我正在做的事情 for loop下面但使用参数化。
还有test_1test_2应该对任何一组参数一起执行

有什么帮助吗??

param1 = [<some_list>]
#param2 = [<some_list_Generated_based_on_Param1>]

for arg1 in param1:
param2 = get_param2(arg1)
for arg2 in param2
def test_1():
...
pass
def test_2():
...
pass

最佳答案

我怀疑是否有直接的方法来实现这一目标。但是通过扩展 pytest 插件 pytest_generate_tests ,我们可以做到。

这是我对另一个 parametrize 的回答问题。 using fixture return value as value in mark.parametrize()

这是我的解决方案。

  • 标记要进行两级参数化的测试。
  • 得到你想要做二级参数化的测试,得到一级参数化。
  • 基于第一级参数化,生成第二级。
  • 分配的测试用例仅使用二级参数化或根据您的要求使用两者。

  • 示例测试:
    import pytest

    @pytest.mark.two_level_parametrization
    @pytest.mark.parametrize("first_level", [1, 2, 3])
    def test_two_level_parametrization(second_level):
    print(second_level)
    Conftest.py :
    import pytest

    def pytest_generate_tests(metafunc):
    if hasattr(metafunc.function, 'two_level_parametrization'):
    # You may need more marker or add if statement based on the arg of parametrize if you want to implement multiple two-level paremetrize
    first_parametrize = metafunc.function.parametrize
    metafunc.function.parametrize = [calculate_second_parametrize(first_parametrize)]

    # # If you want to keep first level parametrization:
    # metafunc.function.parametrize = [first_parametrize, calculate_second_parametrize(first_parametrize)]

    def calculate_second_parametrize(first_parametrize):
    # Define your own method here to generate the parametrize object you need.

    input_params = first_parametrize.args[1]
    output_params = input_params + [-1 * num for num in input_params]
    return pytest.mark.parametrize('second_level', output_params)

    输出:
    test_01.py::test_two_level_parametrization[1] 1
    PASSED
    test_01.py::test_two_level_parametrization[2] 2
    PASSED
    test_01.py::test_two_level_parametrization[3] 3
    PASSED
    test_01.py::test_two_level_parametrization[-1] -1
    PASSED
    test_01.py::test_two_level_parametrization[-2] -2
    PASSED
    test_01.py::test_two_level_parametrization[-3] -3
    PASSED

    关于当一个参数由另一个参数生成时,pytest 两级参数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38019459/

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