如何为 pytest 创建一个 BaseTest class

How do I create a BaseTest class for pytest

我正在尝试创建一个 class,它将被我的所有其他测试 class 继承。我似乎对如何去做有误解,因为当我尝试 运行 pytest 时,它找不到我的测试并抛出一个 Empty suite 错误。

这就是我现在拥有的。请注意,这是针对使用 Selenium

的网络 ui 测试

base_test.py:

@pytest.mark.usefixtures('chrome_driver_init')
class BaseTest:
        def __init__(self):
                self.login_page = LoginPage(self.driver)
                self.home_page = HomePage(self.driver)
                self.details_page = DetailsPage(self.driver)

我只想创建我的网页对象的实例以供我的测试使用 类

test_login.py

class TestLogin(BaseTest):
    def test_login(self):
        self.login_page.login()
        assert 'Login Succesfull' in self.home_page.welcome_text()

welcome_text() 是一个简单的方法,可以找到一个网络元素和 returns 它的文本

最后只是通过我的 conftest.py:

@pytest.fixture()
def chrome_driver_init(request):
    driver = webdriver.Chrome(options=opts, executable_path=ChromeDriverManager(path=TEST_PATH).install())
    request.cls.driver = driver
    driver.get(URL)
    driver.maximize_window()
    yield
    driver.quit()

我觉得我的 BaseTest 需要继承一些 pytest class 并调用 super().__init__() 但我无法在网上找到任何关于 class 的文档或答案.

关于如何实现这个的任何想法?

编辑:正如 MrBean 建议的那样,我添加了 self.到我在 BaseTest 中的页面对象。仍然得到相同的结果

所以在进一步挖掘之后,pytest 似乎不会从 类 收集任何具有 __init__(self) 函数的测试用例。我能找到的唯一解决方法是在每次测试开始时声明页面对象。我觉得这非常烦人和多余。如果有人有更好的解决方案请告诉我。

终于想通了。将我的页面对象初始化添加到我的 pytest 夹具中。不需要 BaseTest class。所以我的最终代码是

conftest.py

def page_object_init(request, driver):
    request.cls.login_page = LoginPage(driver)
    request.cls.home_page = HomePage(driver)
    request.cls.details_page = DetailsPage(driver)


@pytest.fixture()
def chrome_driver_init(request):
    driver = webdriver.Chrome(options=opts, executable_path=ChromeDriverManager(path=TEST_PATH).install())
    request.cls.driver = driver
    page_object_init(request, driver)
    driver.get(URL)
    driver.maximize_window()
    yield
    driver.quit()

test_login.py

class TestLogin(BaseTest):
    def test_login(self):
        self.login_page.login()
        assert 'Login Succesfull' in self.home_page.welcome_text()

感谢 MrBean 为我指明了正确的方向