ChromeDriver รองรับการบันทึกประสิทธิภาพ ซึ่งคุณสามารถรับเหตุการณ์ของโดเมน "ไทม์ไลน์" "เครือข่าย" และ "หน้าเว็บ" รวมถึงข้อมูลการติดตามสำหรับหมวดหมู่การติดตามที่ระบุ
เปิดใช้บันทึกประสิทธิภาพ
การบันทึกประสิทธิภาพไม่ได้เปิดใช้งานโดยค่าเริ่มต้น ดังนั้น เมื่อสร้างเซสชันใหม่ คุณต้องเปิดใช้ด้วย
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);
เมื่อเปิดใช้ บันทึกประสิทธิภาพจะรวบรวมเหตุการณ์ของไทม์ไลน์ เครือข่าย และหน้าเว็บ โปรดอ่านต่อไปหากต้องการเปิดใช้การติดตามหรือปรับแต่งการบันทึกประสิทธิภาพด้วย
ดูตัวอย่างทั้งหมดของการบันทึกประสิทธิภาพด้วยตัวเลือกเริ่มต้น (เครดิต: Michael Klepikov)
นอกจากนี้ Angular Benchpress ยังใช้การบันทึกประสิทธิภาพอีกด้วย
การติดตามและการบันทึกแบบกำหนดเอง
เช่น หากต้องการปรับแต่งการบันทึกประสิทธิภาพ เพื่อเปิดใช้การติดตาม คุณใช้ความสามารถ PerfLrunningPrefs (ผ่าน ChromeOptions) ได้ เปิดใช้การติดตามได้โดยระบุหมวดหมู่การติดตามของ Chrome อย่างน้อย 1 หมวดหมู่ อ่านข้อมูลเพิ่มเติมเกี่ยวกับการติดตาม Chrome
เมื่อเปิดใช้การติดตาม โดเมนไทม์ไลน์จะปิดใช้โดยนัย คุณยังคงต้องเปิดใช้บันทึกประสิทธิภาพด้วยความสามารถ 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);
คุณยังใช้ perfLoggingPrefs
เพื่อเปิดหรือปิดใช้โดเมนเครือข่ายและหน้าเว็บทีละรายการได้ด้วย เช่น คุณเปิดใช้โดเมนเครือข่ายอย่างชัดเจน
ขณะติดตามได้ดังนี้
...
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);
...
หากเปิดใช้การติดตามอยู่ ChromeDriver จะเริ่มการติดตามทั้งเบราว์เซอร์เมื่อ Chrome เปิดขึ้น และจะทำการติดตามต่อจนกระทั่ง Chrome ปิดลง เมื่อการติดตามทำงานอยู่ Chrome จะบัฟเฟอร์เหตุการณ์การติดตามในหน่วยความจำจนกว่าการติดตามจะหยุด
เมื่อบัฟเฟอร์การติดตามเต็มแล้ว ระบบจะไม่บันทึกเหตุการณ์การติดตามอีกต่อไป เพื่อหลีกเลี่ยงบัฟเฟอร์ทั้งหมด (และทำให้ข้อมูลการติดตามสูญหาย) ChromeDriver จะหยุดการติดตามปัจจุบันเป็นระยะๆ รวบรวมเหตุการณ์ที่บัฟเฟอร์ และเริ่มการติดตามอีกครั้งในบางจุดระหว่างการทดสอบ
การรวบรวมเหตุการณ์การติดตามอาจเพิ่มโอเวอร์เฮดในการทดสอบ ดังนั้น ChromeDriver จึงรวบรวมเหตุการณ์การติดตามในจุดที่เหมาะสมระหว่างการทดสอบเท่านั้น ปัจจุบันระบบจะรวบรวมเหตุการณ์การติดตามเฉพาะในเหตุการณ์การนำทางหน้าเว็บและเมื่อมีการขอบันทึกของไดรฟ์ Chrome (เช่น บันทึกประสิทธิภาพ) เท่านั้น เป็นไปได้ว่าบัฟเฟอร์ยังคงเต็มอยู่ ดังนั้น ChromeDriver จึงตรวจสอบการใช้บัฟเฟอร์สำหรับ Chrome เวอร์ชันที่รองรับ (r263512 ขึ้นไป) หากบัฟเฟอร์เต็ม ChromeDriver จะบันทึกคำเตือนและเพิ่มรายการลงในบันทึกประสิทธิภาพ
กำลังรวบรวมรายการบันทึก
ในการทดสอบ คุณจะได้รับรายการบันทึกประสิทธิภาพ อ่านข้อมูลเพิ่มเติมได้ในเอกสารการบันทึก WebDriver
for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
System.out.println(entry.toString());
}
แต่ละรายการจะเป็นสตริง JSON ของโครงสร้างต่อไปนี้
{
"webview": <originating WebView ID>,
"message": { "method": "...", "params": { ... }} // DevTools message.
}
ค่าของเมธอดคือเมธอดของเหตุการณ์สำหรับนักพัฒนาเว็บ
เช่น เหตุการณ์ในไทม์ไลน์มีเมธอด Timeline.eventRecorded
สำหรับโปรโตคอลทุกเวอร์ชันจนถึงเวอร์ชัน 1.1 (ซึ่งเป็นเวอร์ชันล่าสุด ณ เวลาที่เขียนไว้)
รายการบันทึกการติดตาม
Tracing ไม่ได้เป็นส่วนหนึ่งของโปรโตคอล DevTools ที่นำไปใช้จริงตั้งแต่เวอร์ชัน 1.1 เป็นต้นไป เราจึงระบุรายละเอียดไว้ที่นี่
เหตุการณ์การติดตามทั้งหมดมีค่า WebView เป็น "เบราว์เซอร์" เนื่องจากระบบจะรวบรวมเหตุการณ์ระดับเบราว์เซอร์
วิธีเหตุการณ์การติดตามที่เป็นไปได้มี 2 วิธีดังนี้
- tracing.dataCollected: พารามิเตอร์คือเหตุการณ์การติดตามเดียวในรูปแบบของพจนานุกรม
- tracing.bufferUsage: พารามิเตอร์มีคีย์ข้อผิดพลาดรายการเดียว โดยมีข้อความระบุว่ามีการเติมบัฟเฟอร์การติดตามสำหรับ DevTools ไว้ระหว่างการทดสอบ
ตัวอย่างเหตุการณ์การติดตามมีดังนี้
{
"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
}
}
}