我想用多个浏览器运行一个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
测试运行,但仅运行一次-忽略多个浏览器设置。
我错过了什么-有没有一种方法可以在这样的设置中获得多次运行?
1条答案
按热度按时间v1uwarro1#
您试图将
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
测试。