如何对测试函数的每个参数执行pytest fixture?

2024-10-06 10:30:00 发布

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

在我当前的端到端测试设置中,我使用的是Selenium。我有一个固定装置,看起来像这样:

@pytest.fixture(scope="session")
def browser(request):
    # Here I do a basic setup
    # Setting up accounts from configuration based on input from test function
    # Initializing webdriver wrapper with this data
    # yield driver
    # teardown

到目前为止,我只使用夹具的参数,典型的测试功能如下所示:

@pytest.mark.parametrize('browser', [(SomeEnum, AnotherEnum1),
                                    (SomeEnum, AnotherEnum2)], indirect=True)
def some_test(browser):

这将导致两项测试:

  • some_test[broswer0]
  • some_test[browser1]

我正在尝试将函数的参数和夹具的参数组合起来,因此测试函数如下所示:

@pytest.mark.parametrize('browser', [([SomeEnum1, SomeEnum2], AnotherEnum)], indirect=True)
@pytest.mark.parametrize('param1,param2', [(DifferentEnum, False), (DifferentEnum2, True)])
def some_test(browser, param1, param2):

此设置将导致2个测试,我希望:

  • 一些测试[Differtenum-False-browser0]
  • 一些测试[Differentineum2-True-browser0]

如果我单独运行测试,一切正常。但如果我同时运行它们,第一个将完成并通过,而第二个似乎根本不会通过夹具,但浏览器会话将保持打开状态

我需要为每个测试执行什么样的夹具


Tags: fromtestbrowsertrue参数pytestdefsome
1条回答
网友
1楼 · 发布于 2024-10-06 10:30:00

缩小browser装置的范围:

@pytest.fixture(scope="function")
def browser(request):
    ...

或者完全删除它,因为function是默认范围

@pytest.fixture
def browser(request):
    ...

相关问题 更多 >