Nhật ký hiệu suất

ChromeDriver hỗ trợ tính năng ghi nhật ký hiệu suất, từ đó bạn có thể nhận các sự kiện của miền "Dòng thời gian", "Mạng" và "Trang", cũng như dữ liệu theo dõi cho các danh mục theo dõi được chỉ định.

Bật nhật ký hiệu suất

Tính năng ghi nhật ký hiệu suất KHÔNG được bật theo mặc định. Vì vậy, khi tạo một phiên mới, bạn phải bật phiên đó.

DesiredCapabilities cap = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), cap);

Khi được bật, nhật ký hiệu suất sẽ thu thập các sự kiện Dòng thời gian, Mạng và Trang. Để bật tính năng theo dõi hoặc tuỳ chỉnh tính năng ghi nhật ký hiệu suất, hãy tiếp tục đọc.

Xem ví dụ đầy đủ về việc ghi nhật ký hiệu suất với các tuỳ chọn mặc định (ghi nhận: Michael Klepikov).

Angular Benchpress cũng sử dụng tính năng ghi nhật ký hiệu suất.

Theo dõi và ghi nhật ký tuỳ chỉnh

Nếu cần tuỳ chỉnh tính năng ghi nhật ký hiệu suất, để bật tính năng theo dõi, bạn có thể sử dụng tính năng perfLoggingPrefs (thông qua ChromeOptions). Bạn có thể bật tính năng theo dõi bằng cách chỉ định một hoặc nhiều danh mục dấu vết của Chrome. Đọc thêm thông tin về tính năng theo dõi trên Chrome.

Khi tính năng theo dõi đang bật, miền Dòng thời gian sẽ hoàn toàn bị tắt. Bạn vẫn cần bật nhật ký hiệu suất bằng tính năng loggingPrefs.

DesiredCapabilities cap = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools"); // comma-separated trace categories
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), cap);

Bạn cũng có thể sử dụng perfLoggingPrefs để bật hoặc tắt riêng từng Miền mạng và Miền trang. Ví dụ: bạn có thể bật Miền mạng một cách rõ ràng trong khi theo dõi:

...

Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools");
perfLogPrefs.put("enableNetwork", true);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);

...

Nếu tính năng theo dõi được bật, ChromeDriver sẽ bắt đầu theo dõi trên toàn trình duyệt khi Chrome được khởi chạy và tiếp tục theo dõi cho đến khi Chrome đóng. Khi một dấu vết đang chạy, Chrome sẽ lưu vào vùng đệm các sự kiện theo dõi trong bộ nhớ cho đến khi dấu vết dừng lại.

Khi vùng đệm theo dõi đã đầy, các sự kiện theo dõi sẽ không còn được ghi lại. Để tránh vùng đệm đầy (và do đó làm mất dữ liệu theo dõi), ChromeDriver sẽ định kỳ dừng hoạt động theo dõi hiện tại, thu thập các sự kiện được lưu vào vùng đệm và bắt đầu theo dõi lại tại một số điểm nhất định trong quá trình kiểm thử.

Việc thu thập các sự kiện theo dõi có thể làm tăng chi phí kiểm thử. Vì vậy, ChromeDriver chỉ thu thập các sự kiện theo dõi tại các thời điểm thích hợp trong quá trình kiểm thử. Hiện tại, các sự kiện theo dõi chỉ được thu thập trên các sự kiện điều hướng trang và khi bất kỳ nhật ký ChromeDriver nào (chẳng hạn như nhật ký hiệu suất) được yêu cầu. Luôn có khả năng bộ đệm vẫn đầy, vì vậy, ChromeDriver sẽ theo dõi mức sử dụng bộ đệm đối với các phiên bản Chrome được hỗ trợ (r263512 trở lên). Nếu vùng đệm lấp đầy, ChromeDriver sẽ ghi lại cảnh báo và thêm một mục vào nhật ký hiệu suất.

Thu thập mục nhập nhật ký

Trong quá trình kiểm thử, bạn có thể nhận các mục nhập nhật ký hiệu suất. Hãy đọc tài liệu ghi nhật ký WebDriver để biết thêm thông tin.

for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
  System.out.println(entry.toString());
}

Mỗi mục nhập là một chuỗi JSON có cấu trúc sau:

{
  "webview": <originating WebView ID>,
  "message": { "method": "...", "params": { ... }} // DevTools message.
}

Giá trị phương thức là phương thức của sự kiện DevTools. Ví dụ: sự kiện Dòng thời gian có một phương thức Timeline.eventRecorded cho tất cả các phiên bản của giao thức cho tới phiên bản 1.1 (phiên bản mới nhất tại thời điểm viết giao thức này).

Mục nhập nhật ký theo dõi

Hoạt động theo dõi không phải là một phần của giao thức Công cụ cho nhà phát triển đã phát hành kể từ phiên bản 1.1, vì vậy, thông tin chi tiết được cung cấp tại đây.

Tất cả các sự kiện theo dõi đều có giá trị WebView là "trình duyệt", vì các sự kiện này được thu thập trên toàn trình duyệt.

Có 2 phương thức sự kiện theo dõi:

  • tracing.dataCollected: tham số là một sự kiện theo dõi đơn lẻ có dạng từ điển.
  • tracing.bufferUsage: các tham số chứa một khoá lỗi duy nhất, kèm theo thông báo cho biết rằng vùng đệm theo dõi Công cụ cho nhà phát triển đã được điền trong quá trình kiểm thử.

Dưới đây là một ví dụ về sự kiện theo dõi:

{
    "webview":"browser",
    "message":{
        "method":"Tracing.dataCollected",
        "params":{
            "args":{"layerTreeId":1},
            "cat":"cc,devtools",
            "name":"DrawFrame",
            "ph":"i",
            "pid":11405,
            "s":"t",
            "tid":11405,
            "ts":3846117219.0,
            "tts":1134680
        }
    }
}