如何在pytest中使用两次参数化的依赖fixture?

2024-05-19 07:07:01 发布

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

我试图在一个测试中多次使用参数化的fixture,目的是得到所有值的笛卡尔积。在

https://stackoverflow.com/a/39444098/102441演示如何对一个简单的夹具执行此操作:

import pytest

@pytest.fixture(params=[0, 1, 2])
def first(request):
    return request.param

second = first

# runs 3x3 = 9 times
def test_double_fixture(first, second):
    assert False, '{} {}'.format(first, second)

但是,如果参数化来自于一个相关的夹具,那么这种方法就失败了:

^{pr2}$

如何让这个运行3x3的测试像这个简单的例子?在


Tags: httpsimport目的com参数returnpytestrequest
1条回答
网友
1楼 · 发布于 2024-05-19 07:07:01

这是pytest的正确行为。因为您使用integer深入到其他设备中。要了解发生了什么,请检查带有setup show标志的pytest。您将看到类似于:

        SETUP    F integer[0]
        SETUP    F squared_integer (fixtures used: integer)
        SETUP    F first (fixtures used: squared_integer)
        SETUP    F second (fixtures used: squared_integer)
        Test/test_54044536_3.py::test_double_fixture[0] (fixtures used: first, integer, second, squared_integer)F
        TEARDOWN F second
        TEARDOWN F first
        TEARDOWN F squared_integer
        TEARDOWN F integer[0]

所以整数值只适用于平方整数函数。在

为了回答您的问题,我们可以将代码重构为fixture和一个函数。这看起来像:

^{pr2}$

你将有9个测试,顺序如下:

        SETUP    F first[0]
        SETUP    F second[0]
        Test/test_54044536_2.py::test_double_fixture[0-0] (fixtures used: first, second)F
        TEARDOWN F second[0]
        TEARDOWN F first[0]
        SETUP    F first[0]
        SETUP    F second[1]
        Test/test_54044536_2.py::test_double_fixture[0-1] (fixtures used: first, second)F
        TEARDOWN F second[1]
        TEARDOWN F first[0]
        SETUP    F first[0]
        SETUP    F second[2]
        Test/test_54044536_2.py::test_double_fixture[0-2] (fixtures used: first, second)F
        TEARDOWN F second[2]
        TEARDOWN F first[0]
        SETUP    F first[1]
        SETUP    F second[0]
        Test/test_54044536_2.py::test_double_fixture[1-0] (fixtures used: first, second)F
        TEARDOWN F second[0]
        TEARDOWN F first[1]
        SETUP    F first[1]
        SETUP    F second[1]
        Test/test_54044536_2.py::test_double_fixture[1-1] (fixtures used: first, second)F
        TEARDOWN F second[1]
        TEARDOWN F first[1]
        SETUP    F first[1]
        SETUP    F second[2]
        Test/test_54044536_2.py::test_double_fixture[1-2] (fixtures used: first, second)F
        TEARDOWN F second[2]
        TEARDOWN F first[1]
        SETUP    F first[2]
        SETUP    F second[0]
        Test/test_54044536_2.py::test_double_fixture[2-0] (fixtures used: first, second)F
        TEARDOWN F second[0]
        TEARDOWN F first[2]
        SETUP    F first[2]
        SETUP    F second[1]
        Test/test_54044536_2.py::test_double_fixture[2-1] (fixtures used: first, second)F
        TEARDOWN F second[1]
        TEARDOWN F first[2]
        SETUP    F first[2]
        SETUP    F second[2]
        Test/test_54044536_2.py::test_double_fixture[2-2] (fixtures used: first, second)F
        TEARDOWN F second[2]
        TEARDOWN F first[2]

相关问题 更多 >

    热门问题