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

时间:2019-05-28 18:08:03

标签: python pytest

我正在尝试使用Page Objects Models用于模式设计,使用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)

1 个答案:

答案 0 :(得分:0)

Pytest和Unittest有一些不同的约定。通常应该避免将两者混用在同一测试功能中。

如果您仅使用Pytest,则可以将固定装置作为测试函数的参数传递,例如:

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约定有所了解。