Pytest 外掛參考
簡介
Playwright 提供一個 Pytest 外掛來編寫端到端測試。要開始使用它,請參考 getting started guide。
使用方式
要執行你的測試,使用 Pytest CLI。
pytest --browser webkit --headed
如果你想自動添加 CLI 參數而不指定它們,你可以使用 pytest.ini 文件:
# content of pytest.ini
[pytest]
# Run firefox with UI
addopts = --headed --browser firefox
CLI arguments
注意,CLI 參數僅適用於預設的 browser
、context
和 page
固定裝置。如果你使用 API 呼叫建立一個 browser、context 或 page,例如 browser.new_context(),CLI 參數將不會被應用。
--headed
: 在 headed 模式下執行測試 (預設: headless)。--browser
: 在不同的瀏覽器chromium
、firefox
或webkit
中執行測試。可以多次指定 (預設:chromium
)。--browser-channel
要使用的 Browser channel。--slowmo
將 Playwright 操作減慢指定的毫秒數。這樣可以看到發生了什麼 (預設: 0)。--device
要模擬的 Device。--output
測試產生的工件目錄 (預設:test-results
)。--tracing
是否為每個測試記錄 trace。on
、off
或retain-on-failure
(預設:off
)。--video
是否為每個測試錄製影片。on
、off
或retain-on-failure
(預設:off
)。--screenshot
是否在每次測試後自動截取螢幕截圖。on
、off
或only-on-failure
(預設:off
)。--full-page-screenshot
是否在失敗時截取整頁截圖。預設情況下,僅捕獲視口。需要啟用--screenshot
(預設:off
)。
Fixtures
此外掛配置了 Playwright 特定的 pytest 夾具。要使用這些夾具,請將夾具名稱作為測試函式的參數。
def test_my_app_is_working(fixture_name):
pass
# Test using fixture_name
# ...
函式範圍: 這些固定裝置在測試函式中請求時建立,並在測試結束時銷毀。
context
: 新的 browser context 用於測試。page
: 新的 browser page 用於測試。new_context
: 允許建立不同的 browser contexts 用於測試。對於多使用者場景很有用。接受與 browser.new_context() 相同的參數。
Session scope: 這些 物件 在測試 函式 中請求時 建立,並在所有測試結束時銷毀。
playwright
: Playwright 實例.browser_type
: BrowserType 當前瀏覽器的實例.browser
: Browser 由 Playwright 啟動的實例.browser_name
: 瀏覽器名稱作為字串.browser_channel
: 瀏覽器頻道作為字串.is_chromium
,is_webkit
,is_firefox
: 分別對應瀏覽器類型的布林值.
自訂 fixture 選項: 對於 browser
和 context
fixtures,使用以下 fixtures 定義自訂啟動選項。
browser_type_launch_args
: 覆寫 browser_type.launch() 的啟動參數。它應該返回一個 Dict。browser_context_args
: 覆寫 browser.new_context() 的選項。它應該返回一個 Dict。
也可以使用 browser_context_args
標記來覆蓋單個測試的上下文選項(browser.new_context())。
import pytest
@pytest.mark.browser_context_args(timezone_id="Europe/Berlin", locale="en-GB")
def test_browser_context_args(page):
assert page.evaluate("window.navigator.userAgent") == "Europe/Berlin"
assert page.evaluate("window.navigator.languages") == ["de-DE"]