Thử nghiệm toàn diện cho Tiện ích của Chrome

Hoạt động kiểm thử toàn diện bao gồm việc xây dựng và tải gói tiện ích vào một trình duyệt. Công cụ kiểm thử sẽ giao tiếp với trình duyệt để tự động hoá các hoạt động tương tác và kiểm thử các quy trình mà người dùng sẽ trải qua. Thư viện hỗ trợ kiểm thử toàn diện thường sẽ cung cấp các cách kiểm soát trình duyệt, mô phỏng hoạt động đầu vào của người dùng và quan sát trạng thái hiện tại của trang đang mở.

Hãy xem bài viết Kiểm thử tiện ích của Chrome bằng Puppeteer để xem hướng dẫn và bài viết Kiểm thử đơn vị để biết thông tin chi tiết về cách viết mã kiểm thử đơn vị cho tiện ích của Chrome.

Sử dụng thư viện kiểm thử trình duyệt

Các tiện ích được hỗ trợ bởi nhiều thư viện kiểm thử.

Thư viện Hướng dẫn
Nghệ sĩ múa rối / Nhà soạn kịch Xem Tiện ích của Chrome (Puppeteer / Playwright).
Selen Sử dụng đối tượng ChromeOptions để tải các tiện ích. Bạn có thể xem thêm thông tin tại đây.
WebDriverIO Hãy xem bài viết Kiểm thử phần mở rộng web.

Chạy kiểm thử trong Chrome không có giao diện người dùng

Khi chạy kiểm thử trong một quy trình tự động, thông thường, bạn cần phải tải tiện ích trên một máy không có màn hình. Chế độ không có giao diện người dùng mới của Chrome cho phép Chrome chạy trong môi trường không được giám sát như thế này. Khởi động Chrome bằng cách sử dụng cờ --headless=new (không có giao diện người dùng hiện được đặt mặc định là "cũ" và không hỗ trợ tải tiện ích). Tuỳ thuộc vào công cụ tự động hoá mà bạn chọn, có thể có một chế độ cài đặt tự động thêm cờ cho bạn.

Đặt mã tiện ích

Thường thì bạn nên có một mã tiện ích cố định trong các kiểm thử. Điều này giúp nhiều tác vụ phổ biến trở nên dễ dàng hơn, chẳng hạn như cho phép liệt kê nguồn gốc của tiện ích trên một máy chủ mà tiện ích cần giao tiếp hoặc mở trang tiện ích trong quá trình kiểm thử. Để làm việc này, hãy làm theo các bước trong phần Giữ mã tiện ích nhất quán.

Thử nghiệm các trang tiện ích

Bạn có thể truy cập các trang tiện ích bằng URL tương ứng, ví dụ: chrome-extension://<id>/index.html. Hãy sử dụng các phương thức điều hướng thông thường có trong công cụ tự động hoá mà bạn chọn để điều hướng đến những URL này.

Kiểm thử cửa sổ bật lên của tiện ích

Hiện tại, bạn không thể mở cửa sổ bật lên của tiện ích trong bối cảnh một trang khác. Thay vào đó, hãy mở URL của cửa sổ bật lên trong một thẻ mới. Nếu cửa sổ bật lên sử dụng thẻ đang hoạt động, hãy cân nhắc triển khai cơ chế ghi đè, trong đó mã thẻ có thể được chuyển rõ ràng đến cửa sổ bật lên. Ví dụ:

const URL_PARAMS  = new URLSearchParams(window.location.search);

async function getActiveTab() {
  // Open popup.html?tab=5 to use tab ID 5, etc.
  if (URL_PARAMS.has("tab")) {
    return parseInt(URL_PARAMS.get("tab"));
  }

  const tabs = await chrome.tabs.query({
    active: true,
    currentWindow: true
  });

  return tabs[0];
}

Kiểm tra trạng thái của tiện ích

Để tránh các lần thất bại trong kiểm thử khi bạn thay đổi hành vi nội bộ của tiện ích, nhìn chung, cách tốt nhất là tránh truy cập vào trạng thái nội bộ trong kiểm thử tích hợp. Thay vào đó, bạn nên kiểm thử dựa trên những gì người dùng nhìn thấy. Tuy nhiên, đôi khi bạn nên truy cập trực tiếp vào dữ liệu qua tiện ích. Trong những trường hợp này, hãy cân nhắc thực thi mã trong ngữ cảnh của trang tiện ích.

Trong Puppeteer:

const workerTarget = await browser.waitForTarget(
  target => target.type() === 'service_worker'
);
const worker = await workerTarget.worker();

const value = await worker.evaluate(() => {
  chrome.storage.local.get('foo');
});

Trong Selen:

// Selenium doesn't allow us to access the service worker, so we need to open an extension page where we can execute the code
await driver.get('chrome-extension://<id>/popup.html');
await driver.executeAsyncScript(
  'const callback = arguments[arguments.length - 1];' +
  'chrome.storage.local.get(\'foo\').then(callback);'
);

Kiểm thử chấm dứt trình chạy dịch vụ

Để tìm hiểu về cách kiểm thử quá trình chấm dứt trình chạy dịch vụ, hãy xem bài viết chấm dứt kiểm thử của trình chạy dịch vụ bằng Puppeteer. Chúng tôi cũng có một mẫu cho Puppeteer và Selenium.

Lưu ý rằng khi sử dụng một số khung kiểm thử, trình chạy dịch vụ có thể không tự động chấm dứt như trong quá trình sử dụng thông thường. Đây là trường hợp trong Selenium. Chính sách này dựa trên ChromeDriver. Trình gỡ lỗi này đính kèm trình gỡ lỗi vào tất cả trình chạy dịch vụ giúp ngăn chặn việc chúng bị dừng.