Um conjunto no Tradefed se refere a uma configuração em que vários testes são executados em um executor de testes comum que impulsiona a execução geral.
No Tradefed, os conjuntos são executados pela classe
ITestSuite
, que permite adicionar e remover testes independentemente de como eles são
executados.
Definições
- Suíte: conjunto de módulos de teste configurados para serem executados em uma configuração de nível superior semelhante e informar os resultados em uma única invocação.
- Configuração de nível superior: configuração aplicada aos dispositivos antes de executar qualquer um dos módulos de teste.
- Configuração principal: a configuração XML do Tradefed no nível do conjunto 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 imediatamente 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 XML do 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 desmontagem.
- Nova tentativa no módulo: nova tentativa automática feita pelo arnês dentro do módulo.
- Repetição do pacote: nova execução completa dos testes com falha anterior do pacote.
Estrutura ITestSuite
ITestSuite
no Tradefed se refere à classe base comum que impulsiona a execução de um conjunto de testes. 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 executor de suítes.
O executor de suítes segue estas etapas ao executar:
- Carregue a configuração do módulo e determine qual conjunto deve ser executado.
Execute cada módulo:
- Execute a configuração no nível do módulo.
- Execute 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 outro teste. É um teste complexo, mas ainda é 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 as informações extras especificadas no módulo de teste
AndroidTest.xml
. Com esses metadados, é possível especificar mais informações sobre o módulo, e eles podem ser usados para filtrar os módulos.
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 em metadados:
--module-metadata-include-filter component=framework
O comando 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 especial de metadados é 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 manipulador 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
.