Automatyzacja testów interfejsu

Testowanie interakcji z użytkownikiem pomaga zapewnić, że użytkownicy nie będą mieli nieoczekiwanego wyniku ani nie będą mieli problemów podczas korzystania z aplikacji. Jeśli chcesz sprawdzić, czy interfejs użytkownika aplikacji działa prawidłowo, powinieneś wyrobić sobie nawyk tworzenia testów interfejsu użytkownika.

Jednym z podejść do testowania interfejsu jest przeprowadzenie przez testera zestawu operacji przez użytkownika w aplikacji docelowej i sprawdzenie, czy działa ona prawidłowo. Takie ręczne podejście może jednak być czasochłonne i obarczone ryzykiem popełnienia błędu. Bardziej wydajnym podejściem jest pisanie testów UI w taki sposób, aby działania użytkownika były wykonywane automatycznie. Automatyczne podejście pozwala szybko i rzetelnie przeprowadzać testy w powtarzalny sposób.

Testy UI uruchamiają aplikację (lub jej część), a następnie symulują interakcje użytkownika, aby sprawdzić, czy aplikacja zareagowała prawidłowo. Są to testy integracji, które mogą obejmować od weryfikacji działania małego komponentu po testy nawigacji obejmujące cały proces użytkownika. Są one przydatne do sprawdzania regresji i weryfikacji zgodności z różnymi poziomami interfejsu API i urządzeniami fizycznymi.

Przeprowadzanie testów interfejsu użytkownika

  • Aby uruchomić przetestowanie interfejsu użytkownika za pomocą Android Studio, zaimplementuj kod testowy w osobnym folderze testów Androida – src/androidTest/java. Wtyczka Gradle dla Androida tworzy aplikację testową na podstawie kodu testowego, a następnie wczytuje ją na tym samym urządzeniu co aplikację docelową. W kodzie testowym możesz używać frameworków testowania interfejsu użytkownika, aby symulować interakcje użytkownika z aplikacją docelową. Dzięki temu możesz wykonywać zadania testowe obejmujące konkretne scenariusze użycia.
  • Testy UI na JVM możesz też przeprowadzać za pomocą Robolectric.

Konfiguracja testów i architektura

Architektura aplikacji powinna umożliwiać zastępowanie jej części w testach podwójnymi testami. Należy też używać bibliotek, które udostępniają narzędzia ułatwiające testowanie. Możesz na przykład zastąpić moduł repozytorium danych jego wersją działającą w pamięci, która udostępnia testowi fałszywe, deterministyczne dane.

Schematy architektury produkcyjnej i testowej. Diagram produkcyjny przedstawia lokalne i zdalne źródła danych, które dostarczają dane do repozytorium, a to z kolei przesyła je asynchronicznie do interfejsu. Diagram testowania pokazuje fałszywe repozytorium, które synchronicznie przekazuje dane do interfejsu.
Ilustracja 3. Testowanie interfejsu przez zastępowanie jego zależności fałszywymi elementami.

Zalecane podejście do zastępowania zależności to wstrzykiwanie zależności. Możesz stworzyć własny system ręcznie, ale zalecamy użycie do tego celu frameworku DI, takiego jak Hilt.

Dlaczego warto testować interfejsy użytkownika automatycznie?

Aplikacja na Androida może być kierowana na tysiące różnych urządzeń z wielu poziomów interfejsu API i w różnych formach, a wysoki poziom dostosowywania, jaki system operacyjny oferuje użytkownikom, oznacza, że aplikacja może być renderowana nieprawidłowo lub może się na niektórych urządzeniach zawieszać.

Testowanie interfejsu użytkownika umożliwia testowanie zgodności, czyli sprawdzanie zachowania aplikacji w różnych kontekstach. Testy UI możesz przeprowadzać na urządzeniach, które różnią się:

  • Poziom interfejsu API: 21, 25 i 30.
  • Język: angielski, arabski i chiński.
  • Orientacja: pionowa, pozioma.

Aplikacje powinny też sprawdzać zachowanie poza telefonami. Testy należy przeprowadzić na tabletach, składanych urządzeniach i na innych urządzeniach. Dowiedz się więcej o testowaniu różnych rozmiarów ekranów.

Typy testów interfejsu użytkownika

W tej sekcji omówiono 2 typy testów interfejsu użytkownika:

  • Testy zachowania analizują hierarchię interfejsu, aby stwierdzać właściwości elementów interfejsu.
  • Testy zrzutów ekranu polegają na robieniu zrzutów ekranu interfejsu i porównywaniu ich z poprzednio zatwierdzonymi obrazami.