上周微軟的 Playwright 團隊推出了 v1.48
版本,我的 實戰 E2E 測試:使用 Playwright 測試框架 課程有位學員在我們的 Discord 課程專屬頻道中反應,說他沒辦法成功執行 Playwright 腳本,請我幫忙看看。因為要執行學員的程式,而我通常不喜歡在本機執行程式 (安全考量),所以我就藉此玩了一下 Playwright 新版的 Docker 容器,順手寫了份筆記給大家參考。
你可以透過 Docker Desktop 或 Podman 來執行 Playwright 容器,我們這篇文章就以 Docker Desktop 為例進行講解。
先下載 Docker 容器映像
首先,由微軟主導的 Playwright 專案也維護了一份 Playwright 的映象檔,但是他並不是維護在 Docker Hub 上面,而是在微軟自家的 Microsoft Artifact Registry 上面。
要獲取 Playwright 最新版的 Docker 容器映像,可以到以下網址查看所有的 Tags:
https://mcr.microsoft.com/en-us/product/playwright/tags
所以如果你想要下載 Playwright v1.48.0 的容器映像,就可以選用一個需要的 Tag 來用,目前 v1.48.0 有以下 Tags 可用:
v1.48.0
v1.48.0-amd64
v1.48.0-arm64
v1.48.0-noble
v1.48.0-noble-amd64
v1.48.0-noble-arm64
v1.48.0-jammy
v1.48.0-jammy-amd64
v1.48.0-jammy-arm64
v1.48.0-focal
v1.48.0-focal-amd64
v1.48.0-focal-arm64
很多人遇到這麼多 Image Tag 都會有選擇障礙,但其實我有一個很簡單的判斷方法,就是選擇「最短」的那個名字。因為現在的 Docker 容器映像檔都是多架構支援的,所以你只要選擇最短的那個 Tag 名稱,或是只有版本號的那個 Tag 名稱,他就會自動幫你選擇最適合的那個來下載。
越是明確的 Tag 名稱,代表他支援的架構越少,當然下載量也會最小,因此:
- 在本機執行,基本上選最短的那個
- 在 CI 執行,基本上選最精準的那個
針對這些 Tags 的命名規則,我也進一步說明一下。
所以你如果要在本機跑 Playwright 的測試腳本,選擇最短的那個 Tag 名稱就可以了:
docker pull mcr.microsoft.com/playwright:v1.48.0
初始化 Docker Desktop 執行環境 (Windows)
若你是 Windows 作業系統,請確保你已經啟用了 Docker Desktop 的 Enable host networking 功能,這樣你才能順利的在容器中方便的使用 localhost
本地迴路介面 (loopback interface),並在 Host 主機順利的連線到容器中的網路。
這個 Enable host networking
功能必須使用 Docker Desktop v4.34
以上版本才有支援,並且在 Windows 作業系統中,必須啟用 WSL 2 功能。
在啟用了 Enable host networking
選項之後,你就可以用比較簡單的命令來執行 Playwright 測試,並且可以很容易的透過 localhost
在 Windows 本機連接到容器,不需要在 docker run
時設定 -p
埠號對應參數。
建立 Playwright 容器
你可以透過以下指令來快速建立 Playwright 容器:
-
Windows / PowerShell
docker run -it --rm --ipc=host --net=host -v ${PWD}:/app --workdir=/app mcr.microsoft.com/playwright:v1.48.0 /bin/bash
-
Linux / macOS / bash / WSL
docker run -it --rm --ipc=host --net=host -v $PWD:/app --workdir=/app mcr.microsoft.com/playwright:v1.48.0 /bin/bash
進入容器環境後,可以直接透過命令列工具執行 Playwright 測試:
-
初始化 Playwright 專案
npm init playwright@latest --yes -- --quiet
-
執行 Playwright 測試
npx playwright test
-
查看 Playwright 的測試報表
npx playwright show-report
Playwright 預設的 HTML reporter 會監聽 Port 9323
讓你透過瀏覽器查看報表,所以你可以連到 http://localhost:9323 開啟 HTML 測試報表。
由於我們已經啟用 Enable host networking
功能的關係,所以你可以不用管容器的 IP 位址,直接在 Host 主機上開啟瀏覽器,連到 http://localhost:9323
就可以開啟 HTML 測試報表。
不過,如果你使用舊版的 Docker Desktop 來執行容器,啟動容器時要加上 -p 9323:9323
參數,並且執行 npx playwright show-report
命令時,還要額外加上 --host 0.0.0.0
參數,否則你將無法從 Host 主機開啟瀏覽器透過 http://localhost:9323 查看容器中的報表,設定相對麻煩許多。
後記
另外要提醒的一點是,微軟 Playwright 團隊所準備的這些容器映像檔,都已經內建最新版瀏覽器執行檔,所以你不需要在容器下載瀏覽器,這對 CI 來說也是非常方便的!👍
後來學員回報他自己解決了問題,他說公司內網 chromium
跟 firefox
都可以正常透過 Playwright 內建的瀏覽器連到外部網站,唯獨 webkit
連不出去,他在測試時改連外網 webkit
就可以成功運行了。我自己研判他們公司的資安設定限制了特定應用程式的連線能力,至於確切是如何阻擋的,那就真的要詢問他們公司的網管人員才能清楚了。
該學員最後也有分享,他參考 Playwright.tw 官網的 HTTP Proxy 文件,在 playwright.config.ts
加上 proxy 設定,就可以使用內網透過 webkit 連線到外網了!
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
proxy: {
server: 'http://myproxy.com:3128',
username: 'usr',
password: 'pwd'
}
}
});
相關連結