Journal des performances

ChromeDriver prend en charge l'enregistrement des performances, à partir duquel vous pouvez obtenir les événements les domaines "Timeline", "Network" et "Page", ainsi que 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. Lors de la création d'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);

Lorsque cette option est activée, le journal des performances collecte la chronologie, le réseau et les pages événements. Pour activer également le traçage ou personnaliser la journalisation des performances, en lecture seule.

Consultez un exemple complet de journalisation des performances avec les options par défaut (crédit: 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 fonctionnalité PerfLoggingPrefs (via ChromeOptions). Vous pouvez activer le traçage en spécifiant un ou plusieurs catégories de trace. En savoir plus sur Traçage Chrome :

Lorsque le traçage est activé, le domaine de Vos trajets est implicitement désactivé. Vous avez encore activer le journal des performances avec la capacité 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 le réseau et la page individuellement. Par exemple, vous pouvez explicitement activer le domaine réseau Pendant le 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 lance une trace au niveau du navigateur lorsque Chrome et continue le traçage jusqu'à la fermeture de Chrome. Lorsqu'une trace est en cours d'exécution, Chrome met en mémoire tampon les événements de trace en mémoire jusqu'à ce que la trace soit arrêtée.

Lorsque le tampon de trace est plein, les événements de trace ne sont plus enregistrés. Pour éviter d'un tampon complet (et donc des données de trace perdues), ChromeDriver arrête périodiquement trace actuelle, collecte les événements mis en mémoire tampon et redémarre le traçage à une certaine lors d'un test.

La collecte d'événements de trace peut augmenter la charge d'un test, de sorte que ChromeDriver uniquement collecte les événements de trace aux moments appropriés au cours d'un test. Actuellement, tracez les événements ne sont collectés que lors des événements de navigation sur les pages et lorsque des pilotes Chromer (le journal des performances, par exemple) est demandé. Il y a toujours une possibilité que le tampon se remplit. ChromeDriver surveille donc son utilisation versions de Chrome compatibles (r263512 et versions ultérieures). Si le tampon se remplit, ChromeDriver enregistre un avertissement et ajoute une entrée au journal des performances.

Collecter des entrées de journal

Dans le test, vous pouvez obtenir des entrées du journal des performances. Consultez les Documentation sur la journalisation WebDriver pour en savoir plus.

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

Chaque entrée est une chaîne JSON présentant 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 Vos trajets ont une méthode Timeline.eventRecorded pour tous versions du protocole jusqu'à la version 1.1 (incluse) (la plus récente à la date du de cette manière).

Entrées de journal Trace

Le traçage ne fait pas partie du protocole publié des outils de développement à partir de la version 1.1. Par conséquent, sont fournies ici.

Tous les événements de trace ont la valeur WebView de "browser". puisque les événements sont collectées à l'échelle du navigateur.

Deux méthodes d'événement de trace sont possibles:

  • tracing.dataCollected: les paramètres correspondent à 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 trace des outils de développement a été rempli pendant le test.

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

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