1. Mô tả lỗi
Flaky test là test automation có kết quả không ổn định:
-
cùng một test
-
cùng một code
-
cùng một môi trường
nhưng:
-
lúc pass
-
lúc fail
mà không có thay đổi chức năng của ứng dụng.
2. Nguyên nhân phổ biến
2.1. Wait không đúng hoặc không đủ
-
chờ sai điều kiện
-
timeout không phù hợp
-
dùng sleep cố định
→ chạy nhanh thì pass, chậm thì fail.
2.2. Ứng dụng phản hồi chậm hoặc không ổn định
-
backend chậm
-
mạng chậm
-
môi trường yếu
→ thời gian load thay đổi giữa các lần chạy.
2.3. Element bị che hoặc chưa sẵn sàng tương tác
-
overlay
-
animation
-
trạng thái enable chưa xong
→ click bị chặn ngẫu nhiên.
2.4. Xpath / locator không ổn định
-
dùng index
-
dùng thuộc tính động
-
DOM thay đổi nhẹ là lệch
→ lúc tìm được, lúc không.
2.5. UI bị render lại trong lúc test đang thao tác
-
SPA re-render
-
element bị detach
-
reference cũ không còn hợp lệ
2.6. Dữ liệu test không độc lập
-
nhiều test dùng chung dữ liệu
-
chạy song song ghi đè
-
phụ thuộc trạng thái test khác
2.7. Phụ thuộc thứ tự chạy test
-
test sau phụ thuộc kết quả test trước
-
khi reorder hoặc chạy riêng thì fail
3. Dấu hiệu nhận biết
-
Chạy lại nhiều lần cho kết quả khác nhau
-
Chạy local thì pass, lên CI thì fail
-
Rerun thì pass
4. Cách khắc phục (thực tế nên làm)
4.1. Chuẩn hóa lại toàn bộ wait
-
chờ theo trạng thái thực
-
bỏ sleep
-
dùng wait reusable
4.2. Ổn định locator
-
dùng data-test / data-qa
-
tránh index
-
tránh xpath theo cấu trúc sâu
4.3. Đảm bảo dữ liệu test độc lập
-
mỗi test tự tạo dữ liệu
-
hoặc dùng data riêng
-
cleanup sau test
4.4. Tránh giữ element reference quá lâu
-
re-find element trước khi thao tác quan trọng
-
nhất là sau navigation hoặc reload
4.5. Kiểm soát môi trường chạy test
-
tài nguyên máy
-
số lượng test chạy song song
-
cấu hình browser / grid
4.6. Ghi log và đánh dấu flaky test
-
log thời gian chờ
-
log bước fail
-
theo dõi tỉ lệ fail
→ để tìm pattern gây flaky.