ChromeDriver از گزارش عملکرد پشتیبانی میکند، که میتوانید رویدادهای دامنههای «Timeline»، «Network» و «Page» و همچنین دادههای ردیابی برای دستههای ردیابی مشخص را از آن دریافت کنید.
گزارش های عملکرد را فعال کنید
ثبت عملکرد به طور پیش فرض فعال نیست. بنابراین هنگام ایجاد یک جلسه جدید، باید آن را فعال کنید.
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);
وقتی فعال باشد، گزارش عملکرد رویدادهای Timeline، Network و Page را جمع آوری می کند. همچنین برای فعال کردن ردیابی، یا سفارشی کردن گزارش عملکرد، به خواندن ادامه دهید.
یک مثال کامل از ثبت عملکرد با گزینه های پیش فرض (اعتبار: Michael Klepikov) را مشاهده کنید.
Angular Benchpress همچنین از ثبت عملکرد استفاده می کند.
ردیابی و ثبت سفارشی
اگر نیاز به سفارشی کردن گزارش عملکرد دارید، برای مثال برای فعال کردن ردیابی، میتوانید از قابلیت perfLoggingPrefs (از طریق ChromeOptions) استفاده کنید. ردیابی را می توان با تعیین یک یا چند دسته ردیابی Chrome فعال کرد. اطلاعات بیشتر درباره ردیابی Chrome را بخوانید.
هنگامی که ردیابی فعال است، دامنه Timeline به طور ضمنی غیرفعال می شود. همچنان باید گزارش عملکرد را با قابلیت 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 و Page به صورت جداگانه استفاده کنید. به عنوان مثال، میتوانید به صراحت دامنه شبکه را در حین ردیابی فعال کنید:
...
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.
}
مقدار متد روش رویداد DevTools است. به عنوان مثال، رویدادهای Timeline دارای روش Timeline.eventRecorded
برای همه نسخههای پروتکل تا و از جمله نسخه 1.1 (جدیدترین نسخه در زمان نگارش آن) هستند.
ردیابی ورودی های گزارش
ردیابی بخشی از پروتکل DevTools منتشر شده در نسخه 1.1 نیست، بنابراین جزئیات در اینجا ارائه شده است.
همه رویدادهای ردیابی دارای مقدار مشاهده وب "مرورگر" هستند، زیرا رویدادها در سراسر مرورگر جمع آوری می شوند.
دو روش امکان ردیابی رویداد وجود دارد:
- 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
}
}
}