O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Um teste

O Atest é uma ferramenta de linha de comando que permite aos usuários criar, instalar e executar testes do Android localmente, acelerando enormemente as reexecuções de teste sem a necessidade de conhecimento das opções de linha de comando do chicote de teste da Trade Federation . Esta página explica como usar o Atest para executar testes do Android.

Para obter informações gerais sobre como escrever testes para Android, consulte Teste da plataforma Android .

Para obter informações sobre a estrutura geral do Atest, consulte o Guia do desenvolvedor do Atest .

Para obter informações sobre como executar testes em arquivos TEST_MAPPING por meio de Atest, consulte Executando testes em arquivos TEST_MAPPING .

E para adicionar um recurso ao Atest, siga o Fluxo de trabalho do desenvolvedor do Atest .

Configurando seu ambiente

Para executar o Atest, siga as etapas nas seções abaixo para configurar seu ambiente.

Definir variável de ambiente

Defina test_suite para Soong ou LOCAL_COMPATIBILITY_SUITE para regras de script de construção Make per Packaging .

Execute envsetup.sh

Na raiz da verificação de origem do Android, execute:

source build/envsetup.sh

Almoçar

Execute o comando lunch para abrir um menu de dispositivos suportados. Encontre o dispositivo e execute esse comando.

Por exemplo, se você tiver um dispositivo ARM conectado, execute o seguinte comando:

lunch aosp_arm64-eng

Isso define várias variáveis ​​de ambiente necessárias para executar o Atest e adiciona o comando Atest ao seu $PATH .

Uso básico

Os comandos Atest têm o seguinte formato:

atest test-to-run [optional-arguments]

Argumentos opcionais

Abaixo estão os argumentos mais comumente usados. Uma lista completa está disponível em atest --help .

Opção Opção longa Descrição
-b --build Cria alvos de teste. (padrão)
-i --install Instala artefatos de teste (APKs) no dispositivo. (padrão)
-t --test Executa os testes. (padrão)
-s --serial Executa os testes no dispositivo especificado. Um dispositivo pode ser testado por vez.
-d --disable-teardown Desativa a desmontagem e limpeza de teste.
--info Mostra as informações relevantes dos destinos e saídas especificados.
--dry-run A seco executa um teste sem construir, instalar e executar testes na realidade
-m --rebuild-module-info Força uma reconstrução do arquivo module-info.json .
-w --wait-for-debugger Aguarda o depurador antes da execução. Apenas para testes de instrumentação.
-v --verbose Exibe o registro do nível DEBUG.
--iterations Loop executa testes até que a iteração máxima seja atingida. (10 por padrão)
--rerun-until-failure Executa todos os testes novamente até que ocorra uma falha ou a iteração máxima seja atingida. (10 por padrão)
--retry-any-failure Executa novamente os testes com falha até passar ou até que a iteração máxima seja atingida. (10 por padrão)
--start-avd Cria automaticamente um AVD e executa testes no dispositivo virtual.
--acloud-create Cria AVDs usando o acloud command.
--[CUSTOM_ARGS] Especifica argumentos personalizados para os executores de teste.
-a --all-abi Executa os testes para todas as arquiteturas de dispositivo disponíveis.
--host Executa o teste completamente no host sem um dispositivo.
(Observação: a execução de um teste de host que requer um dispositivo com --host irá falhar.)
--flakes-info Mostra o resultado do teste com informações de flocos.
--history Mostra o resultado do teste em ordem cronológica.
--latest-result Imprime o resultado do teste mais recente.

Para obter mais informações sobre -b , -i e -t , consulte Especificando etapas: construir, instalar ou executar.

Testes para executar

Você pode executar um ou mais testes usando test-to-run . Para executar vários testes, separe as referências de teste com espaços. Por exemplo:

atest test-to-run-1 test-to-run-2

aqui estão alguns exemplos:

