django Pytest和playwright -使用类作用域的fixtures时的多个浏览器

biswetbf  于 2023-07-01  发布在  Go
关注(0)|答案(1)|浏览(130)

我想用多个浏览器运行一个pytest剧作家测试-例如。pytest --browser firefox --browser webkit
这适用于像这样的基于函数的测试:

import pytest
from playwright.sync_api import Page

@pytest.mark.playwright
def test_liveserver_with_playwright(page: Page, live_server):
    page.goto(f"{live_server.url}/")
    # etc.

测试执行两次,每个浏览器设置执行一次。
然而,我也想使用基于类的测试,为此我在基类上使用了一个fixture:

import pytest
import unittest
from playwright.sync_api import Page

@pytest.mark.playwright
class PlaywrightTestBase(unittest.TestCase):
    @pytest.fixture(autouse=True)
    def playwright_liveserver_init(self, page: Page, live_server):
        self.page = page
        # etc.

class FrontpageTest(PlaywrightTestBase):
    def test_one_thing(self):
        self.page.goto("...")
        # etc

测试运行,但仅运行一次-忽略多个浏览器设置。
我错过了什么-有没有一种方法可以在这样的设置中获得多次运行?

wwwo4jvm

wwwo4jvm1#

您试图将pytest fixture与继承unittest.TestCase的类混合使用。但这不能直接做到。详情请参见https://stackoverflow.com/a/18187731/7058266
但是,有一些变通办法。例如,在https://stackoverflow.com/a/52062473/7058266中,您可以看到使用parameterized Python库(https://pypi.org/project/parameterized/)实现相同目标的方法。这可能就是你想要打开多个浏览器的方式。将其与pytest-xdist结合使用,以便您可以使用pytest -n NUM_PROCESSES同时运行多个pytest测试。

相关问题