簡體   English   中英

如何在Pytest測試套件中包含帶有init的測試類?

[英]How to include test classes with init in a Pytest test suite?

我正在嘗試使用頁面對象模型創建一個帶pytest和Selenium的測試套件來進行模式設計。 為了在我的測試中使用我的頁面類,我只是在我的TestClass __init__方法中導入它們,因為它們需要使用驅動程序實例化。

我知道,默認情況下,pytest使用__init__方法忽略類。 我也知道,通過閱讀這里可以配置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)

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約定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM