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 } } }