Registro de desempenho

O ChromeDriver oferece suporte ao registro de desempenho, em que você pode receber eventos dos domínios "Timeline", "Network" e "Page", bem como dados de rastreamento para categorias de rastreamento especificadas.

Ativar registros de desempenho

O registro de desempenho NÃO está ativado por padrão. Portanto, ao criar uma nova sessão, é necessário ativá-la.

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

Quando ativado, o registro de performance coleta eventos de linha do tempo, rede e página. Para ativar o rastreamento ou personalizar o registro de desempenho, continue lendo.

Confira um exemplo completo de geração de registros de desempenho com opções padrão, escrito por Michael Klepikov.

O Angular Benchpress também usa a geração de registros de desempenho.

Rastreamento e geração de registros personalizada

Se você precisar personalizar o registro de desempenho, para ativar o rastreamento, por exemplo, use o capability perfLoggingPrefs (via ChromeOptions). O rastreamento pode ser ativado especificando uma ou mais categorias de rastreamento do Chrome. Leia mais informações sobre o Rastreamento do Chrome.

Quando o rastreamento está ativado, o domínio da Linha do tempo é desativado implicitamente. Ainda é necessário ativar o registro de desempenho com o recurso 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); 

Também é possível usar perfLoggingPrefs para ativar ou desativar os domínios de rede e página individualmente. Por exemplo, é possível ativar explicitamente o domínio de rede durante o rastreamento:

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

Se o rastreamento estiver ativado, o ChromeDriver vai iniciar um rastreamento em todo o navegador quando o Chrome for iniciado e continuará rastreando até que o Chrome seja fechado. Quando um trace está em execução, o Chrome armazena em buffer os eventos de trace na memória até que o trace seja interrompido.

Quando o buffer de rastreamento está cheio, os eventos de rastreamento não são mais gravados. Para evitar um buffer cheio (e, portanto, dados de rastreamento perdidos), o ChromeDriver interrompe periodicamente o traço atual, coleta os eventos em buffer e reinicia o rastreamento em determinados pontos durante um teste.

A coleta de eventos de rastreamento pode aumentar a sobrecarga de um teste. Por isso, o ChromeDriver só coleciona eventos de rastreamento nos pontos adequados durante um teste. Os eventos de rastreamento são coletados apenas em eventos de navegação de página e quando qualquer registro do ChromeDriver (como o registro de desempenho) é solicitado.

Sempre há a possibilidade de o buffer encher, então o ChromeDriver monitora o uso do buffer para versões do Chrome com suporte (r263512 e mais recentes). Se o buffer for preenchido, o ChromeDriver vai registrar um aviso e adicionar uma entrada ao registro de desempenho.

Coletar entradas de registro

No teste, é possível receber entradas de registro de desempenho. Leia a documentação de geração de registros do WebDriver para mais informações.

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

Cada entrada é uma string JSON com a seguinte estrutura:

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

O valor do método é o método do evento das Ferramentas do desenvolvedor. Por exemplo, os eventos da linha do tempo têm um método Timeline.eventRecorded para todas as versões do protocolo até a versão 1.1 (a mais recente no momento em que este artigo foi escrito).

Entradas de registro de rastreamento

O rastreamento não faz parte do protocolo publicado do DevTools a partir da versão 1.1. Confira os detalhes aqui.

Todos os eventos de rastreamento têm um valor de visualização da Web "navegador", já que os eventos são coletados em todo o navegador.

Há dois métodos de evento de rastreamento possíveis:

  • tracing.dataCollected: os parâmetros são um único evento de rastreamento na forma de um dicionário.
  • tracing.bufferUsage: os parâmetros contêm uma única chave de erro, com uma mensagem que indica que o buffer de rastreamento do DevTools foi preenchido durante o teste.

Confira um exemplo de evento de rastreamento:

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