יומן ביצועים

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. מידע נוסף על מעקב ב-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 כדי להפעיל או להשבית את הדומיינים של הרשת והדף בנפרד. לדוגמה, אפשר להפעיל באופן מפורש את הדומיין Network במהלך המעקב:

...

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 מאחסן בזיכרון את אירועי המעקב במטמון עד שהמעקב נעצר.

אחרי שמאגר המעקב מתמלא, אירועי המעקב לא מתועדים יותר. כדי למנוע מצב שבו מאגר הזיכרון המצטבר (buffer) יהיה מלא (וכתוצאה מכך נתוני המעקב ייאבדו), 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 (הגרסה העדכנית ביותר בזמן כתיבת המאמר הזה).

רשומות ביומן המעקב

מעקב (tracing) לא נכלל בפרוטוקול שפורסם של DevTools החל מגרסה 1.1, ולכן כאן מופיעים פרטים נוספים.

לכל אירועי המעקב יש ערך webview של 'browser', כי האירועים נאספים ברמת הדפדפן.

יש שתי שיטות אפשריות לאירועי מעקב:

  • tracing.dataCollected: ה-params הם אירוע מעקב יחיד בצורת מילון.
  • 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
    }
  }
}