SDV Test Framework

Questo documento fornisce una panoramica del framework di test SDV e ti guida nella configurazione e nell'esecuzione dei test. Utilizza il framework di test SDV per i test end-to-end. Lo strumento si basa su Mobly e i test vengono scritti in Python.

Configura l'ambiente

Questo documento presuppone che tu abbia già configurato la workstation per SDV. Per eseguire i test del framework, installa virtualenv.

Dipendenze Python

L'approccio consigliato per la gestione delle dipendenze in Android è quello di creare pacchetti di test, Python e relative dipendenze come eseguibile utilizzando la configurazione di build. Devi seguire questo approccio nel repository di test SDV.

La libreria SDV Test Framework fornisce queste dipendenze per impostazione predefinita:

  • mobly
  • absl-py Obbligatorio per utilizzare la parametrizzazione nei test.
  • pexpect Obbligatorio per la funzionalità dei comandi interattivi.
  • ptyprocess Obbligatorio per la funzionalità dei comandi interattivi.

Se hai bisogno di dipendenze specifiche per il test, includile nel file Android.bp del test.

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

Tipi di verifica del sistema

Crea test di sistema utilizzando SDV Test Framework. Il framework distingue i seguenti tipi. Classifica correttamente i test:

  • Test di esempio:esegui i servizi di esempio SDV e verifica che il risultato corrisponda all'output previsto.
  • Test end-to-end:non utilizzare i servizi di esempio SDV.
  • Test di lunga durata: progettati per periodi di esecuzione prolungati.
  • Test delle prestazioni:utilizza la libreria perfetto.
  • Test hardware:progettati per essere eseguiti esclusivamente su un dispositivo fisico, non in Cuttlefish (CF).

Creare un test

Tutti i test scritti utilizzando il framework devono trovarsi nel repository di test. La posizione esatta del test dipende dal tipo.

Configurare un test

Configura tutti i test in modo che vengano eseguiti utilizzando sia atest che CATBox.

Configura atest

Il framework fornisce modelli per test di una, due e tre macchine virtuali (VM). Aggiungi quanto segue al tuo file Android.bp:

Una VM

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

Due VM

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

Tre VM

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

Il modello predefinito è sufficiente per la maggior parte dei test. Evita di creare configurazioni personalizzate a meno che non ci sia un motivo valido.

Aggiorna il timeout predefinito

Il timeout predefinito dovrebbe essere sufficiente per eseguire i test localmente.

Se il test non riesce localmente a causa di un timeout, valuta la possibilità di suddividerlo in test diversi. Test molto lunghi con molti scenari di test possono causare un collo di bottiglia nell'esecuzione.

Se devi impostare un timeout superiore a quello predefinito, continua a leggere.

Eseguire l'override del timeout predefinito

Il framework non supporta l'estensione del modello per l'esecuzione di atest. Pertanto, utilizza i modelli forniti che offrono un timeout esteso.

Test lungo di una VM

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

Test lungo di due VM

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

Aggiungi un commento che indichi chiaramente lo scopo dell'utilizzo di questo modello e spieghi perché è necessario il tempo aggiuntivo (ad esempio, se il test richiede il download di un artefatto che richiede un determinato periodo di tempo).

Eseguire il push dei file su un dispositivo

I passaggi seguenti descrivono come eseguire il push dei file su un dispositivo per le configurazioni atest.

Eseguire il push dei file su un dispositivo

Il framework non supporta l'estensione del modello per l'esecuzione di atest. Pertanto, devi creare un file AndroidTest.xml che sostituisca completamente il modello predefinito e includa le opzioni target_preparer corrispondenti per i dispositivi.

  1. Copia i contenuti del modello:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. Aggiorna {MODULE} con il nome del modulo del test.

  3. Aggiungi com.android.tradefed.targetprep.PushFilePreparer a ogni 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>

Configura CATBox

Per eseguire il test come suite, è necessaria una configurazione CATBox.

  1. Crea un nuovo file di configurazione in libraries/sdv/sdv_catbox/res/config/ e segui queste convenzioni di denominazione:

    • Test di esempio: sdv-sample-<NAME>-test.xml
    • Test end-to-end: sdv-e2e-<NAME>-test.xml
    • Test di lunga durata: sdv-long-running-<NAME>-test.xml
    • Test delle prestazioni: sdv-performance-<NAME>-test.xml
    • Test hardware: sdv-hw-<NAME>-test.xml
  2. Aggiungi le informazioni corrispondenti in base al tipo di test:

Configurazione di test di una 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>

Configurazione di test di due VM

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

Configurazione di test di tre VM

<!-- 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>

Il modello predefinito è sufficiente per la maggior parte dei test. Evita di creare configurazioni personalizzate a meno che non ci sia un motivo valido.

Aggiorna il timeout predefinito

Se il timeout predefinito non è sufficiente per il test, puoi ignorarlo.

Eseguire l'override del timeout predefinito

Per eseguire l'override del timeout predefinito, aggiungi quanto segue alla fine del file di configurazione. I test lunghi devono avere un timeout massimo di 10 minuti.

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

Eseguire il push dei file su un dispositivo

La sezione seguente descrive come eseguire il push dei file su un dispositivo durante la configurazione di CATBox.

Eseguire il push dei file su un dispositivo

Per eseguire il push dei file sul dispositivo corrispondente, aggiungi la seguente configurazione dopo l'opzione 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 hai bisogno dei file su ogni dispositivo, aggiungi la configurazione per ogni dispositivo (ad esempio, name=device1, name=device2).

Esecuzione del test

Queste istruzioni presuppongono che tu abbia completato la configurazione di un ambiente SDV funzionante.

Configura l'ambiente

Il framework non avvia le istanze di Cloud Virtual Device (CVD), quindi devi avviarle prima di eseguire i test.

  1. Configura l'ambiente e avvia la destinazione SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Avvia la prima istanza di Cloud Virtual Device (CVD):

    cvd create --config=sdv_core_instance1
    
  3. Avvia la seconda istanza di Cloud Virtual Device (CVD) (per i test su più VM):

    cvd create --config=sdv_core_instance2
    
  4. Avvia la terza istanza di Cloud Virtual Device (CVD) (per i test su più VM):

    cvd create --config=sdv_core_instance3
    

Esegui atest

atest <TestModuleName>

Esegui CATBox

Questi comandi presuppongono che tu ti trovi nella directory radice del repository.

  1. Build CATBox: m catbox
  2. (Facoltativo) Visualizza tutti i piani di test SDV disponibili in CATBox:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

Esegui un test:

Esegui un test della 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

Esegui il test di due VM

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

Esegui il test di tre VM

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