Criar um teste sem dispositivo do lado do host no TF

Esta página informa como criar um teste no lado do host que não requer uma como um teste executado em uma instância do GCE do Linux. (Para detalhes sobre programar um teste orientado por host que exige um dispositivo, consulte Criar um teste conduzido por host na Trade Federation.)

Tipos de teste do host

Você pode realizar vários tipos de testes no host por meio da Trade Federation (TF).

Testes nativos (gtest)

Criar testes nativos (gtests) para testar uma plataforma. Se o teste não exigir um dispositivo, execute-o em um host; o teste será muito mais rápido. Para configurar esses testes para serem executados um host de teste, use o executor do TF HostGTest.

Este é um exemplo de configuração de teste do TradeFed:

<configuration description="Runs hello_world_test.">
    <option name="null-device" value="true" />
    <test class="com.android.tradefed.testtype.HostGTest" >
        <option name="module-name" value="hello_world_test" />
    </test>
</configuration>

A configuração de teste executa um teste gtest (hello_world_test) em um host. O exemplo de teste configuração poderá ser gerada automaticamente. A menos que o teste precise de uma configuração ou limpeza especial, você pode confiar na geração automática de configurações de teste para criar um teste do TF adequado personalizadas.

Para configurar um gtest do lado do host e ativar a geração de configurações de teste automático, defina host_supported a true pol Android.bp, como em hello_world_test.

Para mais informações sobre como programar um teste nativo, consulte Como adicionar um novo teste nativo Exemplo.

Testes de host de JAR

Testes de host JAR (Java), como JUnit são testes que não precisam ser executados em um dispositivo e que fornecem código cobertura do seu projeto Java. Esses testes podem ser configurados para execução host usando o executor HostTest (em inglês).

Exemplo de configuração de teste do TradeFed

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

A configuração de teste executa um teste JUnit do lado do host do HelloWorldHostTest. A configuração de teste acima podem ser geradas automaticamente. A menos que o teste precise de configuração ou limpeza especial, confie nas a geração de configurações de teste automático para criar um teste do TradeFed adequado. configuração do Terraform.

Para mais detalhes sobre como criar um teste de host JAR, consulte Página JAR (Java) Host Tests.

Testes isolados de hosts Java

Os testes Java sem dispositivo podem ser executados em um ambiente de isolamento com um pequeno custo de desempenho. No entanto, há algumas considerações importantes a serem feitas antes de optar por usar esse de nuvem.

  • Esse é o executor padrão usado para testes de unidade do Robolectric e do JUnit
  • O Tradefed só oferece suporte a testes JUnit no ambiente de isolamento.
  • Somente dependências vinculadas estaticamente são compatíveis. Nenhuma dependência declarada com lib são incluídos no caminho de classe.
  • O executor de isolamento coloca apenas o executor de paliativos e o jar de teste no caminho de classe.
  • Há uma quantidade de sobrecarga fixa por execução de teste com este executor.

Exemplo de configuração de teste da Tradefed (isolada)

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.IsolatedHostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

Exemplo de configuração do Soong para geração automática

Em vez de criar manualmente a configuração de teste, como acima, o Soong pode gerar a configuração automaticamente usando uma declaração como este exemplo.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

    srcs: ["test/**/*.java"],

    static_libs: [
        "junit",
    ],
}

Testes Robolectric

Os testes Robolectric usam o mesmo executor que os testes de host isolados, com algumas diferenças .

  • robolectric-resources ativa algumas opções de linha de comando específicas do Robolectric seja transmitido para o subprocesso, além de adicionar o build em árvore de android-all ao caminho de classe do subprocesso. Embora as outras duas sejam práticas recomendadas, essa opção é obrigatória para executando testes Robolectric com sucesso.
  • A opção java-folder permite alterar o ambiente de execução do Java usado pelo subprocesso. Isso é necessário porque a Robolectric prefere versões específicas do Java que podem não estar alinhadas com a da JVM preferencial do sistema host.
  • A opção exclude-paths permite que o executor de subprocessos evite o carregamento de módulos específicos. o que é útil quando um JAR vem com classes irrelevantes que podem causar erros de carregamento. java. é uma exclusão comum para evitar o lançamento de exceções SecurityException.

Exemplo de configuração do Robolectric

<configuration description="Executes a Sample Robolectric Test">
    <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" />
    <option name="exclude-paths" value="java" />
    <option name="use-robolectric-resources" value="true" />
    <test class="com.android.tradefed.testtype.IsolatedHostTest">
        <option name="jar" value="RobolectricExampleTest.jar" />
    </test>
</configuration>

Exemplo de configuração do Soong para geração automática do Robolectric

Em vez de criar manualmente a configuração de teste, como acima, o Soong pode gerar automaticamente a configuração usando uma declaração como este exemplo.

android_robolectric_test {
    name: "HelloWorldRoboTest",
    srcs: [
        "src/**/*.java",
    ],

    // Include the testing libraries
    static_libs: [
        "mockito-robolectric-prebuilt",
        "platform-test-annotations",
        "testng",
        "truth-prebuilt",
    ],

    instrumentation_for: "HelloWorldApp",
}

Teste em Python

Se a lógica de teste for escrita em Python, use o tipo de build python_test_host para criar um arquivo par que possa ser executado por TF PythonBinaryHostTest.

Exemplo de configuração de teste do TradeFed

<configuration description="Config to run atest unittests">
    <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
        <option name="par-file-name" value="atest_unittests" />
        <option name="test-timeout" value="2m" />
    </test>
</configuration>

Configuração do pacote de testes

Para que o teste do lado do host possa ser acessado pelo TF em um determinado build, defina o da configuração `test_suites` do módulo de teste como `general-tests`:

test_suites: ["general-tests"],

Com essa configuração, o teste é empacotado para general-tests.zip no o destino test_suites.