Testy oprzyrządowania

Najpierw przeczytaj Przetestuj swoją aplikację na stronie developer.android.com. Należy pamiętać, że istnieją pewne różnice w sposobie wykorzystania 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 wyposażony w instancję Instrumentation , która zapewnia dostęp do kontekstu aplikacji i interfejsów API w celu manipulowania testowanym procesem aplikacji.

Kluczowe idee

  • instrumentacja musi zostać zadeklarowana w pakiecie aplikacji ze znacznikiem <instrumentation> zagnieżdżonym pod znacznikiem <manifest> manifestu pakietu aplikacji.
  • manifest pakietu aplikacji może technicznie zawierać wiele znaczników <instrumentation> , chociaż nie jest to powszechnie używane w ten sposób.
  • każde <instrumentation> musi zawierać:
    • atrybut android:name : powinna to być nazwa podklasy Instrumentation zawartej w aplikacji testowej, którą zazwyczaj jest używany program uruchamiający testy, np.: android.support.test.runner.AndroidJUnitRunner
    • należy zdefiniować 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 względem usług frameworkowych:

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

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

  2. Postępuj 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. Zobacz frameworks/base/core/tests/coretests/ jako przykład. Zwróć uwagę, że te linie 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 korzystasz z Tradefed, zainstaluj ręcznie i uruchom testy:

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

      1. wszystkie testy w aplikacji

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

        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 wyraźnie potwierdzić wynik pozytywny lub niepowodzenie przy użyciu interfejsów API JUnit ; ponadto wszelkie nieprzechwycone wyjątki również spowodują awarię funkcjonalną.

Aby emitować metryki wydajności, kod testowy może wywołać Instrumentation#sendStatus w celu wysłania listy par klucz-wartość. Ważne jest, aby pamiętać, że:

  1. metryki mogą być liczbami całkowitymi lub zmiennoprzecinkowymi
  2. wszelkie wartości inne niż numeryczne zostaną odrzucone
  3. Twój testowy plik apk może być testem funkcjonalnym lub testem metryk, jednak mieszanie obu nie jest obecnie obsługiwane