Playwright P8: Cách làm việc với test config

⏱︎

Read time:

3–4 minutes
Playwright P10: Những thành phần thường gặp trong playwright.config.ts

playwright.config.ts là cấu hình chung của test runner. Bắt đầu nhỏ, chỉ thêm option khi có nhu cầu rõ ràng.

Một config thực tế cho người mới

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

export default defineConfig({
  testDir: './tests',
  timeout: 30_000,
  expect: { timeout: 5_000 },
  fullyParallel: false,
  forbidOnly: !!process.env.CI,
  retries: process.env.CI ? 2 : 0,
  workers: process.env.CI ? 2 : undefined,
  reporter: [['html'], ['list']],

  use: {
    baseURL: 'https://example.com',
    actionTimeout: 10000,
    navigationTimeout: 15000,
    trace: 'on-first-retry',
    screenshot: 'only-on-failure',
    video: 'retain-on-failure',
  },

  projects: [
    { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
    { name: 'firefox', use: { ...devices['Desktop Firefox'] } },
  ],
});
OptionÝ nghĩa
testDirNơi mà playwright sẽ tìm test
timeoutTimeout của một test
expect.timeoutTimeout của 1 expect assertion
fullyParallelChạy song song tất cả các test trong 1 file
forbidOnlyCấm việc sử dụng “only”
retriesSố lần chạy lại khi fail
workersSố luồng chạy song song
reporterĐịnh dạng của report
useOption chung cho browser context/page. Bên trong chứa các thông tin chi tiết
projectsCác cấu hình sẵn có để chạy kịch bản test

Ba loại timeout khác nhau cần nắm rõ

  • Test timeout: giới hạn toàn bộ test.
  • Expect timeout: thời gian assertion Playwright tự retry.
  • Action timeout/navigation timeout: giới hạn action hoặc điều hướng; chỉ cấu hình khi cần.

Chạy test song song

Mặc định Playwright sẽ chạy test song song để tăng tốc độ. Ví dụ bạn cấu hình workers=4 thì nó sẽ chạy 4 luồng song song. Mỗi luồng 1 file ts

Tuy nhiên, nếu bạn setup cả fullyParallel=true thì mức độ chạy song song còn khiếp hơn: chạy 4 luồng, nhưng mỗi luồng tương đương với 1 test case chứ không còn là 1 test suite nữa

Lưu ý
Không nên lạm dụng fullyParallel=true

Các thành phần trong “use”

 use: {
//URL gốc của hệ thống, khi khai báo cái này, các hàm sử dụng URL như goTo() sẽ chỉ cần phần đuôi 
của URL, không cần phải viết full URL nữa
    baseURL: 'https://example.com',    
     
// các loại timeout đã nói ở trên:
    actionTimeout: 10000,
    navigationTimeout: 15000,
// cấu hình khi nào chụp ảnh, khi nào quay video:
    trace: 'on-first-retry',
    screenshot: 'only-on-failure',
    video: 'retain-on-failure',
  }
Tính năngCác cấu hình hỗ trợGiải thích chi tiết
trace
(Ghi lại toàn bộ hành trình test)
on-first-retry
Chỉ ghi trace ở lần chạy lại (retry) đầu tiên của bài test bị lỗi. Giúp tiết kiệm dung lượng ổ đĩa. Tất nhiên bạn phải chạy với mode --retries thì cách này mới hoạt động
on/offon sẽ Ghi trace cho tất cả các bài test, kể cả pass hay fail (Nặng máy/tốn dung lượng). Còn off là tắt hoàn toàn đi
retain-on-failureGhi trace cho tất cả các bài test, nhưng chỉ lưu lại và xuất file nếu bài test đó bị fail. Nếu pass, file trace tự xóa. Nặng hơn option đầu 1 xíu.
on-all-retriesGhi trace cho tất cả các lần chạy lại (cũng nặng)
screenshot
(Chụp ảnh màn hình tự động)
only-on-failure
Chỉ chụp ảnh màn hình ngay tại khoảnh khắc bài test bị fail. Rất hữu ích để xem giao diện lúc đó bị lỗi gì (ví dụ: nút bị ẩn, sai text).
on/offon là tự động chụp ảnh màn hình sau khi mỗi bài test kết thúc, bất kể pass hay fail. off là tắt hoàn toàn (không quyến khích)
video
(Quay video quá trình chạy test)
retain-on-failure
Quay video toàn bộ quá trình, nhưng chỉ lưu lại nếu test bị fail. Nếu test pass, Playwright tự động xóa file video đi để tránh làm đầy bộ nhớ.
on/offQuay video cho tất cả các bài test. Rất nặng nếu số lượng test lớn. off là tắt hoàn toàn.
on-first-retryChỉ quay video ở lần chạy lại đầu tiên của bài test bị lỗi. Tất nhiên bạn phải chạy với mode --retries thì cách này mới hoạt động

Các “projects” có sẵn

projects: [
    {
      name: "api",
      testDir: "./tests/api",
    },
    {
      name: "chromium",
      testDir: "./tests/ui",
      use: { ...devices["Desktop Chrome"] },
    }
  ]

Mặc định khi bạn chạy npx playwright test, nó sẽ chạy hết tất cả các cấu hình được cài đặt ở đây. Nếu muốn nó chỉ chạy 1 cấu hình project duy nhất, thì phải khai báo chi tiết hơn:

npx playwright test --project=chromium
Lưu ý
Trong mỗi project, bạn có thể thêm thoải mái những tuỳ biến của mình vào từng block! 👌