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

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 ยังใช้การบันทึกประสิทธิภาพอีกด้วย

การติดตามและการบันทึกที่กำหนดเอง

เช่น หากต้องการปรับแต่งการบันทึกประสิทธิภาพ ในการเปิดใช้การติดตาม ก็สามารถใช้ความสามารถperfLakingPrefs (ผ่าน 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.
}

ค่าของเมธอดคือเมธอดของเหตุการณ์เครื่องมือสำหรับนักพัฒนาเว็บ เช่น เหตุการณ์ในไทม์ไลน์มีเมธอดเป็น Timeline.eventRecorded สําหรับทั้งหมด เวอร์ชันโปรโตคอลจนถึง และรวมเวอร์ชัน 1.1 (ล่าสุด ณ เวลานั้น นี้)

รายการบันทึกการติดตาม

การติดตามไม่ได้เป็นส่วนหนึ่งของโปรโตคอลเครื่องมือสำหรับนักพัฒนาเว็บที่เผยแพร่ในเวอร์ชัน 1.1 ดังนั้น ระบุไว้ที่นี่

เหตุการณ์การติดตามทั้งหมดมีค่า WebView เป็น "เบราว์เซอร์" เนื่องจากเหตุการณ์ ที่รวบรวมทั้งเบราว์เซอร์

วิธีเหตุการณ์การติดตามที่เป็นไปได้มี 2 วิธีดังนี้

  • tracing.dataCollected: พารามิเตอร์เป็นเหตุการณ์การติดตามรายการเดียวในรูปแบบพจนานุกรม
  • tracing.bufferUsage: พารามิเตอร์มีคีย์ข้อผิดพลาดเดียวพร้อมข้อความระบุว่ามีการเติมบัฟเฟอร์การติดตามของเครื่องมือสำหรับนักพัฒนาเว็บในระหว่างการทดสอบ

ตัวอย่างเหตุการณ์การติดตาม

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