יומן ביצועים

ב-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);

כשהוא מופעל, יומן הביצועים אוסף אירועים של ציר זמן, אירועים של רשתות ושל דפים. כדי להפעיל גם את המעקב או להתאים אישית את הרישום של נתוני הביצועים, המשיכו לקרוא.

דוגמה מלאה של רישום ביצועים עם אפשרויות ברירת מחדל (קרדיט: מיכאל קלפיקוב).

גם ב-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 לצורך מעקב אחר אירועים בזיכרון עד שהמעקב יופסק.

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

ערך ה-method הוא השיטה של אירוע כלי הפיתוח. לדוגמה, האירועים בציר הזמן כוללים את השיטה Timeline.eventRecorded לכל הגרסאות של הפרוטוקול, כולל עד גרסה 1.1 (העדכנית ביותר נכון לאותו זמן).

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

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

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

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

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