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:
moblyabsl-pyObrigatório para usar a parametrização em testes.pexpectNecessário para a funcionalidade de comandos interativos.ptyprocessNecessá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.
Copie o conteúdo do modelo:
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
Atualize
{MODULE}com o nome do módulo do seu teste.Adicione
com.android.tradefed.targetprep.PushFilePreparera 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.
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
- Exemplo de teste:
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.
Configure o ambiente e inicie o destino do SDV:
. build/envsetup.sh lunch <TARGET>Inicie a primeira instância do dispositivo virtual na nuvem (CVD):
cvd create --config=sdv_core_instance1Inicie 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_instance2Inicie 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.
- Criar CATBox:
m catbox - (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