Tập 2: của Vasilii tại Munich (tháng 5 năm 2019)
Các tập trước
Kiểm thử không ổn định là sự cố thường gặp trong Chrome. Chúng ảnh hưởng đến năng suất của các nhà phát triển khác và bị vô hiệu hoá theo thời gian. Kiểm thử bị tắt có nghĩa là giảm phạm vi kiểm thử.
Giai đoạn phân loại
CHỦ SỞ HỮU của các thư mục chịu trách nhiệm sửa lỗi kiểm thử không ổn định. Nếu bạn nhận được thông báo lỗi về kiểm thử không ổn định, hãy dành vài phút và nhận xét về lỗi trên lỗi. Nếu bạn có mã kiểm thử mã không ổn định cũ và không rõ đã xảy ra sự cố gì, hãy thử bật lại kiểm thử. Giao lại lỗi càng sớm càng tốt nếu đó rõ ràng là vấn đề trong một thành phần khác. Chủ sở hữu của thành phần đó cần có đánh giá tốt hơn về lỗi,
Giai đoạn gỡ lỗi
Một số cờ dòng lệnh hữu ích để
sửa lỗi kiểm thử không ổn định. Ví dụ: --enable-pixel-output-in-tests
sẽ hiển thị giao diện người dùng trên thực tế của trình duyệt.
Có công cụ dự phòng nếu trình gỡ lỗi biến mất. Bây giờ
vì với trình gỡ lỗi, quy trình kiểm thử sẽ không bao giờ có kết quả không ổn định. Trong trường hợp đó, hãy ghi nhật ký
hoặc base::debug::StackTrace
.
Hãy lưu ý những lý do phổ biến dẫn đến lỗi EXPECT__*
ngoài các lỗi trong bản phát hành công khai
mã:
- Kỳ vọng không chính xác (ví dụ: trang bảo mật có nghĩa là HTTPS; thay vào đó, nó có thể là một máy chủ cục bộ).
- Điều kiện tranh đấu do các lượt kiểm thử không chờ sự kiện thích hợp.
[Đừng kiểm tra hoạt động triển khai][không triển khai] nhưng là hành vi.
// It takes 2 round trips between the UI and the background thread to complete.
SyncWithTheStore();
SyncWithTheStore();
CheckTheStore();
Hai chuyến khứ hồi có thể thay đổi thành ba chuyến trong tương lai, làm cho thử nghiệm không ổn định. Tuy nhiên, chỉ có trạng thái cửa hàng là có liên quan. Thay vào đó, hãy sử dụng trình quan sát cho của bạn.
Hãy cảnh giác với những mẫu hình phổ biến như sau:
Submit TestPasswordForm(); // Wait until things settle down. RunLoop().RunUntilIdle(); CheckCredentialPromptVisible();
Đoạn mã như trên trong một lần kiểm tra trình duyệt gần như chắc chắn là không chính xác. Có nhiều sự kiện sẽ xảy ra trong các quy trình khác nhau và trước khi một số giao diện người dùng xuất hiện.
Sau đây là cách khắc phục chính xác:
SubmitTestPasswordForm(); WaitUntilCredentialPromptVisible();
Cách khắc phục ở trên là đúng nếu giả định rằng
WaitUntilCredentialPromptVisible()
không thực sự kiểm tra giao diện người dùng.
Quá trình kiểm thử trình duyệt không nên phụ thuộc vào các sự kiện giao diện người dùng bên ngoài như "Mất tiêu điểm"
hoặc "cửa sổ trở thành nền trước". Hãy tưởng tượng một cách triển khai trong đó lời nhắc
chỉ xuất hiện khi cửa sổ trình duyệt đang hoạt động. Cách triển khai
sẽ đúng; tuy nhiên, việc kiểm tra cửa sổ thực tế khiến kiểm thử không ổn định.
Giai đoạn sau khi khắc phục
Sau khi chương trình kiểm thử được khắc phục, hãy chạy kiểm thử cục bộ hàng trăm lần. Chú ý đến Cổng thông tin về độ dẻo.