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 |
|---|---|
testDir | Nơi mà playwright sẽ tìm test |
timeout | Timeout của một test |
expect.timeout | Timeout của 1 expect assertion |
fullyParallel | Chạy song song tất cả các test trong 1 file |
forbidOnly | Cấm việc sử dụng “only” |
retries | Số lần chạy lại khi fail |
workers | Số luồng chạy song song |
reporter | Định dạng của report |
use | Option chung cho browser context/page. Bên trong chứa các thông tin chi tiết |
projects | Cá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=trueCá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ăng | Cá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/off | on 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-failure | Ghi 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-retries | Ghi 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/off | on 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/off | Quay 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-retry | Chỉ 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=chromiumLư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! 👌




