Chia suite thành shard — mỗi runner chạy một phần rời nhau, rồi gộp kết quả.
yaml
strategy:
matrix:
shard: [1, 2, 3, 4]
steps:
- run: pnpm vitest --shard=${{ matrix.shard }}/4Hầu hết runner hiện đại (Vitest, Jest, Playwright, pytest-xdist) có sẵn cờ shard nên không cần tự chia file.
Điều kiện bắt buộc trước khi song song hóa:
- Test phải độc lập. Nếu test dùng chung một database/schema/bucket, hai shard sẽ ghi đè nhau. Cấp cho mỗi shard một schema riêng theo index shard, hoặc chạy container DB riêng.
- Không phụ thuộc thứ tự. Test dựa vào trạng thái do test trước tạo ra sẽ hỏng ngay khi bị tách shard.
- Chia theo thời gian, không theo số file. Chia đều số file thường lệch vì vài file e2e nặng gấp chục lần; dùng timing report của lần chạy trước để cân bằng.
Giới hạn cần nói khi phỏng vấn: song song hóa chỉ giảm thời gian chờ, không giảm tổng chi phí runner, và mỗi shard vẫn tốn thời gian khởi động (cài dependency, dựng DB). Chia quá nhỏ thì phần khởi động lấn át phần chạy test.