Configurar suítes

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 conduzidos pela ITestSuite classe, que permite que os testes sejam adicionados e removidos independentemente de como são executados.

Definições

  • Conjunto: 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 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 precisam ser executados e qual configuração de nível superior precisa 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 precisa 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 harness dentro do módulo.
  • Nova tentativa do conjunto: nova execução completa dos testes com falha anterior do conjunto.

Estrutura ITestSuite

ITestSuite no Tradefed se refere à classe de base comum que impulsiona a execução de um conjunto. Ela é compartilhada 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 ao ITestSuite como o executor de conjuntos.

O executor de conjuntos segue estas etapas ao executar:

  1. Carregue a configuração do módulo e determine qual conjunto precisa ser executado.
  2. Execute cada módulo:

    1. Execute a configuração no nível do módulo.
    2. Execute testes de módulo.
    3. Execute a desmontagem no nível do módulo.
  3. 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 conjuntos em uma configuração do Tradefed, o Tradefed segue o padrão usual da configuração: execução de build_provider, target_preparer, teste (nosso conjunto nesse 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 metadados do módulo de informações extras especificadas no módulo de teste AndroidTest.xml. Esses metadados permitem especificar informações adicionais 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 em 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 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 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 com um nome de módulo parametrizado, por exemplo, CtsGestureTestCases[instant] em vez de base CtsGestureTestCases.