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

Tập 2: của Vasilii ở Munich (tháng 5 năm 2019)
Các tập trước

Kiểm thử không ổn định là một vấn đề 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. Số lượt kiểm thử bị tắt có nghĩa là phạm vi kiểm thử bị giảm dần.

Giai đoạn phân loại

CHỦ SỞ HỮU các thư mục chịu trách nhiệm khắc phục các bài kiểm thử không ổn định. Nếu bạn gặp lỗi liên quan đến quy trình kiểm thử không ổn định, hãy dành vài phút và nhận xét về lỗi đó. Nếu bạn có một kiểm thử không ổn định cũ và không rõ điều gì đã xảy ra, hãy thử bật lại kiểm thử đó. Chỉ định lại lỗi càng sớm càng tốt nếu đó rõ ràng là sự cố trong một thành phần khác. Chủ sở hữu của thành phần đó nên đánh giá rõ ràng hơn về lỗi,

Giai đoạn gỡ lỗi

Một số cờ dòng lệnh rất hữu ích để khắc phục các 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 thực tế của trình duyệt.

Có công cụ dự phòng nếu trình gỡ lỗi làm cho tình trạng không ổn định biến mất. Trong trình gỡ lỗi, có thể chương trình kiểm thử không bao giờ không ổn định. Trong trường hợp đó, câu lệnh nhật ký hoặc base::debug::StackTrace có thể hữu ích.

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 mã phát hành chính thức:

  • Kỳ vọng không chính xác (ví dụ: trang bảo mật có nghĩa là HTTPS; đó có thể là một máy chủ cục bộ).
  • Điều kiện tranh đấu do các bài kiểm thử không chờ sự kiện thích hợp.

[Đừng kiểm thử việc triển khai][không phải phương thức triển khai] mà là kiểm thử hành vi.

// It takes 2 round trips between the UI and the background thread to complete.
SyncWithTheStore();
SyncWithTheStore();
CheckTheStore();

Hai lượt trọn vòng có thể thay đổi thành 3 trong tương lai, khiến bài kiểm thử không ổn định. Tuy nhiên, chỉ có trạng thái cửa hàng là phù hợp. Thay vào đó, hãy sử dụng đối tượng tiếp nhận dữ liệu cho cửa hàng.

Không nên

Hãy lưu ý đến các mẫu hình phổ biến, chẳng hạn như:

Submit TestPasswordForm();
// Wait until things settle down.
RunLoop().RunUntilIdle();
CheckCredentialPromptVisible();

Đoạn mã như trên trong một thử nghiệm 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 nhiều quy trình và luồng 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();

Bản sửa lỗi ở trên là chính xác vì giả định rằng WaitUntilCredentialPromptVisible() không thực sự kiểm tra giao diện người dùng. Các bài 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ư "bị 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 mà 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 như vậy là chính xác; tuy nhiên, việc kiểm tra cửa sổ thực tế sẽ làm cho kiểm thử không ổn định.

Giai đoạn sau khi khắc phục

Sau khi khắc phục xong quy trình kiểm thử, hãy chạy chương trình kiểm thử hàng trăm lần trên máy. Hãy theo dõi Cổng thông tin về sự linh hoạt.