Chromium Chronicle #2: Kiểm tra tính dễ bị tổn thương

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.

Không nên

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.

Không nê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.

Nê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.