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

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