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 ใช้การบันทึกประสิทธิภาพด้วย
การติดตามและการบันทึกที่กําหนดเอง
หากต้องการปรับแต่งการบันทึกประสิทธิภาพเพื่อเปิดใช้การติดตาม คุณสามารถความสามารถของ perfLoggingPrefs (ผ่าน 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 จะรวบรวมเหตุการณ์การติดตามเฉพาะในช่วงเวลาที่เหมาะสมระหว่างการทดสอบ ระบบจะรวบรวมเหตุการณ์การติดตามเฉพาะในเหตุการณ์การไปยังส่วนต่างๆ ในหน้าเว็บและเมื่อมีการขอบันทึก ChromeDriver (เช่น บันทึกประสิทธิภาพ)
บัฟเฟอร์อาจเต็มอยู่เสมอ 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.
}
ค่าเมธอดคือเมธอดของเหตุการณ์ DevTools
ตัวอย่างเช่น เหตุการณ์ไทม์ไลน์มีเมธอด Timeline.eventRecorded
สำหรับโปรโตคอลทุกเวอร์ชันจนถึงเวอร์ชัน 1.1 (เวอร์ชันล่าสุด ณ เวลาที่เขียนบทความนี้)
รายการบันทึกการติดตาม
การติดตามไม่ได้อยู่ในโปรโตคอล DevTools ที่เผยแพร่ตั้งแต่เวอร์ชัน 1.1 เป็นต้นไป เราจึงระบุรายละเอียดไว้ที่นี่
เหตุการณ์การติดตามทั้งหมดมีค่าเว็บวิวเป็น "เบราว์เซอร์" เนื่องจากมีการรวบรวมเหตุการณ์ในเบราว์เซอร์ทั้งหมด
วิธีการติดตามเหตุการณ์มี 2 วิธีดังนี้
tracing.dataCollected
: params คือเหตุการณ์การติดตามรายการเดียวในรูปแบบของพจนานุกรมtracing.bufferUsage
: params มีคีย์ข้อผิดพลาดรายการเดียวพร้อมข้อความที่ระบุว่าบัฟเฟอร์การติดตามของเครื่องมือสำหรับนักพัฒนาเว็บเต็มระหว่างการทดสอบ
ตัวอย่างเหตุการณ์การติดตามมีดังนี้
{
"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
}
}
}