Biblioteca do framework de teste do SDV.

Esta página apresenta uma visão geral da biblioteca do framework de teste de SDV e orienta você na configuração e execução de testes. Use o framework de teste de SDV para testes completos. A ferramenta é baseada no Mobly, e você escreve testes em Python.

Escolher uma abordagem de teste

Antes de escrever um teste, escolha o executor de teste que corresponde ao escopo de verificação:

Escopo do teste Tipo de módulo do Soong Ferramenta de execução Quando usar
Testes de unidade do pacote de serviços rust_test, rust_test_host ou cc_test atest Verifique a lógica de negócios isolada do Rust ou C++, as transformações de dados ou os crates auxiliares no host ou em uma única máquina virtual (VM) do Cuttlefish.
Testes do sistema de ponta a ponta e de várias VMs python_test_host (framework de teste de SDV) atest ou CATBox Verifique a orquestração do ciclo de vida do pacote de serviços, a comunicação entre VMs, a ponte SOME/IP ou os destinos de hardware em uma a três VMs.

Configure o ambiente

Nesta página, presumimos que você já configurou sua estação de trabalho para SDV. Para executar testes do framework, instale virtualenv.

Dependências do Python

A abordagem recomendada para gerenciar dependências no Android é empacotar testes, Python e as dependências deles como um executável usando a configuração do build. Siga essa abordagem no repositório de testes de SDV.

A biblioteca do framework de teste de SDV fornece estas dependências por padrão:

  • mobly
  • absl-py Obrigatório para usar a parametrização em testes.
  • pexpect Obrigatório para a funcionalidade de comandos interativos.
  • ptyprocess Obrigatório para a funcionalidade de comandos interativos.

Se você precisar de dependências específicas de teste, inclua-as no arquivo Android.bp do teste:

python_test_host {
    …
    libs: [
        "<DEPENDENCY1>",
        "<DEPENDENCY2>",
        …
    ],
    …
}

Tipos de teste do sistema

Você cria Testes do sistema usando o framework de teste de SDV. O framework distingue os tipos a seguir. Categorize os testes corretamente:

  • Testes de amostra: execute serviços de amostra de SDV e verifique se o resultado corresponde à saída esperada.
  • Testes E2E: não use serviços de exemplo de SDV.
  • Testes de longa duração: projetados para períodos de execução prolongados.
  • Testes de desempenho: use a biblioteca perfetto.
  • Testes de hardware: projetados para serem executados exclusivamente em um dispositivo físico, não em um Cuttlefish (CF).

Criar um teste

Todos os testes escritos usando o framework precisam estar localizados no repositório de testes. O local exato do teste depende do tipo. Para caminhos de diretório, modelos de classe de teste do Python, regras Android.bp e diretrizes de programação do Mobly, consulte Criação de teste do sistema SDV.

Configurar um teste

Configure todos os testes para serem executados usando o atest e o CATBox.

Configurar o atest

O framework fornece modelos para testes de uma, duas e três VMs. Adicione o seguinte ao seu arquivo Android.bp:

  • Uma VM:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device",
    }
    
  • Duas VMs:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices",
    }
    
  • Três VMs:

    python_test_host {
      ...
      test_config_template: ":sdv_three_devices",
    }
    

O modelo padrão é suficiente para a maioria dos testes. Evite criar configurações personalizadas, a menos que haja um motivo convincente.

Atualizar o tempo limite padrão

O tempo limite padrão deve ser suficiente para executar os testes localmente.

Se o teste falhar localmente devido a um tempo limite, divida-o em testes diferentes. Testes muito longos com muitos casos de teste podem causar um gargalo na execução.

Se você precisar definir um tempo limite maior que o padrão, continue lendo.

Substituir o tempo limite padrão

O framework não é compatível com a extensão do modelo para a execução de atest. Portanto, use os modelos fornecidos que oferecem um tempo limite estendido.

  • Um teste longo de VM:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device_long_test",
    }
    
  • Teste longo de duas VMs:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices_long_test",
    }
    

