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