Libreria SDV Test Framework

Questa pagina fornisce una panoramica della libreria 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; i test vengono scritti in Python.

Scegli un approccio di test

Prima di scrivere un test, scegli l'esecutore di test che corrisponde all'ambito di verifica:

Ambito del test Tipo di modulo Soong Strumento di esecuzione Quando usare la funzionalità
Test delle unità del bundle di servizi rust_test, rust_test_host o cc_test atest Verifica la logica di business, le trasformazioni dei dati o i crate helper isolati di Rust o C++ sull'host o su una singola macchina virtuale (VM) Cuttlefish.
Test di sistema end-to-end e multi-VM python_test_host (framework di test SDV) atest o CATBox Verifica l'orchestrazione del ciclo di vita del bundle di servizi, la comunicazione tra VM, il bridging SOME/IP o i target hardware su una o tre VM.

Configura l'ambiente

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

Dipendenze Python

L'approccio consigliato per la gestione delle dipendenze in Android è pacchettizzare i test, Python e le relative dipendenze come eseguibile utilizzando la configurazione di compilazione. Devi seguire questo approccio nel repository di test SDV.

La libreria del framework di test SDV 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 i test, includile nel file Android.bp del test:

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

Tipi di verifica del sistema

Puoi creare verifiche del sistema utilizzando il framework di test SDV. Il framework distingue tra 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 E2E: 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 un Cuttlefish (CF).

Crea un test

Tutti i test scritti utilizzando il framework devono trovarsi nel repository di test. La posizione esatta del test dipende dal tipo. Per i percorsi delle directory, i modelli di classi di test Python, le regole Android.bp e le linee guida per la programmazione Mobly, consulta Creazione di verifica del sistema SDV.

Configura un test

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

Configura atest

Il framework fornisce modelli per test con una, due e tre 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 template 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.

Esegui l'override del timeout predefinito

Il framework non supporta l'estensione del template 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 template e spieghi perché è necessario il tempo esteso (ad esempio, se il test richiede il download di un artefatto che richiede un periodo di tempo specifico).

Esegui il push dei file su un dispositivo

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

Esegui il push dei file su un dispositivo

Il framework non supporta l'estensione del template 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 E2E: sdv-e2e-<NAME>-test.xml
    • Test a lunga esecuzione: sdv-long-running-<NAME>-test.xml
    • Test delle prestazioni: sdv-performance-<NAME>-test.xml
    • Test dell'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 con 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 con tre VM:

    <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 template 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 eseguirne l'override.

Esegui 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" />

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

Esegui 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 i file sono necessari 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 il target SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Avvia la prima istanza CVD:

    cvd create --config=sdv_core_instance1
    
  3. Avvia la seconda istanza CVD (per i test multi-VM):

    cvd create --config=sdv_core_instance2
    
  4. Avvia la terza istanza CVD (per i test multi-VM):

    cvd create --config=sdv_core_instance3
    

Esegui atest

atest <TestModuleName>

Esegui CATBox

Questi comandi presuppongono che tu sia nella directory root del repository.

  1. Crea 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 con 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