Configurazione di test complessa

Alcuni moduli di test potrebbero richiedere passaggi di configurazione e smontaggio personalizzati che non possono essere eseguiti all'interno dello scenario di test stesso. Esempi tipici potrebbero includere:

  • installare altri APK (oltre all'APK di test)
  • trasferire alcuni file sul dispositivo
  • esegui comandi (ad es. adb shell pm...)

In passato, i team dei componenti di solito ricorrevano alla scrittura di un test lato host per eseguire queste attività, il che richiede la comprensione dell'infrastruttura Trade Federation e in genere aumenta la complessità di un modulo di test .

Prendendo in prestito da CTS, abbiamo introdotto il concetto di configurazione del modulo di test per supportare queste attività. L'elenco delle attività comuni riportato sopra può essere ottenuto con poche righe di configurazione. Per la massima flessibilità, puoi anche implementare il tuo preparatore di destinazione, come definito da ITargetPreparer o ITargetCleaner e configurarli per l'utilizzo nella tua configurazione del modulo di test.

Un file di configurazione del modulo di test per un modulo di test è un file XML obbligatorio aggiunto alla cartella di origine del modulo di primo livello, denominato "AndroidTest.xml". Il file XML segue il formato di un file di configurazione utilizzato dal framework di automazione dei test Trade Federation. Attualmente, i tag principali gestiti tramite le configurazioni del modulo di test sono "target_preparer" e "test".

Target preparers

Un tag "target_preparer", come suggerisce il nome, definisce un preparatore del target (vedi ITargetPreparer) che offre un metodo di configurazione, chiamato prima dell'esecuzione del modulo di test per il test; e se la classe a cui viene fatto riferimento nel tag "target_preparer" implementa anche ITargetCleaner, il relativo metodo di smontaggio verrà richiamato al termine del modulo di test.

Per utilizzare la configurazione del modulo comune integrato, aggiungi un nuovo file "AndroidTest.xml" nella cartella di primo livello del modulo di test e inserisci i seguenti contenuti:

<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>

Ad esempio, possiamo aggiungere i seguenti tag di opzione (nel commento "insert" sopra):

    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put secure accessibility_enabled 1" />
        <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
    </target_preparer>

Le opzioni configureranno l'ambiente di test in modo che:

  1. prima che venga richiamato il modulo di test, esegui il comando shell "settings put secure accessibility_enabled 1" sul dispositivo
  2. Al termine del modulo di test, esegui il comando shell "settings put secure accessibility_enabled 0"

In questo esempio specifico, l'accessibilità viene attivata/disattivata prima/dopo l'esecuzione del modulo di test, rispettivamente. Dopo aver mostrato un semplice esempio, è necessario fornire maggiori dettagli su come viene utilizzato il tag "option". Come mostrato sopra, il tag può avere due attributi: nome e valore. L'attributo name deve fare riferimento a una delle opzioni offerte dal preparatore.

Lo scopo esatto del campo Valore dipende da come il preparatore ha definito l'opzione: può essere una stringa, un numero, un valore booleano o persino un percorso del file. Ecco un riepilogo dei tre preparatori di target comuni:

  • Nome classe: PushFilePreparer

    • short name: push-file
    • function: inserisce file arbitrari nella cartella dello scenario di test nella destinazione sul dispositivo
    • Note:
      • questo preparatore può eseguire il push da cartella a cartella o da file a file; ciò significa che non puoi eseguire il push di un file in una cartella sul dispositivo: devi specificare anche il nome del file di destinazione nella cartella
    • options:
      • push-file: una specifica push che indica il file locale e il percorso in cui deve essere inviato sul dispositivo. Può essere ripetuto. Se più file sono configurati per essere inviati allo stesso percorso remoto, verrà inviato l'ultimo.
      • push: (obsoleto) una specifica push, formattata come '/path/to/srcfile.txt->/path/to/destfile.txt' o '/path/to/srcfile.txt->/path/to/destdir/'. Può essere ripetuta. Questo percorso può essere relativo alla directory del modulo di test o alla directory di output stessa.
      • post-push:un comando da eseguire sul dispositivo (con `adb shell <your command>`) dopo che sono stati tentati tutti i push. Un caso d'uso tipico sarebbe l'utilizzo di chmod per le autorizzazioni
  • Nome classe: InstallApkSetup

    • Nome breve:install-apk
    • function: inserisce file APK arbitrari nella destinazione sul dispositivo
    • opzioni:
      • test-file-name: il nome dell'APK da installare sul dispositivo.
      • install-arg: argomenti aggiuntivi da passare al comando pm install, incluso il trattino iniziale, ad es. "-d". Può essere ripetuto
  • Nome classe: RunCommandTargetPreparer

    • nome breve: run-command
    • function: esegue comandi shell arbitrari prima o dopo l'esecuzione del modulo di test
    • opzioni:
      • run-command: comando adb shell da eseguire. Può essere ripetuto
      • teardown-command: comando shell adb da eseguire durante la fase di smontaggio. Può essere ripetuto

Classe di test

Una classe di test è la classe Trade Federation da utilizzare per eseguire il test.

<test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="android.test.example.helloworld"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>

Ecco tre classi di test comuni:

  • Nome del corso: GTest

    • short name: gtest
    • function: Un test che esegue un pacchetto di test nativo sul dispositivo specificato.
    • opzioni:
      • native-test-device-path: il percorso sul dispositivo in cui si trovano i test nativi.
  • Nome della classe: InstrumentationTest

    • short name: instrumentation
    • function: Un test che esegue un pacchetto di test di instrumentazione sul dispositivo specificato
    • opzioni:
      • package: il nome del pacchetto manifest dell'applicazione di test Android da eseguire.
      • class: il nome della classe di test da eseguire.
      • method: il nome del metodo di test da eseguire.
  • nome della classe: AndroidJUnitTest

    • function: Un test che esegue un pacchetto di test di strumentazione sul dispositivo specificato utilizzando android.support.test.runner.AndroidJUnitRunner. Questo è il modo principale per eseguire un test di strumentazione.