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:
moblyabsl-pyObrigatório para usar a parametrização em testes.pexpectObrigatório para a funcionalidade de comandos interativos.ptyprocessObrigató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.
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 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 a CATBox
Para executar o teste como um conjunto, é necessária uma configuração do CATBox.
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
- Teste de amostra:
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.
Configure o ambiente e inicie o destino do SDV:
. build/envsetup.sh lunch <TARGET>Inicie a primeira instância do CVD:
cvd create --config=sdv_core_instance1Inicie a segunda instância do CVD (para testes de várias VMs):
cvd create --config=sdv_core_instance2Inicie 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.
- 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:
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:6520Execute 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:6521Execute 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