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



在我当前的端到端测试设置中,我使用的是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个测试,我想要:

  • some_test[DifferentEnum-False-browser0]
  • some_test[DifferentEnum2-True-browser0]

如果我单独运行测试,一切都很好。但如果我一起运行它们,第一个会完成并通过,第二个似乎根本没有通过固定装置,但浏览器会话只是保持打开。

对于每个测试要执行的fixture,我需要更改什么?

缩小browser夹具的范围:

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

或者由于CCD_ 4是默认作用域而完全删除它。

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

最新更新