O Atest é uma ferramenta de linha de comando que permite aos usuários criar, instalar e executar Testes do Android localmente, acelerando muito as novas execuções, sem a necessidade conhecimento sobre o arquinho de testes da Trade Federation opções da linha de comando. Esta página explica como usar o Atest para executar o Android provas.
Para informações gerais sobre a criação de testes para Android, consulte Testes de plataforma Android.
Para obter informações sobre a estrutura geral do Atest, consulte a Guia do desenvolvedor do Atest.
Para ver informações sobre como executar testes em arquivos TEST_MAPPING por meio do Atest, consulte Execução de testes em arquivos TEST_MAPPING.
Para adicionar um recurso ao Atest, siga as Fluxo de trabalho do desenvolvedor de teste.
Configurar o ambiente
Para configurar o ambiente do Atest, siga as instruções em Configurar o ambiente, Escolher um destino e Criar o código.
Uso básico
Os comandos do atest assumem o seguinte formato:
atest test-to-run [optional-arguments]
Argumentos opcionais
A tabela a seguir lista os argumentos mais usados. Uma lista completa é
disponíveis pelo app atest --help
.
Opção | Opção longa | Descrição |
---|---|---|
-b |
--build |
Cria destinos de teste. (padrão) |
-i |
--install |
Instala os artefatos de teste (APKs) no dispositivo. (padrão) |
-t |
--test |
Executa os testes. (padrão) |
-s |
--serial |
Executa os testes no dispositivo especificado. É possível testar um dispositivo por vez. |
-d |
--disable-teardown |
Desativa a desmontagem e limpeza de testes. |
|
--dry-run |
Simula o Atest sem realmente criar, instalar ou executar testes. |
-m |
--rebuild-module-info |
Força uma reconstrução do arquivo module-info.json . |
-w |
--wait-for-debugger |
Aguarda a conclusão do depurador antes da execução. |
-v |
--verbose |
Exibe o registro no nível DEBUG. |
|
--iterations |
Loop-run executa testes até que a iteração máxima seja alcançada. (10 por padrão) |
|
--rerun-until-failure [COUNT=10] |
Executa novamente todos os testes até ocorrer uma falha ou até que a iteração máxima seja alcançado. (10 por padrão) |
|
--retry-any-failure [COUNT=10] |
Executa novamente testes com falha até ser aprovado ou até a iteração máxima ser atingida. (10) por padrão) |
|
--start-avd |
Cria automaticamente um AVD e executa testes no dispositivo virtual. |
|
--acloud-create |
Cria um AVD usando o comando acloud . |
|
--[CUSTOM_ARGS] |
Especifica argumentos personalizados para os executores de testes. |
-a |
--all-abi |
Executa os testes para todas as arquiteturas de dispositivos disponíveis. |
|
--host |
Executa o teste completamente no host sem um dispositivo. Observação: a execução de um teste de host que exige um dispositivo com --host
vai falhar. |
|
--history |
Mostra os resultados do teste em ordem cronológica. |
|
--latest-result |
Imprime o resultado mais recente do teste. |
Para mais informações sobre -b
, -i
e -t
, consulte a
Especificar as etapas: criar, instalar ou executar.
Especificar testes
Para executar testes, especifique um ou mais testes usando uma das opções a seguir: identificadores:
- Nome do módulo
- Módulo: classe
- Nome da classe
- Teste de integração do Tradefed
- Caminho do arquivo
- Nome do pacote
Separe as referências a vários testes com espaços, da seguinte forma:
atest test-identifier-1 test-identifier-2
Nome do módulo
Para executar um módulo de teste inteiro, use o nome do módulo. Insira o nome conforme aparece
nas variáveis LOCAL_MODULE
ou LOCAL_PACKAGE_NAME
no arquivo Android.mk
ou Android.bp
do teste.
Exemplos:
atest FrameworksServicesTests
atest CtsVideoTestCases
Módulo: classe
Para executar uma única classe em um módulo, use Module:Class. Module é o
igual ao descrito em Nome do módulo. Class é o nome da
classe de teste no arquivo .java
e pode ser o nome de classe totalmente qualificado ou o
nome básico.
Exemplos:
atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
Nome da classe
Para executar uma única classe sem declarar explicitamente o nome de um módulo, use a classe nome.
Exemplos:
atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest
Teste de integração do Tradefed
Para executar testes integrados diretamente no TradeFed (não módulos), insira o
nome conforme aparece na saída do comando tradefed.sh list configs
. Por
exemplo:
Para executar o
teste reboot.xml
:
atest example/reboot
Para executar
Teste native-benchmark.xml
:
atest native-benchmark
Caminho do arquivo
O Atest oferece suporte à execução de testes com base em módulo e em integração, inserindo o caminho para o arquivo ou diretório de teste, conforme apropriado. Ela também suporta a execução de uma única classe especificando o caminho para o arquivo Java da classe. Há suporte para caminhos relativos e absolutos.
Executar um módulo
Os exemplos a seguir mostram duas maneiras de executar o módulo CtsVideoTestCases
usando
um caminho de arquivo.
Execute no Android repo-root
:
atest cts/tests/video
Executar no Android repo-root/cts/tests/video
:
atest .
Executar uma classe de teste
O exemplo a seguir mostra como executar uma classe específica no
módulo CtsVideoTestCases
usando um caminho de arquivo.
No Android repo-root
:
atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
Executar um teste de integração
O exemplo a seguir mostra como executar um teste de integração usando um caminho de arquivo
no Android repo-root
:
atest tools/tradefederation/contrib/res/config/example/reboot.xml
Nome do pacote
O Atest é compatível com a pesquisa de testes pelo nome do pacote.
Exemplos:
atest com.android.server.wm
atest com.android.uibench.janktests
Especificar as etapas: criar, instalar ou executar
Use as opções -b
, -i
e -t
para especificar quais etapas serão executadas. Se
Se você não especificar uma opção, todas as etapas serão executadas.
- Criar apenas destinos:
atest -b test-to-run
- Executar apenas testes:
atest -t test-to-run
- Instale o apk e execute testes:
atest -it test-to-run
- Crie e execute, mas não instale:
atest -bt test-to-run
O Atest pode forçar um teste a pular a etapa de limpeza ou desmontagem. Muitos testes, como
CTS, limpe o dispositivo depois que o teste for executado. Tente executar o teste de novo
com -t
vai falhar sem o parâmetro --disable-teardown
. Use -d
antes de
-t
para pular a etapa de limpeza do teste e testar de forma iterativa.
atest -d test-to-run
atest -t test-to-run
Executar métodos específicos
O Atest oferece suporte à execução de métodos específicos em uma classe de teste. Embora todo precisa ser criado, isso reduz o tempo necessário para executar os testes. Para executar métodos específicos, identifique a classe usando qualquer uma das formas com suporte para identificar uma classe (Module:Class, caminho do arquivo etc.) e anexe o nome do método:
atest reference-to-class#method1
Ao especificar vários métodos, separe-os 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 são preferidos ao uso exclusivo do nome da classe,
porque especificar o módulo ou o local do arquivo Java permite que o Atest encontre o
teste muito mais rapidamente.
Como usar Module:Class:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
No Android repo-root:
atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
Vários métodos podem ser executados em diferentes classes e módulos:
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors
Executar várias turmas
Para dar várias classes, separe-as por espaços, da mesma forma que você faz vários testes. O Atest compila e executa classes de forma eficiente, portanto, subconjunto de classes em um módulo melhora o desempenho em relação à execução de todo o mais tarde neste módulo.
Para executar duas classes no mesmo módulo:
atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
Para executar duas classes em módulos diferentes:
atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
Executar binários do GTest
O Atest pode executar binários do GTest. Use -a
para executar esses testes para todos os itens disponíveis
do dispositivo, que neste exemplo são armeabi-v7a
(ARM 32 bits) e
arm64-v8a
(ARM de 64 bits).
Exemplo de teste de entrada:
atest -a libinput_tests inputflinger_tests
Para selecionar um binário do GTest específico para execução, use dois-pontos (:) para especificar o teste e uma hashtag (#) para especificar melhor um método individual.
Por exemplo, para a seguinte definição de teste:
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
Execute o seguinte comando para especificar todo o teste:
atest inputflinger_tests:InputDispatcherTest
Ou execute um teste individual usando o seguinte:
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
Executar testes em TEST_MAPPING
O Atest pode executar testes em arquivos TEST_MAPPING
.
Executar testes de pré-envio implicitamente
Execute testes de pré-envio em arquivos TEST_MAPPING
nos diretórios atuais e pai:
atest
Execute testes de pré-envio em arquivos TEST_MAPPING
em /path/to/project e
nos diretórios pais:
atest --test-mapping /path/to/project
Executar um grupo de teste especificado
Os grupos de teste disponíveis são: presubmit
(padrão), postsubmit
,
mainline-presubmit
e all
.
Execute testes pós-envio em arquivos TEST_MAPPING nos diretórios atuais e principais:
atest :postsubmit
Execute testes de todos os grupos em arquivos TEST_MAPPING:
atest :all
Execute testes pós-envio em arquivos TEST_MAPPING em /path/to/project e nos diretórios pais:
atest --test-mapping /path/to/project:postsubmit
Execute testes de linha principal em arquivos TEST_MAPPING em /path/to/project e seus diretórios pais:
atest --test-mapping /path/to/project:mainline-presubmit
Executar testes em subdiretórios
Por padrão, o Atest só pesquisa testes em arquivos TEST_MAPPING superiores (de
diretório atual ou do determinado diretório aos diretórios pai). Se você também quiser
executar testes em arquivos TEST_MAPPING nos subdiretórios, use --include-subdirs
para forçar o Atest a incluir esses testes também:
atest --include-subdirs /path/to/project
Executar testes em iteração
Execute testes em iteração transmitindo o argumento --iterations
. Se ela passa
ou falhar, o Atest repetirá o teste até que a iteração máxima seja alcançada.
Exemplos:
Por padrão, o Atest faz a iteração 10 vezes. O número de iterações precisa ser um número inteiro positivo.
atest test-to-run --iterations
atest test-to-run --iterations 5
As abordagens a seguir facilitam a detecção de testes instáveis:
Abordagem 1: execute todos os testes até que ocorra uma falha ou a iteração máxima seja alcançada.
- É interrompido quando ocorre uma falha ou a iteração atinge a 10a rodada (por padrão).
atest test-to-run --rerun-until-failure
- É interrompido quando ocorrer uma falha ou a iteração chegar à 100a rodada.
atest test-to-run --rerun-until-failure 100
Abordagem 2: execute somente testes com falha até ser aprovado ou até a iteração máxima ser atingida.
- Suponha que
test-to-run
tenha vários casos de teste e um dos durante os testes. Execute somente o teste com falha 10 vezes (por padrão) ou até que o passar no teste.atest test-to-run --retry-any-failure
- Pare de executar o teste com falha quando ele for aprovado ou chegar à 100a rodada.
atest test-to-run --retry-any-failure 100
Executar testes em AVDs
O Atest pode executar testes em um AVD recém-criado. Execute acloud create
para criar
um AVD e artefatos de compilação. Depois, use os exemplos a seguir para executar os testes.
Inicie um AVD e execute testes nele:
acloud create --local-instance --local-image && atest test-to-run
Inicie um AVD como parte de uma execução de teste:
atest test-to-run --acloud-create "--local-instance --local-image"
Para mais informações, execute acloud create --help
.
Transmitir opções para o módulo
O Atest é capaz de transmitir opções para módulos de teste. Para adicionar a linha de comando do TradeFed à execução do teste, use a estrutura a seguir e verifique se as configurações sigam o formato de opção de linha de comando do Tradefed.
atest test-to-run -- [CUSTOM_ARGS]
Transmita as opções do módulo de teste para os preparadores ou executores de teste de destino definidos no arquivo de configuração de teste:
atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
Transmita opções para um tipo ou classe de executor:
atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
Para mais informações sobre opções somente para teste, consulte Transmitir opções para os módulos.