atest FrameworksServicesTests
atest example/reboot
atest FrameworksServicesTests CtsVideoTestCases
atest FrameworksServicesTests:ScreenDecorWindowTests

Para obter mais informações sobre como fazer referência a um teste, consulte Identificando testes.

Identificando testes

Você pode especificar o argumento test-to-run com o nome do módulo do teste, Módulo: Classe, nome da classe, teste de integração TF, caminho do arquivo ou nome do pacote.

Nome do módulo

Para executar um módulo de teste inteiro, use seu nome de módulo. Digite o nome que aparece nas LOCAL_MODULE ou LOCAL_PACKAGE_NAME variáveis em que o teste Android.mk ou Android.bp arquivo.

Exemplos:

atest FrameworksServicesTests
atest CtsVideoTestCases

Módulo: Classe

Para executar uma única classe dentro de um módulo, use Module: Class . O módulo é igual ao descrito em Nome do módulo . Classe é o nome da classe de teste no arquivo .java e pode ser o nome completo da classe ou o nome básico.

Exemplos:

atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
atest CtsVideoTestCases:VideoEncoderDecoderTest

Nome da classe

Para executar uma única classe sem declarar explicitamente um nome de módulo, use o nome da classe.

Exemplos:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Usando o Módulo: a referência de classe é recomendada sempre que possível, pois Atest requer mais tempo para pesquisar a árvore de origem completa para possíveis correspondências se nenhum módulo for declarado.

Exemplos (ordenados do mais rápido para o mais lento):

atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
atest FrameworksServicesTests:ScreenDecorWindowTests
atest ScreenDecorWindowTests

Teste de integração TF

Para executar testes que são integrados diretamente ao TradeFed (não módulos), insira o nome conforme ele aparece na saída do comando tradefed.sh list configs . Por exemplo:

Para executar o teste reboot.xml :

atest example/reboot

Para executar o teste native-benchmark.xml :

atest native-benchmark

Caminho de arquivo

Você pode executar testes baseados em módulo e testes baseados em integração inserindo o caminho para seu arquivo ou diretório de teste, conforme apropriado. Você também pode executar uma única classe especificando o caminho para o arquivo Java da classe. Ambos os caminhos relativos e absolutos são suportados.

Exemplo: duas maneiras de executar o módulo CtsVideoTestCases via caminho

  1. Execute o módulo a partir do repo-root Android:

    atest cts/tests/video
    
  2. Do Android repo-root / cts / tests / video:

    atest .
    

Exemplo: execute uma classe específica dentro do módulo CtsVideoTestCases por meio do caminho. Do repo-root Android:

atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java

Exemplo: execute um teste de integração por meio do caminho. Do repo-root Android:

atest tools/tradefederation/contrib/res/config/example/reboot.xml

Nome do pacote

Atest oferece suporte à pesquisa de testes por nome de pacote.

Exemplos:

atest com.android.server.wm
atest android.jank.cts

Especificando etapas: construir, instalar ou executar

Você pode especificar quais etapas executar usando as opções -b , -i e -t . Se você não especificar uma opção, todas as etapas serão executadas.

  • Apenas alvos de compilação: atest -b test-to-run
  • Execute apenas testes: atest -t test-to-run
  • Instale o apk e execute os testes: atest -it test-to-run
  • Compile e execute, mas não instale: atest -bt test-to-run

Atest pode forçar um teste a pular a etapa de limpeza / desmontagem. Muitos testes, como o CTS, limpam o dispositivo depois que o teste é executado, portanto, tentar reexecutar o teste com -t falhará sem o parâmetro --disable-teardown . Use -d antes de -t para pular a etapa de limpeza de teste e teste iterativamente.

atest -d test-to-run
atest -t test-to-run

Execução de métodos específicos

