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

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

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

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

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

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

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