ChromeDriver hỗ trợ tính năng ghi nhật ký hiệu suất, từ đó bạn có thể nhận được các sự kiện của các miền "Tiến trình", "Mạng" và "Trang", cũng như dữ liệu theo dõi cho các danh mục theo dõi đã chỉ định.
Bật nhật ký hiệu suất
Theo mặc định, tính năng ghi nhật ký hiệu suất KHÔNG được bật. 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 Trang, Mạng và Tiến trình. Để 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 bằng các tuỳ chọn mặc định do Michael Klepikov viết.
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, chẳng hạn như để bật tính năng theo dõi, bạn có thể sử dụng chức 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 theo dõi của Chrome. Đọc thêm thông tin về tính năng theo dõi trên Chrome.
Khi bạn bật tính năng theo dõi, miền Dòng thời gian sẽ bị tắt ngầm. Bạn vẫn cần bật nhật ký hiệu suất bằng chức 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 từng miền Trang và Mạng. 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 bạn bật tính năng theo dõi, ChromeDriver sẽ bắt đầu theo dõi trên toàn trình duyệt khi Chrome 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 các sự kiện theo dõi vào bộ nhớ đệm cho đến khi dấu vết đó dừng.
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 tình trạng bộ đệm đầy (và do đó mất dữ liệu theo dõi), ChromeDriver định kỳ dừng dấu vết hiện tại, thu thập các sự kiện được lưu vào bộ đệm và bắt đầu lại quá trình theo dõi tại một số điểm nhất định trong quá trình kiểm thử.
Việc thu thập sự kiện theo dõi có thể làm tăng mức hao tổn cho một kiểm thử, vì vậy, ChromeDriver chỉ thu thập sự kiện theo dõi tại các điểm thích hợp trong quá trình kiểm thử. 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.
Vùng đệm luôn có khả năng bị đầy, vì vậy, ChromeDriver giám sát mức sử dụng vùng đệm cho các phiên bản Chrome được hỗ trợ (r263512 trở lên). Nếu vùng đệm đầy, ChromeDriver sẽ ghi lại một 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ác mục nhập nhật ký hiệu suất. Hãy đọc tài liệu về tính năng 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 là một chuỗi JSON có cấu trúc như 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ụ: các sự kiện Dòng thời gian có phương thức Timeline.eventRecorded
cho tất cả phiên bản giao thức, bao gồm cả phiên bản 1.1 (phiên bản mới nhất tại thời điểm viết bài này).
Mục nhập nhật ký theo dõi
Tính năng theo dõi không có trong giao thức DevTools đã phát hành kể từ phiên bản 1.1, vì vậy, chúng tôi cung cấp thông tin chi tiết tại đây.
Tất 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ó hai phương thức sự kiện theo dõi có thể xảy ra:
tracing.dataCollected
: tham số là một sự kiện theo dõi duy nhất ở dạng từ điển.tracing.bufferUsage
: params chứa một khoá lỗi duy nhất, với thông báo cho biết vùng đệm theo dõi DevTools đã được lấp đầy trong quá trình kiểm thử.
Dưới đây là ví dụ về một 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
}
}
}