Ba việc: chia nhỏ để chạy song song, retry có kiểm soát, luôn có bằng chứng khi fail.
// playwright.config.ts
export default defineConfig({
fullyParallel: true, // parallel across files and tests
workers: process.env.CI ? 4 : undefined,
retries: process.env.CI ? 2 : 0, // retry only on CI
reporter: [["html"], ["github"]],
use: {
trace: "on-first-retry", // trace only when it matters
screenshot: "only-on-failure",
video: "retain-on-failure",
},
webServer: { command: "pnpm start", url: "http://localhost:3000", reuseExistingServer: !process.env.CI },
})Song song ngoài một máy: chia suite theo shard rồi chạy các job matrix song song, cuối cùng gộp report.
npx playwright test --shard=1/4 # job 1 of 4Điều kiện để shard hoạt động: test độc lập hoàn toàn — mỗi test tự tạo dữ liệu, không dựa vào thứ tự. Test buộc phải chạy tuần tự thì đánh dấu test.describe.serial.
Retry là bộ giảm nhiễu, không phải cách sửa. Bật retries: 2 giữ pipeline dùng được, nhưng phải theo dõi test nào pass ở lần retry (Playwright đánh dấu flaky trong report) và xử lý chúng như bug. Không có bước này thì retry chỉ giấu lỗi thật.
Bằng chứng khi fail: upload playwright-report/ và file trace như artifact của CI job. Trace viewer cho xem lại DOM snapshot từng bước, network và console — đủ để debug một lần fail không tái hiện được trên máy local.
Giảm thời gian thêm: tái dùng trạng thái đăng nhập bằng storageState (setup project đăng nhập một lần) thay vì cho mỗi test đăng nhập lại qua UI.