Um pacote no Tradefed se refere a uma configuração em que vários testes são executados em um executor de testes comum que orienta a execução geral.
No Tradefed, os pacotes são direcionados pela classe
ITestSuite
, que permite que os testes sejam adicionados e removidos independentemente de como são
executados.
Definições
- Pacote: conjunto de módulos de teste configurados para serem executados em uma configuração de nível superior semelhante para informar os resultados em uma única invocação.
- Configuração de nível superior: configuração aplicada aos dispositivos antes da execução de qualquer um dos módulos de teste.
- Configuração principal: a configuração XML do Tradefed no nível do pacote que descreve quais módulos devem ser executados e qual configuração de nível superior deve ser usada.
- Configuração no nível do módulo: configuração aplicada aos dispositivos logo antes da execução do módulo. Elas também são conhecidas como configurações específicas do módulo.
- Configuração do módulo: refere-se à configuração do XML Tradefed
AndroidTest.xml
que descreve os módulos e qual configuração no nível do módulo deve ser feita. - Módulo: unidade de teste composta por uma etapa de configuração (configuração no nível do módulo), uma etapa de execução de teste e uma etapa de remoção.
- Nova tentativa no módulo: nova tentativa automática feita pelo harness dentro do módulo.
- Nova tentativa do conjunto: nova execução completa dos testes que apresentaram falha anteriormente.
Estrutura de ITestSuite
ITestSuite
em Tradefed se refere à classe base comum que direciona uma execução de pacote. Ele é
compartilhado por todos os principais conjuntos de testes, especificamente o Teste de compatibilidade
do Android (CTS) e o Teste de fornecedor
do Android (VTS), e garante uma experiência de execução consistente
em todos os conjuntos.
Às vezes, nos referimos a ITestSuite como o executador de conjunto.
O executor do pacote segue estas etapas durante a execução:
- Carregar a configuração do módulo e determinar qual conjunto deve ser executado.
Execute cada módulo:
- Executar a configuração no nível do módulo.
- Executar testes de módulo.
- Execute a desmontagem no nível do módulo.
Informe os resultados.
Configuração de nível superior
Do ponto de vista do Tradefed, ITestSuite
é apenas mais um teste. Ele é complexo,
mas ainda é apenas um teste como qualquer outro IRemoteTest
. Portanto, ao especificar
o executor de suítes em uma configuração do Tradefed, o Tradefed segue o padrão
usual da configuração: execução de build_provider
, target_preparer
, teste
(nossa suíte, neste caso) e target_cleaner
.
Essa sequência na configuração do Tradefed que contém o ITestSuite
é a
configuração de nível superior.
Exemplo:
<configuration description="Common config for Compatibility suites">
<build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
<!-- Setup applied before the suite: so everything running in the suite will
have this setup beforehand -->
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="settings put global package_verifier_enable 0" />
<option name="teardown-command" value="settings put global package_verifier_enable 1"/>
</target_preparer>
<!-- Our ITestSuite implementation -->
<test class="com.android.compatibility.common.tradefed.testtype.suite.CompatibilityTestSuite" />
<result_reporter class="com.android.compatibility.common.tradefed.result.ConsoleReporter" />
</configuration>
Metadados do módulo
Chamamos de metadados do módulo informações extras especificadas no módulo de teste
AndroidTest.xml
. Esses metadados permitem especificar outras informações sobre
o módulo, e os módulos podem ser filtrados usando os metadados.
Exemplo de metadados:
<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
Exemplo de filtro de metadados:
--module-metadata-include-filter component=framework
O código acima executaria todos os módulos com um framework como metadados de componente.
Exemplo completo de AndroidTest.xml
:
<configuration description="Config for CTS Gesture test cases">
<option name="test-suite-tag" value="cts" />
<!-- Metadata -->
<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
<!-- End: metadata -->
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="cleanup-apks" value="true" />
<option name="test-file-name" value="CtsGestureTestCases.apk" />
</target_preparer>
<test class="com.android.tradefed.testtype.AndroidJUnitTest" >
<option name="package" value="android.gesture.cts" />
<option name="runtime-hint" value="10m50s" />
</test>
</configuration>
Módulo parametrizado
Um tipo de metadados especial é parameter
.
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />
Esses metadados especificam que o módulo precisa ser executado em um modo diferente, por exemplo, como um app instantâneo, em vez de um modo de app padrão.
Todos os modos ou parâmetros possíveis são descritos por
ModuleParameters
e têm um gerenciador associado em
ModuleParametersHelper
que permite mudar a configuração do módulo para execução no modo específico.
Por exemplo, o modo de app instantâneo força a instalação do APK como modo instantâneo.
Para que a parametrização ocorra, a linha de comando precisa ativá-la com:
--enable-parameterized-modules
Também é possível executar um único modo com:
--enable-parameterized-modules --module-parameter <Mode>
--enable-parameterized-modules --module-parameter INSTANT_APP
Quando uma versão parametrizada de um módulo é executada, ela informa os resultados em
um nome de módulo parametrizado, por exemplo, CtsGestureTestCases[instant]
em vez de
CtsGestureTestCases
de base.