Espresso wieloprocesowe

W miarę rozwoju aplikacji warto umieścić na stronie niektóre jej komponenty w procesie innym niż główny proces aplikacji. Aby przetestować komponenty aplikacji w tych procesów innych niż domyślne, możesz skorzystać z funkcji Multiprocess Espresso. To narzędzie, dostępne na Androidzie 8.0 (poziom interfejsu API 26) i nowszym, umożliwia płynne testowanie interakcji z interfejsem aplikacji w całym procesie przy zachowaniu gwarancji synchronizacji Espresso.

Jeśli używasz Multiprocess Espresso, zachowaj tę wersję i zakres które warto wziąć pod uwagę:

  • Aplikacja musi być kierowana na Androida 8.0 (poziom interfejsu API 26) lub nowszego.
  • Narzędzie może testować tylko komponenty aplikacji uwzględnione w procesach w ramach od pakietu aplikacji. Nie może testować procesów zewnętrznych.

Korzystanie z narzędzia

Aby przetestować proces w aplikacji za pomocą Multiprocess Espresso, dodaj odwołanie do artefaktu espresso-remote w pliku build.gradle aplikacji:

app/build.gradle

Odlotowe

dependencies {
    ...
    androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1'
}

Kotlin

dependencies {
    ...
    androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1')
}

Musisz też dodać te elementy do pliku manifestu aplikacji androidTest:

  • Element <instrumentation> definiujący proces.
  • Element <meta-data> wskazujący, że chcesz użyć wieloprocesowego espresso.

Fragment kodu, który pokazuje, jak dodać takie elementy:

src/androidTest/AndroidManifest.xml

<manifest ... package="androidx.test.mytestapp.tests">
  <uses-sdk android:targetSdkVersion="27" android:minSdkVersion="14" />
  <instrumentation
    android:name="androidx.test.runner.AndroidJUnitRunner"
    android:targetPackage="androidx.test.mytestapp"
    android:targetProcesses="*">
    <meta-data
      android:name="remoteMethod"
      android:value="androidx.test.espresso.remote.EspressoRemote#remoteInit" />
  </instrumentation>
</manifest>

Poprzedni fragment kodu wskazuje platformę Androida, która ma zostać przetestowana każdego procesu w pakiecie aplikacji. Jeśli chcesz przetestować tylko część aplikacji, możesz podać listę rozdzielonych przecinkami Zamiast tego targetProcesses element:

<instrumentation
    ...
    android:targetProcesses=
            "androidx.test.mytestapp:myFirstAppProcessToTest,
             androidx.test.mytestapp:mySecondAppProcessToTest" ... />

Poznaj architekturę narzędzia

Gdy testujesz aplikację i uruchamiasz jej domyślny proces, możesz użyć interfejsu np. naciśnięcie przycisku, które rozpoczyna działanie w dodatkowej proces tworzenia konta. System wykonuje poniższe czynności, by włączyć przetwarzanie międzysieciowe testowanie z użyciem Espresso:

  1. Android Framework tworzy i uruchamia nowy proces zgodnie z do struktury nawigacyjnej. Każdy proces Instrumentation zawiera nową instancję AndroidJUnitRunner Na tym etapie 2 procesy narzędzi nie mogą komunikować się z każdym inne.
  2. Każdy AndroidJUnitRunner rejestruje Espresso jako platformę testowania.
  3. 2 instancje AndroidJUnitRunner uzgadniają połączenie, aby nawiązać połączenie. Tym samym raz, każdy AndroidJUnitRunner łączy wszystkie zarejestrowane klienty, takie jak Espresso, z odpowiednimi jak w innych procesach, dzięki czemu klienci mogą bezpośrednio między sobą kanałem komunikacji.
  4. Co AndroidJUnitRunner instancja nadal szuka nowo dodanych instancji instrumentacji i testuje klientów, tworząc w razie potrzeby dodatkowe kanały komunikacji.

Rysunek 1 ilustruje efekt tego procesu:

Rysunek 1. Nawiązywanie komunikacji między wieloma językami procesy instrumentacji – wieloprocesowe espresso

Dodatkowe materiały

Więcej informacji na ten temat znajdziesz w tych materiałach.