บันทึกประสิทธิภาพ

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