如何在Pytest测试套件中包含带有init的测试类?

2024-04-24 12:24:07 发布

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

我试图使用页面对象模型来设计模式,用pytest和Selenium创建一个测试套件。为了在测试中使用页面类,我只是将它们导入到TestClass__init__方法中,因为它们需要用一个驱动程序实例化。在

我知道,默认情况下,pytest使用__init__方法忽略类。我还知道,通过阅读here可以配置pytest收集测试的位置。是否也可以考虑使用__init__进行类测试,而不是返回“空套件”错误?在

@pytest.fixture(scope="session")
def driver_init(request):
    from selenium import webdriver
    driver = webdriver.Chrome()
    session = request.node
    page = PageFunctions(driver)
    login_page = LoginPage(driver)
    registration_page = RegistrationPage(driver)

    for item in session.items:
        cls = item.getparent(pytest.Class)
        setattr(cls.obj, "driver", driver)
        setattr(cls.obj, "page", page)
        setattr(cls.obj, "login", login_page)
        setattr(cls.obj, "registration", registration_page)

Tags: 方法obj套件initpytestrequestsessiondriver
1条回答
网友
1楼 · 发布于 2024-04-24 12:24:07

Pytest和Unittest有一些不同的约定。在同一个测试函数中混合使用这两个函数通常是值得避免的。在

如果您专门使用Pytest,您将把fixture作为参数传递给测试函数,例如:

import pytest
from selenium import webdriver


@pytest.fixture
def driver():
    driver = webdriver.Chrome()
    return driver


def test_func(driver):
    # `driver` is found by pytest in the fixture above and
    # automatically passed in
    request = ... # Instantiate your request (not in your included code)

    session = request.node
    page = PageFunctions(driver)
    login_page = LoginPage(driver)
    registration_page = RegistrationPage(driver)

    # Make some assertions about your data, e.g.:
    assert page is not None

您还没有包括所有的对象定义/导入,所以很难看到您试图通过测试完成什么,但希望这能让您了解pytest约定。在

相关问题 更多 >