Starsze narzędzie monkeyrunner udostępnia interfejs API do pisania programów, które sterują urządzeniem z Androidem lub emulatorem spoza kodu Androida.
Narzędzie monkeyrunner jest przeznaczone głównie do testowania aplikacji i urządzeń na poziomie funkcjonalnym lub strukturalnym oraz do uruchamiania pakietów testów jednostkowych, ale możesz go używać do innych celów. Za pomocą monkeyrunner możesz napisać program w języku Python, który zainstaluje aplikację na Androida lub pakiet testowy, uruchomi go, wyśle do niego naciśnięcia klawiszy, zrobi zrzuty ekranu interfejsu użytkownika i zapisze je na stacji roboczej.
Ostrzeżenie: interfejs API monkeyrunner nie jest już obsługiwany. Zamiast tego zalecamy używanie platformy testowej UI Automator.
Narzędzie monkeyrunner nie jest powiązane z UI/Application Exerciser Monkey, znanym też jako narzędzie monkey. Narzędzie monkey działa w powłoce adb bezpośrednio na urządzeniu lub emulatorze i generuje pseudolosowe strumienie zdarzeń użytkownika i systemowych. W porównaniu z tym narzędzie monkeyrunner steruje urządzeniami i emulatorami z poziomu stacji roboczej, wysyłając określone polecenia i zdarzenia z interfejsu API.
monkeyrunner Narzędzie udostępnia te funkcje do testowania Androida:
-
Sterowanie wieloma urządzeniami: interfejs
monkeyrunnerAPI może stosować co najmniej jeden zestaw testów na wielu urządzeniach lub emulatorach. Możesz jednocześnie podłączyć wszystkie urządzenia lub uruchomić wszystkie emulatory (albo zrobić jedno i drugie), połączyć się z każdym z nich programowo, a następnie przeprowadzić co najmniej 1 test. Możesz też uruchomić konfigurację emulatora programowo, przeprowadzić co najmniej 1 test, a potem wyłączyć emulator. -
Testowanie funkcjonalne:
monkeyrunnermoże przeprowadzić automatyczny test aplikacji na Androida od początku do końca. Podajesz dane wejściowe za pomocą naciśnięć klawiszy lub zdarzeń dotykowych i wyświetlasz wyniki w postaci zrzutów ekranu. -
Testy regresyjne:
monkeyrunnermoże testować stabilność aplikacji, uruchamiając ją i porównując zrzuty ekranu z jej działania z zestawem zrzutów ekranu, które są prawidłowe. -
Rozszerzalna automatyzacja:
monkeyrunnerto zestaw narzędzi API, więc możesz opracować system modułów i programów opartych na Pythonie do sterowania urządzeniami z Androidem. Oprócz samego interfejsumonkeyrunnerAPI możesz używać standardowych modułów Pythonaosisubprocessdo wywoływania narzędzi Androida, takich jak Android Debug Bridge.Możesz też dodać własne zajęcia do interfejsu
monkeyrunnerAPI. Szczegółowe informacje znajdziesz w sekcji Rozszerzanie narzędzia monkeyrunner za pomocą wtyczek.
Narzędzie monkeyrunner korzysta z
Jythona, czyli implementacji Pythona, która używa języka programowania Java. Jython umożliwia interfejsowi API monkeyrunner łatwą interakcję z platformą Androida. Jython umożliwia dostęp do stałych, klas i metod interfejsu API za pomocą składni Pythona.
Prosty program monkeyrunner
Oto prosty program w języku monkeyrunner, który łączy się z urządzeniem i tworzy obiekt MonkeyDevice. Za pomocą obiektu MonkeyDevice program instaluje pakiet aplikacji na Androida, uruchamia jedno z jego działań i wysyła do niego kluczowe zdarzenia.
Program zrobi wtedy zrzut ekranu z wynikiem, tworząc obiekt MonkeyImage.
Program zapisuje z tego obiektu plik PNG zawierający zrzut ekranu.
# Imports the monkeyrunner modules used by this program. from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice # Connects to the current device, returning a MonkeyDevice object. device = MonkeyRunner.waitForConnection() # Installs the Android package. Notice that this method returns a boolean, so you can test # whether the installation worked. device.installPackage('myproject/bin/MyApplication.apk') # Sets a variable with the package's internal name. package = 'com.example.android.myapplication' # Sets a variable with the name of an Activity in the package. activity = 'com.example.android.myapplication.MainActivity' # Sets the name of the component to start. runComponent = package + '/' + activity # Runs the component. device.startActivity(component=runComponent) # Presses the Menu button. device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP) # Takes a screenshot. result = device.takeSnapshot() # Writes the screenshot to a file. result.writeToFile('myproject/shot1.png','png')
Interfejs monkeyrunner API
Interfejs monkeyrunner API znajduje się w 3 modułach w pakiecie com.android.monkeyrunner:
-
MonkeyRunner:Klasa metod narzędziowych dla programówmonkeyrunner. Ta klasa udostępnia metodę łączeniamonkeyrunnerz urządzeniem lub emulatorem. Udostępnia też metody tworzenia interfejsów programów i wyświetlania wbudowanej pomocy.monkeyrunner -
MonkeyDevice: Reprezentuje urządzenie lub emulator. Ta klasa udostępnia metody instalowania i odinstalowywania pakietów, uruchamiania Activity oraz wysyłania do aplikacji zdarzeń klawiatury lub dotyku. Za pomocą tej klasy możesz też uruchamiać pakiety testowe. -
MonkeyImage: Reprezentuje obraz zrzutu ekranu. Ta klasa udostępnia metody przechwytywania ekranów, konwertowania obrazów bitmapowych do różnych formatów, porównywania dwóch obiektówMonkeyImagei zapisywania obrazu w pliku.
W programie w Pythonie masz dostęp do każdej klasy jako modułu Pythona. Narzędzie monkeyrunner
nie importuje tych modułów automatycznie. Aby zaimportować moduł, użyj instrukcji from w języku Python:
from com.android.monkeyrunner import <module>
gdzie <module> to nazwa zajęć, które chcesz zaimportować. W tym samym wyrażeniu from możesz zaimportować więcej niż 1 moduł, oddzielając nazwy modułów przecinkami.
Uruchamianie narzędzia monkeyrunner
Programy monkeyrunner możesz uruchamiać z pliku lub wpisując instrukcje monkeyrunner w sesji interaktywnej. Aby to zrobić, wywołaj polecenie monkeyrunner, które znajduje się w podkatalogu tools/ katalogu pakietu SDK.
Jeśli podasz nazwę pliku jako argument, polecenie monkeyrunner uruchomi zawartość pliku jako program w Pythonie. W przeciwnym razie rozpocznie sesję interaktywną.
Oto składnia polecenia monkeyrunner:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
W tabeli 1 wyjaśniono flagi i argumenty monkeyrunner.
Tabela 1. monkeyrunner flagi i argumenty,
| Argument | Opis |
|---|---|
-plugin <plugin_jar>
|
(Opcjonalnie) Określa plik JAR zawierający wtyczkę do monkeyrunner.
Więcej informacji o monkeyrunnerwtyczkach znajdziesz w sekcji Rozszerzanie monkeyrunnera za pomocą wtyczek.
Aby określić więcej niż 1 plik, podaj argument kilka razy.
|
<program_filename>
|
Jeśli podasz ten argument, polecenie monkeyrunner uruchomi zawartość pliku jako program w Pythonie. W przeciwnym razie polecenie rozpocznie sesję interaktywną.
|
<program_options>
|
(Opcjonalnie) Flagi i argumenty programu w <program_file> |
Wbudowana pomoc monkeyrunner
Dokumentację interfejsu API monkeyrunner możesz wygenerować, uruchamiając to polecenie:
monkeyrunner help.py <format> <outfile>
Argumenty to:
-
<format>totextw przypadku danych wyjściowych w formacie zwykłego tekstu lubhtmlw przypadku danych wyjściowych w formacie HTML. -
<outfile>to nazwa pliku wyjściowego z pełną ścieżką.
Rozszerzanie narzędzia monkeyrunner za pomocą wtyczek
Możesz rozszerzyć interfejs monkeyrunner API o klasy napisane w języku Java i skompilowane w co najmniej 1 pliku JAR. Możesz użyć tej funkcji, aby rozszerzyć interfejs API monkeyrunner o własne klasy lub rozszerzyć istniejące klasy. Możesz też użyć tej funkcji do zainicjowania środowiska monkeyrunner.
Aby udostępnić wtyczkę usłudze monkeyrunner, wywołaj polecenie monkeyrunner z argumentem -plugin <plugin_jar> opisanym w tabeli 1.
W kodzie wtyczki możesz importować i rozszerzać główne klasy monkeyrunner, MonkeyDevice, MonkeyImage i MonkeyRunner w com.android.monkeyrunner (więcej informacji znajdziesz w sekcji dotyczącej interfejsu monkeyrunner API).
Pamiętaj, że wtyczki nie zapewniają dostępu do pakietu Android SDK. Nie możesz importować pakietów, takich jak com.android.app. Dzieje się tak, ponieważ monkeyrunner wchodzi w interakcję z urządzeniem lub emulatorem poniżej poziomu interfejsów API platformy.
Klasa uruchamiania wtyczki
Plik JAR wtyczki może określać klasę, która jest tworzona przed rozpoczęciem przetwarzania skryptu. Aby określić tę klasę, dodaj klucz MonkeyRunnerStartupRunner do pliku manifestu JAR. Jako wartość podaj nazwę klasy, która ma być uruchamiana przy uruchamianiu. Poniższy fragment kodu pokazuje, jak to zrobić w skrypcie kompilacji ant:
<jar jarfile="myplugin" basedir="${build.dir}"> <manifest> <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/> </manifest> </jar>
Aby uzyskać dostęp do środowiska wykonawczego narzędzia monkeyrunner, klasa startowa może zaimplementować com.google.common.base.Predicate<PythonInterpreter>. Na przykład ta klasa ustawia niektóre zmienne w domyślnej przestrzeni nazw:
Kotlin
package com.android.example import com.google.common.base.Predicate import org.python.util.PythonInterpreter class Main: Predicate<PythonInterpreter> { override fun apply(anInterpreter: PythonInterpreter): Boolean { /* * Examples of creating and initializing variables in the monkeyrunner environment's * namespace. During execution, the monkeyrunner program can refer to the variables * "newtest" and "use_emulator" * */ anInterpreter.set("newtest", "enabled") anInterpreter.set("use_emulator", 1) return true } }
Java
package com.android.example; import com.google.common.base.Predicate; import org.python.util.PythonInterpreter; public class Main implements Predicate<PythonInterpreter> { @Override public boolean apply(PythonInterpreter anInterpreter) { /* * Examples of creating and initializing variables in the monkeyrunner environment's * namespace. During execution, the monkeyrunner program can refer to the variables "newtest" * and "use_emulator" * */ anInterpreter.set("newtest", "enabled"); anInterpreter.set("use_emulator", 1); return true; } }