簡體   English   中英

如何在 conftest.py 中設置會話詳細信息以獲取收益以及 pytest 中的夾具?

[英]How can I set session details in conftest.py for yield along with fixture in pytest?

我的目標是在conftest.py 文件中創建一個預測試和后測試,它將在我的測試套件中的每個測試用例之后運行。 即我試圖在所有測試之前運行方法(login_page() 和 login()),在所有測試之后運行方法(logout())

我試過使用下面的代碼片段

@pytest.fixture(scope="session", autouse=True)
def pretest():
    login_page()
    login()
    yield driver
    logout()

我觀察到,雖然我的預測試 (login_page() 和 login()) 運行良好,但在所有測試用例之前,后測試 (logout()) 沒有按預期工作,並且在我選擇的所有測試之后運行案件被執行。

為了嘗試不同的方法,我也嘗試在conftest.py 中使用以下代碼片段

@pytest.fixture(scope="session", autouse=True)
def pretest():
    login_page()
    login()
@pytest.yield_fixture(scope="session", autouse=True)
def posttest():
    logout()

上面的方法只是拋出了一些錯誤,並沒有像這樣啟動測試。

我還在conftest.py文件中嘗試了以下代碼片段

@pytest.yield_fixture(scope="session", autouse=True)
def pretest():
    login_page()
    login()
    yield driver
    logout()

我認為您真的很接近,並且您的問題來自使用"session"范圍,這是可能的更高范圍(請參閱Pytest fixture scope 中的更多內容)。

使用"session"意味着您的夾具在所有測試運行中都執行一次。 如果您在該夾具中使用yield -ing,則yield之前的內容將在所有測試之前執行(而不是在每個測試之前!),之后的內容將在所有測試運行后運行。

將其切換為"function"將使夾具在每次測試之前/之后運行,這就是您想要的:

@pytest.fixture(scope="function", autouse=True)
def login_context():  # Renamed for clarity
    login_page()
    login()
    yield driver  # Not sure what this is?
    logout()

注意這里的重命名: pretest是誤導性的,因為夾具的一部分實際上會在測試之后執行。

暫無
暫無

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

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