Adicione um comentário que indique claramente a finalidade de usar esse modelo e explique por que o tempo estendido é necessário (por exemplo, se o teste exigir o download de um artefato que leva um tempo específico).

Enviar arquivos para um dispositivo

As etapas a seguir descrevem como enviar arquivos para um dispositivo para configurações atest.

Enviar arquivos para um dispositivo

O framework não é compatível com a extensão do modelo para a execução de atest. Portanto, é necessário criar um arquivo AndroidTest.xml que substitua totalmente o modelo padrão e inclua as opções target_preparer correspondentes para os dispositivos.

  1. Copie o conteúdo do modelo:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. Atualize {MODULE} com o nome do módulo do teste.

  3. Adicione com.android.tradefed.targetprep.PushFilePreparer a cada dispositivo.

<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
  </target_preparer>
</device>

Configurar a CATBox

Para executar o teste como um conjunto, é necessária uma configuração do CATBox.

  1. Crie um novo arquivo de configuração em libraries/sdv/sdv_catbox/res/config/ e siga estas convenções de nomenclatura:

    • Teste de amostra: sdv-sample-<NAME>-test.xml
    • Teste E2E: sdv-e2e-<NAME>-test.xml
    • Teste de longa duração: sdv-long-running-<NAME>-test.xml
    • Teste de desempenho: sdv-performance-<NAME>-test.xml
    • Teste de hardware: sdv-hw-<NAME>-test.xml
  2. Adicione as informações correspondentes com base no tipo de teste:

  • Configuração de teste de uma VM:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/one-device" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • Configuração de teste de duas VMs:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/two-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • Configuração de teste de três VMs:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/three-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    

O modelo padrão é suficiente para a maioria dos testes. Evite criar configurações personalizadas, a menos que haja um motivo convincente.

Atualizar o tempo limite padrão

Se o tempo limite padrão não for suficiente para o teste, você poderá substituí-lo.

Substituir o tempo limite padrão

Para modificar o tempo limite padrão, adicione o seguinte ao final do arquivo de configuração. Os testes longos precisam ter um tempo limite máximo de 10 minutos.

  <!-- Long Test - 10 minutes timeout: <REASON> -->
  <option name="mobly-host:mobly-test-timeout" value="600000" />

Enviar arquivos para um dispositivo

A seção a seguir descreve como enviar arquivos para um dispositivo ao configurar o CATBox.

Enviar arquivos para um dispositivo

Para enviar arquivos para o dispositivo correspondente, adicione a seguinte configuração após a opção plan:

<!-- Automatically pushes config file to device-->
<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file"
      key="<FILE_NAME>"
      value="<REMOTE_FILE_PATH>"
    />
  </target_preparer>
</device>

Se você precisar dos arquivos em cada dispositivo, adicione a configuração para cada um deles (por exemplo, name=device1, name=device2).

Execução de teste

Estas instruções pressupõem que você concluiu a configuração de um ambiente de SDV em funcionamento.

Configure o ambiente

O framework não inicia instâncias do dispositivo virtual do Cloud (CVD, na sigla em inglês). Portanto, é necessário iniciá-las antes de executar os testes.

  1. Configure o ambiente e inicie o destino do SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Inicie a primeira instância do CVD:

    cvd create --config=sdv_core_instance1
    
  3. Inicie a segunda instância do CVD (para testes de várias VMs):

    cvd create --config=sdv_core_instance2
    
  4. Inicie a terceira instância do CVD (para testes de várias VMs):

    cvd create --config=sdv_core_instance3
    

Executar o atest

atest <TestModuleName>

Executar o CATBox

Esses comandos pressupõem que você esteja no diretório raiz do repositório.

  1. Criar CATBox: m catbox
  2. (Opcional) Confira todos os planos de teste de SDV disponíveis no CATBox:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

Execute um teste:

  • Execute um teste de VM:

    NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520
    
  • Execute o teste de duas VMs:

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521
    
  • Execute o teste de três VMs:

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522