跳轉到

5.1 playwright.config.ts 常用設定#

設定檔的角色#

playwright.config.ts 是專案的測試設定中心:跑哪些瀏覽器、連哪個網址、失敗怎麼處理,全寫在這裡。

完整的常用設定範例#

import { defineConfig, devices } from "@playwright/test";

export default defineConfig({
  // 測試檔位置
  testDir: "./tests",

  // 失敗時的處理:只在 CI 上每個失敗都完整重試
  fullyParallel: true,
  forbidOnly: !!process.env.CI,        // CI 上禁止 .only
  retries: process.env.CI ? 2 : 0,     // CI 上失敗重試 2 次
  workers: process.env.CI ? 1 : undefined,

  // 報告
  reporter: [
    ["html"],                          // HTML 報告(npx playwright show-report)
    ...(process.env.CI ? [["github"]] : []),   // CI 上輸出 GitHub 格式
  ],

  use: {
    // 測試的基準網址:page.goto("/login") 會自動補上
    baseURL: "http://localhost:3000",

    // 失敗證據
    screenshot: "only-on-failure",
    video: "retain-on-failure",
    trace: "retain-on-failure",

    // 超時(毫秒)
    actionTimeout: 10_000,
  },

  // 全域超時
  timeout: 30_000,          // 單一測試超時
  expect: {
    timeout: 5_000,         // 斷言重試超時
  },

  // 測試前自動啟動本地伺服器
  webServer: {
    command: "npm run dev",
    url: "http://localhost:3000",
    reuseExistingServer: !process.env.CI,   // 本機重用已開的伺服器
  },

  projects: [
    {
      name: "chromium",
      use: { ...devices["Desktop Chrome"] },
    },
  ],
});

最重要的幾個設定#

設定 用途
testDir 測試檔目錄
baseURL 基準網址,page.goto("/login") 自動補全
retries 失敗重試次數(CI 上開 2 次抗 flaky)
webServer 測試前自動啟動本地伺服器
trace 失敗證據
projects 多瀏覽器/多裝置設定(見 5.2)

baseURL 的好處#

設了 baseURL 之後,測試裡只寫路徑:

await page.goto("/login");       // 自動變成 http://localhost:3000/login

環境換了(正式站、測試站)只改設定檔,測試程式不動。

webServer:本地開發的懶人神器#

webServer: {
  command: "npm run dev",
  url: "http://localhost:3000",
  reuseExistingServer: !process.env.CI,
},

跑 npx playwright test 時:

  • 本機:伺服器沒開就自動啟動,已開就重用
  • CI:自動啟動全新伺服器,測完自動關

建議:新專案直接用上面完整範例改,五分鐘就有齊全的設定。fullyParallel: true + retries: 2(CI)是抗 flaky 的黃金組合。