Journal des performances

ChromeDriver est compatible avec la journalisation des performances, à partir de laquelle vous pouvez obtenir des événements des domaines "Chronologie", "Réseau" et "Page", ainsi que des données de trace pour les catégories de trace spécifiées.

Activer les journaux de performances

La journalisation des performances n'est PAS activée par défaut. Par conséquent, lorsque vous créez une session, vous devez l'activer.

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

Lorsqu'il est activé, le journal des performances collecte les événements de chronologie, de réseau et de page. Pour activer également le traçage ou pour personnaliser la journalisation des performances, poursuivez votre lecture.

Consultez un exemple complet de journalisation des performances avec les options par défaut, écrit par Michael Klepikov.

Angular Benchpress utilise également la journalisation des performances.

Traçage et journalisation personnalisée

Si vous devez personnaliser la journalisation des performances, par exemple pour activer le traçage, vous pouvez utiliser la capacité perfLoggingPrefs (via ChromeOptions). Vous pouvez activer le traçage en spécifiant une ou plusieurs catégories de trace Chrome. En savoir plus sur le suivi Chrome

Lorsque le traçage est activé, le domaine "Vos trajets" est implicitement désactivé. Vous devez toujours activer le journal des performances avec la fonctionnalité 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);

Vous pouvez également utiliser perfLoggingPrefs pour activer ou désactiver les domaines de réseau et de page individuellement. Par exemple, vous pouvez activer explicitement le domaine réseau lors du traçage:

...

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

...

Si le traçage est activé, ChromeDriver démarre une trace à l'échelle du navigateur lorsque Chrome est lancé et continue de la suivre jusqu'à ce que Chrome se ferme. Lorsqu'une trace est en cours d'exécution, Chrome met en mémoire tampon les événements de trace jusqu'à ce qu'elle soit arrêtée.

Une fois le tampon de suivi rempli, les événements de suivi ne sont plus enregistrés. Pour éviter que le tampon soit saturé (et donc que les données de suivi soient perdues), ChromeDriver arrête périodiquement la trace en cours, collecte les événements mis en mémoire tampon et redémarre le suivi à certains moments pendant un test.

La collecte d'événements de trace peut ajouter des frais généraux à un test. ChromeDriver ne collecte donc les événements de trace qu'aux points appropriés pendant un test. Les événements de trace ne sont collectés que sur les événements de navigation sur les pages et lorsqu'un journal ChromeDriver (tel que le journal des performances) est demandé.

Il est toujours possible que le tampon se remplisse. ChromeDriver surveille donc l'utilisation du tampon pour les versions Chrome compatibles (r263512 et versions ultérieures). Si la mémoire tampon se remplit, ChromeDriver consigne un avertissement et ajoute une entrée au journal des performances.

Collecter les entrées de journal

Dans le test, vous pouvez obtenir des entrées de journal de performances. Pour en savoir plus, consultez la documentation sur la journalisation WebDriver.

for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
  System.out.println(entry.toString());
}

Chaque entrée est une chaîne JSON de la structure suivante:

{
  "webview": <originating WebView ID>,
  "message": { "method": "...", "params": { ... }} // DevTools message.
}

La valeur de la méthode correspond à la méthode de l'événement DevTools. Par exemple, les événements de la chronologie ont une méthode Timeline.eventRecorded pour toutes les versions du protocole jusqu'à la version 1.1 (la plus récente au moment de la rédaction de cet article).

Entrées de journal de trace

Le traçage ne fait pas partie du protocole DevTools publié à partir de la version 1.1. Des informations sont donc fournies ici.

La valeur de la WebView pour tous les événements de trace est "navigateur", car les événements sont collectés à l'échelle du navigateur.

Il existe deux méthodes d'événement de trace possibles:

  • tracing.dataCollected: les paramètres sont un événement de trace unique sous la forme d'un dictionnaire.
  • tracing.bufferUsage: les paramètres contiennent une seule clé d'erreur, avec un message indiquant que le tampon de suivi DevTools s'est rempli pendant le test.

Voici un exemple d'événement de suivi:

{
  "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
    }
  }
}