Executar comparativos de mercado em integração contínua

É comum executar testes em CI sem o Gradle ou localmente se você estiver usando um sistema de compilação diferente. Este tópico explica como configurar a biblioteca de comparativos de mercado no momento da execução sem o Gradle.

Para saber por que os comparativos de mercado são úteis no CI e como usar os dados do comparativo para detectar regressões, consulte Como combater regressões com os comparativos de mercado em CI no Blog de desenvolvedores Android.

Resultados

O comparativo de mercado gera um arquivo JSON com resultados e metadados de uma execução de teste. Esse arquivo JSON é gravado no armazenamento externo do dispositivo. É necessário extrair o arquivo do dispositivo a cada execução.

A saída está desativada por padrão, mas é possível ativá-la com o seguinte argumento de instrumentação , transmitido para o comando am instrument:

    -e androidx.benchmark.output.enable true
    

Por padrão, os relatórios são salvos no dispositivo no diretório de downloads do armazenamento externo do aplicativo testado, que pode ser encontrado com a seguinte consulta:

    adb shell content query --uri content://media/external/file --projection _data --where "\"_data LIKE '%Android'\""
    

É possível configurar o caminho das gravações de comparativo de mercado usando o seguinte argumento de instrumentação:

    -e additionalTestOutputDir "device_path_you_can_write_to"
    

Armazenamento e Android 10

Se, como no Android Gradle, for difícil extrair dados de saída do dispositivo antes de um teste ser desinstalado, é possível transmitir o argumento de instrumentação a seguir. Em dispositivos com Android 10 e versões mais recentes, esse argumento permite que os arquivos continuem existindo após a desinstalação:

    -e no-isolated-storage 1
    

Se você também estiver segmentando a API 29 e versões mais recentes, também será necessário permitir explicitamente as opções de armazenamento de legado no manifesto do comparativo de mercado:

    <application android:requestLegacyExternalStorage="true" ... >
    

Consulte Desativar visualização filtrada para ver mais informações sobre como desativar o armazenamento com escopo definido.

Bloquear clocks

O plug-in do Gradle de comparativo de mercado fornece o comando ./gradlew lockClocks para bloquear os clocks da CPU de um dispositivo com acesso root. Isso é útil para garantir que haja estabilidade em dispositivo com acesso root, como as compilações "userdebug". É possível replicar isso com o script de shell lockClocks.sh, disponível na origem da biblioteca.

É possível executar o script diretamente de um host Linux ou Mac ou enviar para o dispositivo com alguns comandos adb:

    adb push path/lockClocks.sh /data/local/tmp/lockClocks.sh
    adb shell /data/local/tmp/lockClocks.sh
    adb shell rm /data/local/tmp/lockClocks.sh
    

Se você executar o script de shell diretamente em um host, ele enviará esses comandos para um dispositivo conectado.

Argumentos de instrumentação

Configure o comportamento da biblioteca com os seguintes argumentos de instrumentação:

androidx.benchmark.startupMode.enable

  • Reconfigura o comportamento de repetição para oferecer compatibilidade ao código de comparação de mercado durante a inicialização
  • Desativa a repetição de aquecimento
  • Captura 10 medidas
  • Desativa a média de repetição, o que minimiza a sobrecarga em microcomparativos
  • O valor padrão é false.

androidx.benchmark.output.enable

  • Permite gravar o arquivo JSON de resultado no armazenamento externo
  • O valor padrão é false.

androidx.benchmark.suppressErrors

  • Lista de erros separados por vírgula, como DEBUGGABLE,LOW-BATTERY, para transformar em alertas
  • O padrão é uma lista vazia

additionalTestOutputDir

  • Configura onde os relatórios de comparativo de mercado JSON completos são salvos no dispositivo
  • O padrão é testar o diretório de download externo do APK