Starsze narzędzie monkeyrunner
udostępnia interfejs API do pisania programów, które sterują urządzeniami z Androidem lub emulatorami spoza kodu Androida.
Narzędzie monkeyrunner
jest przeznaczone przede wszystkim do testowania aplikacji i urządzeń na poziomie funkcjonalności lub platformy oraz uruchamianie pakietów testów jednostkowych. Może być jednak wykorzystywane do innych celów. Za pomocą monkeyrunner
możesz napisać program w Pythonie, który instaluje aplikację na Androida lub pakiet testowy, uruchamia ją, wysyła naciśnięcia klawiszy, wykonuje zrzuty ekranu interfejsu użytkownika i zapisuje zrzuty ekranu na stacji roboczej.
Uwaga: interfejs API monkeyrunner
nie jest obsługiwany. Zamiast tego zalecamy skorzystanie z narzędzia Indeksowanie aplikacji lub Automatyzatora interfejsu użytkownika.
Narzędzie monkeyrunner
nie jest związane z interfejsem użytkownika/małpką do ćwiczenia aplikacji, znaną też jako narzędzie monkey
. Narzędzie monkey
działa w powłoce adb
bezpośrednio na urządzeniu lub w emulatorze i generuje pseudolosowe strumienie zdarzeń użytkownika i systemu. Dla porównania narzędzie monkeyrunner
steruje urządzeniami i emulatorami na stacji roboczej przez wysyłanie określonych poleceń i zdarzeń z interfejsu API.
Podczas testowania aplikacji na Androidzie narzędzie monkeyrunner
udostępnia te funkcje:
-
Sterowanie wieloma urządzeniami: interfejs API
monkeyrunner
może zastosować co najmniej 1 pakiet testowy na wielu urządzeniach lub emulatorach. Możesz fizycznie podłączyć wszystkie urządzenia lub uruchomić wszystkie emulatory (albo oba) jednocześnie, połączyć się z nimi za pomocą oprogramowania programowego i przeprowadzić co najmniej 1 test. Możesz też automatycznie uruchomić konfigurację emulatora, przeprowadzić co najmniej 1 test, a potem wyłączyć emulator. -
Testy funkcjonalne:
monkeyrunner
może przeprowadzać automatyczny test od początku do końca aplikacji na Androida. Wpisz wartości wejściowe za pomocą kombinacji klawiszy lub zdarzeń dotknięcia, a wyniki wyświetlą się w postaci zrzutów ekranu. -
Testowanie regresji:
monkeyrunner
może sprawdzić stabilność aplikacji, uruchamiając aplikację i porównując jej zrzuty ekranu z zestawem zrzutów ekranu, o których wiadomo, że jest prawidłowe. -
Rozszerzona automatyzacja:
monkeyrunner
to zestaw narzędzi interfejsu API, dlatego możesz opracować system modułów i programów w języku Python do sterowania urządzeniami z Androidem. Poza korzystaniem z interfejsu APImonkeyrunner
możesz też używać standardowych modułówos
isubprocess
Pythona do wywoływania narzędzi dla Androida, takich jak Android Debug Bridge.Do interfejsu API
monkeyrunner
możesz też dodawać własne klasy. Szczegółowo opisujemy to w sekcji Rozszerzanie aplikacji Monkeyrunner za pomocą wtyczek.
Narzędzie monkeyrunner
używa
Jython – implementacji Pythona wykorzystującej język programowania Java. Jython umożliwia łatwą interakcję interfejsu API monkeyrunner
z platformą Androida. Dzięki Jython możesz korzystać ze składni Pythona, aby uzyskać dostęp do stałych, klas i metod interfejsu API.
Prosty program „małkeyrunner”
Oto prosty program monkeyrunner
, który łączy się z urządzeniem i tworzy obiekt MonkeyDevice
. Za pomocą obiektu MonkeyDevice
program instaluje pakiet aplikacji na Androida, uruchamia jedną ze swoich działań i wysyła do niej kluczowe zdarzenia.
Następnie program robi zrzut ekranu z wynikiem i tworzy obiekt MonkeyImage
.
Z tego obiektu program zapisuje 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 API Monkeyrunner
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ę łączeniamonkeyrunner
z urządzeniem lub emulatorem. Udostępnia również metody tworzenia interfejsów użytkownika dla programumonkeyrunner
i wyświetlania wbudowanej pomocy. -
MonkeyDevice
: reprezentuje urządzenie lub emulator. Ta klasa udostępnia metody instalowania i odinstalowywania pakietów, uruchamiania aktywności oraz wysyłania do aplikacji zdarzeń z klawiatury lub dotknięcia. Korzystasz z niej również do uruchamiania pakietów testowych. -
MonkeyImage
: reprezentuje zrzut ekranu. Ta klasa udostępnia metody przechwytywania ekranu, konwertowania obrazów bitmapowych na różne formaty, porównywania 2 obiektówMonkeyImage
oraz zapisywania obrazu w pliku.
W programie w języku Python dostęp do każdej klasy możesz uzyskać w postaci modułu. Narzędzie monkeyrunner
nie importuje tych modułów automatycznie. Aby zaimportować moduł, użyj instrukcji from
w Pythonie:
from com.android.monkeyrunner import <module>
Gdzie <module>
to nazwa zajęć, które chcesz zaimportować. W tej samej instrukcji from
można zaimportować więcej niż 1 moduł, rozdzielając nazwy modułów przecinkami.
Graj jako łowca małp
Programy monkeyrunner
możesz uruchamiać z poziomu pliku lub wpisując instrukcje monkeyrunner
w sesji interaktywnej. Oba te działania wykonujesz, wywołując polecenie monkeyrunner
, które znajduje się w podkatalogu tools/
katalogu pakietu SDK.
Jeśli jako argument podasz nazwę pliku, polecenie monkeyrunner
uruchomi zawartość pliku jako program w Pythonie. W przeciwnym razie uruchomi sesję interaktywną.
Oto składnia polecenia monkeyrunner
:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
W tabeli 1 znajdziesz informacje o flagach i argumentach monkeyrunner
.
Argument | Opis |
---|---|
-plugin <plugin_jar>
|
(Opcjonalnie) Określa plik JAR zawierający wtyczkę do monkeyrunner .
Więcej informacji o wtyczkach monkeyrunner znajdziesz w sekcji Rozszerzanie programu monkeyrunner za pomocą wtyczek.
Aby określić więcej niż 1 plik, umieść argument wielokrotnie.
|
<program_filename>
|
Jeśli podasz ten argument, polecenie monkeyrunner uruchomi zawartość pliku jako program w Pythonie. W przeciwnym razie polecenie uruchamia sesję interaktywną.
|
<program_options>
|
(Opcjonalnie) Flagi i argumenty programu w tym języku: <program_file> |
wbudowana pomoc „małkeyrunner”
Aby wygenerować dokumentację API dla monkeyrunner
, uruchom polecenie:
monkeyrunner help.py <format> <outfile>
Argumenty to:
-
<format>
totext
w przypadku zwykłego tekstu lubhtml
w przypadku danych wyjściowych HTML. -
<outfile>
to nazwa kwalifikująca się do ścieżki dla pliku wyjściowego.
Rozszerz aplikację Monkeyrunner za pomocą wtyczek
Możesz rozszerzyć interfejs API monkeyrunner
o klasy pisane w Javie i wbudować w pliki JAR. Możesz użyć tej funkcji, aby rozszerzyć interfejs API monkeyrunner
o własne klasy lub rozszerzyć istniejące klasy. Za pomocą tej funkcji możesz też zainicjować środowisko monkeyrunner
.
Aby udostępnić wtyczkę do monkeyrunner
, wywołaj polecenie monkeyrunner
z argumentem -plugin <plugin_jar>
opisanym w tabeli 1.
W kodzie wtyczki możesz zaimportować i rozszerzyć główne klasy monkeyrunner
MonkeyDevice
, MonkeyImage
i MonkeyRunner
w com.android.monkeyrunner
(zapoznaj się z sekcją na temat interfejsu monkeyrunner
API).
Pamiętaj, że wtyczki nie dają dostępu do pakietu Android SDK. Nie można importować pakietów, takich jak com.android.app
. Wynika to z tego, że monkeyrunner
wchodzi w interakcję z urządzeniem lub emulatorem poniżej poziomu interfejsów API platformy.
Klasa startowa 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 pliku JAR. Jako wartości wpisz nazwę klasy, która ma być uruchamiana przy uruchamianiu. Ten 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 wdrożyć dyrektywę com.google.common.base.Predicate<PythonInterpreter>
. Ta klasa konfiguruje na przykład pewne 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; } }