跳到主要內容

隔離

簡介

使用 Playwright 編寫的測試在稱為瀏覽器內容的隔離、全新環境中執行。這種隔離模型提高了可重現性,並防止了級聯測試失敗。

什麼是測試隔離?

測試隔離是指每個測試都與另一個測試完全隔離。每個測試都獨立於任何其他測試運行。這表示每個測試都有自己的本地儲存、會話儲存、Cookie 等。Playwright 使用 BrowserContexts 來實現這一點,BrowserContexts 相當於類似無痕模式的設定檔。它們創建速度快且成本低廉,並且即使在單個瀏覽器中運行時也完全隔離。Playwright 為每個測試創建一個內容,並在該內容中提供一個預設的 Page。

為什麼測試隔離很重要?

  • 沒有失敗轉移。如果一個測試失敗,它不會影響另一個測試。
  • 易於偵錯錯誤或不穩定性,因為您可以根據需要多次運行單個測試。
  • 在並行、分片等運行時,不必考慮順序。

測試隔離的兩種方式

關於測試隔離有兩種不同的策略:從頭開始或在測試之間清理。在測試之間清理的問題在於,可能很容易忘記清理,而且有些東西是無法清理的,例如「造訪過的連結」。來自一個測試的狀態可能會洩漏到下一個測試中,這可能會導致您的測試失敗,並使偵錯變得更加困難,因為問題來自另一個測試。從頭開始意味著一切都是新的,因此如果測試失敗,您只需查看該測試內部即可進行偵錯。

Playwright 如何實現測試隔離

Playwright 使用瀏覽器內容來實現測試隔離。每個測試都有自己的瀏覽器內容。每次運行測試都會創建一個新的瀏覽器內容。當使用 Playwright 作為測試執行器時,預設情況下會創建瀏覽器內容。否則,您可以手動創建瀏覽器內容。

browser = playwright.chromium.launch()
context = browser.new_context()
page = context.new_page()

瀏覽器內容還可以用於模擬涉及行動裝置、權限、語言環境和色彩配置的多頁場景。請查看我們的「模擬」指南以了解更多詳細資訊。

單個測試中的多個內容

Playwright 可以在單個場景中創建多個瀏覽器內容。當您想要測試多用戶功能(例如聊天)時,這非常有用。

from playwright.sync_api import sync_playwright, Playwright

def run(playwright: Playwright):
# create a chromium browser instance
chromium = playwright.chromium
browser = chromium.launch()

# create two isolated browser contexts
user_context = browser.new_context()
admin_context = browser.new_context()

# create pages and interact with contexts independently

with sync_playwright() as playwright:
run(playwright)