Framework de teste de SDV

Este documento apresenta uma visão geral da estrutura de teste do SDV e orienta você na configuração, na execução e na execução de testes. Use o framework de teste do SDV para testes de ponta a ponta. A ferramenta é baseada no Mobly, e você escreve testes em Python.

Configure o ambiente

Este documento pressupõe que você já tenha configurado sua estação de trabalho para SDV. Para executar testes de 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 de build. Você precisa seguir essa abordagem no repositório de testes do SDV.

A biblioteca do SDV Test Framework fornece estas dependências por padrão:

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

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

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

Tipos de testes do sistema

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

  • Testes de amostra:execute serviços de amostra do SDV e verifique se o resultado corresponde à saída esperada.
  • Testes E2E:não use serviços de exemplo do SDV.
  • Testes de longa duração:projetados para períodos de execução estendidos.
  • 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 a estrutura precisam estar localizados no repositório de testes. A localização exata do teste depende do tipo dele.

Configurar um teste

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

Configurar o atest

O framework oferece modelos para testes de uma, duas e três máquinas virtuais (VMs). Adicione a instrução a seguir 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 do 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 execução de atest. Portanto, use os modelos fornecidos que oferecem um tempo limite estendido.

Teste longo de uma 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 de atest.

Enviar arquivos para um dispositivo

O framework não é compatível com a extensão do modelo para 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 seu 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 o CATBox

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

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

    • Exemplo de teste: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:

Uma configuração de teste de 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

<!-- Copyright 2025 Google LLC -->
<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á substituir esse valor.

Substituir o tempo limite padrão

Para substituir o tempo limite padrão, adicione o seguinte ao final do arquivo de configuração. Os testes longos devem 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 ao 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ê já tenha concluído a configuração de um ambiente de SDV funcional.

Configure o ambiente

O framework não inicia instâncias do Cloud Virtual Device (CVD), então você precisa 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 dispositivo virtual na nuvem (CVD):

    cvd create --config=sdv_core_instance1
    
  3. Inicie a segunda instância do dispositivo virtual na nuvem (CVD, na sigla em inglês) para testes com várias VMs:

    cvd create --config=sdv_core_instance2
    
  4. Inicie a terceira instância do dispositivo virtual na nuvem (CVD, na sigla em inglês) para testes com várias VMs:

    cvd create --config=sdv_core_instance3
    

Executar 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:

Executar 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

Executar 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

Executar 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