Você pode executar métodos específicos em uma classe de teste. Embora todo o módulo precise ser construído, isso reduz o tempo necessário para executar os testes. Para executar métodos específicos, identifique a classe usando qualquer uma das formas suportadas para identificar uma classe (Módulo: Classe, caminho do arquivo, etc) e anexe o nome do método.

atest reference-to-class#method1

Você pode especificar vários métodos com vírgulas.

atest reference-to-class#method1,method2,method3

Exemplos:

atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval

Os dois exemplos a seguir mostram as maneiras preferidas de executar um único método, testFlagChange . Esses exemplos têm preferência em vez de usar apenas o nome da classe porque a especificação do módulo ou do local do arquivo Java permite que o Atest encontre o teste muito mais rápido:

  1. Módulo de Uso: Classe

    atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
    
  2. Do repo-root Android

    atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
    

Vários métodos podem ser executados a partir de diferentes classes e módulos:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

Executando várias classes

Para executar várias classes, separe-as com espaços da mesma maneira que executa vários testes. Atest constrói e executa classes com eficiência, portanto, especificar um subconjunto de classes em um módulo melhora o desempenho em relação à execução de todo o módulo.

Exemplos:

  • Duas classes no mesmo módulo:

    atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
    
  • Duas classes em módulos diferentes:

    atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
    

Executando testes nativos

Atest pode executar testes nativos. Use -a para executar os testes para todas as arquiteturas de dispositivo disponíveis, que neste exemplo são armeabi-v7a (ARM de 32 bits) e arm64-v8a (ARM de 64 bits).

Exemplos:

  • Testes de entrada:

    atest -a libinput_tests inputflinger_tests
    

Para selecionar um teste nativo específico a ser executado, use dois pontos (:) para especificar o nome do teste e hashtag (#) para especificar um método individual. Por exemplo, para a seguinte definição de teste:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

Você pode executar o teste inteiro usando

atest inputflinger_tests:InputDispatcherTest

ou um método de teste individual usando

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Executar testes na iteração

Para executar testes em iteração, simplesmente passe o argumento --iterations . Se passar ou falhar, atest não para de testar até que a iteração máxima seja atingida.

Exemplos:

Por padrão, atest itera 10 vezes, fornecendo um número inteiro para alterar a rodada de iteração.

atest test-to-run --iterations
atest test-to-run --iterations 5

Duas abordagens que ajudam os usuários a detectar testes instáveis:

Abordagem 1: Execute todos os testes até que ocorra uma falha ou a iteração máxima seja alcançada.

  • Pare quando ocorrer uma falha ou a iteração atingir a 10ª rodada (por padrão).
    atest test-to-run --rerun-until-failure
    
  • Pare quando ocorrer uma falha ou a iteração atingir a 100ª rodada.
    atest test-to-run --rerun-until-failure 100
    

Abordagem 2: Execute apenas testes com falha até passar ou até a iteração máxima ser atingida.

  • Suponha que o test-to-run tenha cinco casos de teste e um dos testes falhe. Execute apenas o teste com falha 10 vezes ou até que o teste seja aprovado.
    atest test-to-run --retry-any-failure
    
  • Pare de executar o teste que falhou quando ele for aprovado ou atingir a 100ª rodada.
    atest test-to-run --retry-any-failure 100
    

Execução de testes em AVDs

Atest é capaz de executar testes com o AVD recém-criado. Atest pode construir artefatos junto com a execução de acloud create e executar testes após o AVD ter sido criado com sucesso.

Exemplos:

  • Inicie um AVD antes de executar testes nesse dispositivo recém-criado:

    acloud create && atest test-to-run
    
    Agora, pode ser simplificado por:
    atest test-to-run --start-avd
    

  • Inicie AVDs especificando argumentos acloud create e execute testes nesse dispositivo recém-criado.

    atest test-to-run --acloud-create "--build-id 6509363 --build-target aosp_cf_x86_phone-userdebug --branch aosp_master"
    

Para obter detalhes de uso sobre o argumento, execute acloud create --help .