परफ़ॉर्मेंस लॉग

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 का भी इस्तेमाल किया जा सकता है. उदाहरण के लिए, ट्रेस करते समय आप नेटवर्क डोमेन को साफ़ तौर पर चालू कर सकते हैं:

...

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

...

अगर ट्रेस करने की सुविधा चालू है, तो Chrome लॉन्च होने के बाद ChromeDriver, पूरे ब्राउज़र पर ट्रेस शुरू करता है. साथ ही, 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 इवेंट का तरीका है. उदाहरण के लिए, टाइमलाइन इवेंट में वर्शन 1.1 (इसे लिखे जाने के समय का सबसे नया वर्शन) तक के प्रोटोकॉल के सभी वर्शन के लिए, Timeline.eventRecorded का तरीका होता है.

लॉग एंट्री ट्रेस करें

ट्रेसिंग, वर्शन 1.1 में पब्लिश किए गए DevTools प्रोटोकॉल का हिस्सा नहीं है. इसलिए, जानकारी यहां दी गई है.

सभी ट्रेस इवेंट की वेबव्यू वैल्यू "ब्राउज़र" की होती है, क्योंकि इवेंट को पूरे ब्राउज़र में इकट्ठा किया जाता है.

ट्रेस इवेंट के दो तरीके हो सकते हैं:

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