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

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