隔離
簡介
使用 Playwright 編寫的測試會在稱為瀏覽器環境背景的隔離、全新環境中執行。這種隔離模型提高了再現性,並防止了級聯測試失敗。
什麼是測試隔離?
測試隔離是指每個測試都與另一個測試完全隔離。每個測試都獨立於任何其他測試運行。這表示每個測試都有自己的本機儲存空間、工作階段儲存空間、Cookie 等。Playwright 使用 BrowserContexts 來實現這一點,BrowserContexts 相當於類似無痕模式的設定檔。它們建立快速且成本低廉,並且完全隔離,即使在單一瀏覽器中執行也是如此。Playwright 為每個測試建立一個環境背景,並在該環境背景中提供一個預設的 Page。
為什麼測試隔離很重要?
- 沒有失敗轉移。如果一個測試失敗,它不會影響其他測試。
- 容易偵錯錯誤或不穩定性,因為您可以根據需要多次執行單一測試。
- 在並行、分片等執行時,不必考慮順序。
測試隔離的兩種方式
關於測試隔離有兩種不同的策略:從頭開始或在測試之間清理。在測試之間清理的問題在於,很容易忘記清理,而且有些東西無法清理,例如「造訪過的連結」。一個測試的狀態可能會洩漏到下一個測試中,這可能會導致您的測試失敗,並使偵錯更加困難,因為問題來自另一個測試。從頭開始意味著一切都是新的,因此如果測試失敗,您只需在該測試中尋找即可進行偵錯。
Playwright 如何實現測試隔離
Playwright 使用瀏覽器環境背景來實現測試隔離。每個測試都有自己的瀏覽器環境背景。每次執行測試都會建立一個新的瀏覽器環境背景。當使用 Playwright 作為測試執行器時,預設會建立瀏覽器環境背景。否則,您可以手動建立瀏覽器環境背景。
- 同步
- 非同步
browser = playwright.chromium.launch()
context = browser.new_context()
page = context.new_page()
browser = await playwright.chromium.launch()
context = await browser.new_context()
page = await 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)
import asyncio
from playwright.async_api import async_playwright, Playwright
async def run(playwright: Playwright):
# create a chromium browser instance
chromium = playwright.chromium
browser = await chromium.launch()
# create two isolated browser contexts
user_context = await browser.new_context()
admin_context = await browser.new_context()
# create pages and interact with contexts independently
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())