パフォーマンス ログ

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 経由)。トレースを有効にするには、1 つ以上の 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);

...

トレースが有効になっている場合、ChromeDriver は Chrome の実行時にブラウザ全体のトレースを開始します 起動され、Chrome を閉じるまでトレースが続行されます。トレースが破棄されると トレースを停止するまで、Chrome はトレース イベントをメモリにバッファします。

トレース バッファがいっぱいになると、トレース イベントは記録されなくなります。避けるべきこと バッファがいっぱいになった(トレースデータが失われた)場合、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 以前のプロトコル(その時点で最新の 表示されます)。

トレース ログエントリ

バージョン 1.1 では、トレースは公開された DevTools プロトコルの一部でないため、 ご覧ください。

すべてのトレース イベントの WebView の値は「browser」、イベントは 収集されます。

次の 2 つのトレース イベント メソッドを使用できます。

  • tracing.dataCollected: パラメータは、辞書形式の単一のトレース イベントです。
  • tracing.bufferUsage: パラメータには、1 つのエラーキーと、テスト中に 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
        }
    }
}