Testy oprzyrządowania

Najpierw przeczytaj Przetestuj swoją aplikację na developer.android.com. Zwróć uwagę, że istnieją pewne różnice w sposobie używania testów oprzyrządowania w testowaniu platformy.

Podsumowując, test oprzyrządowania zapewnia specjalne środowisko wykonywania testów uruchamiane za pomocą polecenia am instrument , w którym docelowy proces aplikacji jest ponownie uruchamiany i inicjowany z podstawowym kontekstem aplikacji, a wątek oprzyrządowania jest uruchamiany wewnątrz maszyny wirtualnej procesu aplikacji. Twój kod testowy rozpoczyna wykonywanie w tym wątku Instrumentacji i jest dostarczany z instancją Instrumentation , która zapewnia dostęp do kontekstu aplikacji i interfejsów API w celu manipulowania testowanym procesem aplikacji.

Kluczowe idee

  • oprzyrządowanie musi być zadeklarowane w pakiecie aplikacji z tagiem <instrumentation> zagnieżdżonym pod tagiem <manifest> manifestu pakietu aplikacji.
  • manifest pakietu aplikacji może technicznie zawierać wiele tagów <instrumentation> , chociaż nie jest to powszechnie używane w ten sposób.
  • każdy <instrumentation> musi zawierać:
    • atrybut android:name : powinien to być nazwa podklasy Instrumentation zawartej w aplikacji testowej, która zazwyczaj jest używanym modułem uruchamiającym testy, np.: android.support.test.runner.AndroidJUnitRunner
    • musi być zdefiniowany atrybut android:targetPackage . Jego wartość powinna być ustawiona na testowany pakiet aplikacji.

Podsumowanie kroków

  1. Poniżej znajdują się typowe miejsca docelowe testów hermetycznych usług ramowych:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    Jeśli dodajesz zupełnie nowy moduł oprzyrządowania dla swojego komponentu, zobacz

  2. Zgodnie z istniejącą konwencją, jeśli dodajesz testy do jednej z powyższych lokalizacji. Jeśli konfigurujesz nowy moduł testowy, postępuj zgodnie z konfiguracją AndroidManifest.xml i Android.mk w jednej z powyższych lokalizacji

  3. Przykład można znaleźć w frameworks/base/core/tests/coretests/ . Zwróć uwagę, że te wiersze instalują dodatkowe aplikacje:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. Nie zapomnij oznaczyć swojego testu jako @SmallTest , @MediumTest lub @LargeTest

  5. Zbuduj moduł testowy za pomocą m, np.:

    m FrameworksCoreTests
    
  6. Uruchom testy:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Jeśli nie używasz TradeFed, ręcznie zainstaluj i uruchom testy:

    1. Zainstaluj wygenerowany apk:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. Uruchom testy z różnymi opcjami:

      1. wszystkie testy w apk

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. wszystkie testy w ramach określonego pakietu Java

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. wszystkie testy w ramach określonej klasy

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. określoną metodę testową

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

Twój test może jawnie stwierdzić, czy przeszedł pomyślnie, czy nie, używając interfejsów API JUnit ; ponadto wszelkie nieprzechwycone wyjątki również spowodują awarię funkcjonalną.

Aby emitować metryki wydajności, kod testowy może wywoływać funkcję Instrumentation#sendStatus w celu wysłania listy par klucz-wartość. Należy zauważyć, że:

  1. metryki mogą być liczbami całkowitymi lub zmiennoprzecinkowymi
  2. wszelkie wartości nieliczbowe zostaną odrzucone
  3. Twoja aplikacja testowa może być testami funkcjonalnymi lub testami metryk, jednak mieszanie obu nie jest obecnie obsługiwane