Das alte monkeyrunner
-Tool bietet eine API zum Schreiben von Programmen, die ein
Android-Gerät oder Emulator ohne Android-Code verwenden.
Das monkeyrunner
-Tool wurde hauptsächlich zum Testen von Apps und Geräten entwickelt
auf Funktions-/Framework-Ebene und zum Ausführen von Unit-Testsuites. Sie können jedoch
sie auch für andere Zwecke nutzen. Mit monkeyrunner
können Sie ein Python-Programm schreiben
die eine Android-App oder ein Testpaket installiert,
sie ausführt, Tastenanschläge sendet
erstellt Screenshots der Benutzeroberfläche und speichert Screenshots auf der Workstation.
<ph type="x-smartling-placeholder"></ph>
Achtung: Die monkeyrunner
API wird nicht gewartet. Wir empfehlen die Verwendung des
App Crawler-Tool oder
UI Automator (UI-Automator)
testen.
Das monkeyrunner
-Tool hat nichts mit dem
UI/Application Exerciser Monkey,
auch monkey
-Tool genannt. Das monkey
-Tool wird in einer
adb
-Shell direkt auf der
Gerät oder Emulator und generiert pseudo-zufällige Streams von Nutzer- und Systemereignissen. Im Vergleich dazu
steuert das monkeyrunner
-Tool Geräte und Emulatoren von einer Workstation aus, indem es
bestimmte Befehle und Ereignisse
aus einer API abrufen können.
Das monkeyrunner
-Tool bietet die folgenden Funktionen für Android-Tests:
-
Steuerung mehrerer Geräte: Die
monkeyrunner
API kann ein oder mehrere auf mehreren Geräten oder Emulatoren testen. Sie können alle Geräte verbinden, alle Emulatoren (oder beide) gleichzeitig starten, verbinden Sie sie nacheinander und führen Sie dann einen oder mehrere Tests aus. Sie können auch einen Emulator starten programmgesteuert, führen Sie einen oder mehrere Tests aus und fahren Sie dann den Emulator herunter. -
Funktionstests:
monkeyrunner
kann einen automatisierten Start-to-Finish ausführen. einer Android-App getestet. Eingabewerte werden mit Tastenanschlägen oder Touch-Events eingegeben und die Ergebnisse als Screenshots. -
Regressionstests:
monkeyrunner
kann die App-Stabilität testen, indem ein App erstellt und die Ausgabe-Screenshots mit einer Reihe bekannter Screenshots verglichen. richtig. -
Erweiterbare Automatisierung: Da es sich bei
monkeyrunner
um ein API-Toolkit handelt, können Sie ein System aus Python-basierten Modulen und Programmen zur Steuerung von Android entwickeln Geräte. Neben dermonkeyrunner
API selbst können Sie auch die Standard- Pythonos
undsubprocess
Module zum Aufrufen von Android-Tools wie Android Debug BridgeSie können der
monkeyrunner
API auch Ihre eigenen Klassen hinzufügen. Dies ist genauer beschrieben in der Abschnitt monkeyrunner mit Plug-ins erweitern:
Das monkeyrunner
-Tool verwendet
Jython, eine Implementierung von Python, die die Programmiersprache Java verwendet. Mit Jython
Die monkeyrunner
API ermöglicht eine einfache Interaktion mit dem Android-Framework. Mit Jython können Sie
kann Python-Syntax verwenden, um auf die Konstanten, Klassen und Methoden des APIs zuzugreifen.
Ein einfaches Monkeyrunner-Programm
Hier ist ein einfaches monkeyrunner
-Programm, das eine Verbindung zu einem Gerät herstellt und ein
MonkeyDevice
-Objekt enthält. Das Programm installiert mithilfe des MonkeyDevice
-Objekts eine Android-App.
-Paket, führt eine seiner Aktivitäten aus und sendet Schlüsselereignisse an die Aktivität.
Das Programm macht dann einen Screenshot des Ergebnisses,
MonkeyImage
-Objekt.
Aus diesem Objekt schreibt das Programm eine PNG-Datei mit dem Screenshot.
# 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')
Die monkeyrunner API
Die monkeyrunner
API besteht aus drei Modulen im
com.android.monkeyrunner
-Paket:
-
MonkeyRunner
: Eine Klasse von Dienstprogrammmethoden fürmonkeyrunner
-Programme. Diese Klasse bietet ein Methode zum Verbinden vonmonkeyrunner
mit einem Gerät oder Emulator. Außerdem bietet es Methoden zum Erstellen von Benutzeroberflächen für einmonkeyrunner
-Programm und zum Anzeigen der integrierte Hilfe. -
MonkeyDevice
: Steht für ein Gerät oder einen Emulator. Diese Klasse bietet Methoden zum Installieren und wie Sie Pakete deinstallieren, eine Aktivität starten und Tastatur- oder Touch-Ereignisse an eine Sie verwenden diese Klasse auch, um Testpakete auszuführen. -
MonkeyImage
: Stellt ein Bildschirmaufnahmebild dar. Diese Klasse bietet Methoden zum Erfassen von Bildschirmen, Bitmapbilder in verschiedene Formate konvertieren, zweiMonkeyImage
-Objekte vergleichen und Schreiben eines Bildes in eine Datei.
In einem Python-Programm greifen Sie als Python-Modul auf jede Klasse zu. Das monkeyrunner
werden diese Module nicht automatisch importiert. Verwenden Sie zum Importieren eines Moduls die Methode
Python-Anweisung from
:
from com.android.monkeyrunner import <module>
Dabei ist <module>
der Name des Kurses, den Sie importieren möchten. Sie können weitere
als ein Modul in derselben from
-Anweisung, indem die Modulnamen durch
Kommas zu setzen.
monkeyrunner ausführen
Sie können monkeyrunner
-Programme entweder aus einer Datei ausführen oder durch Eingabe von
monkeyrunner
Anweisungen in
in einer interaktiven Sitzung. Beides tun Sie mit dem Befehl monkeyrunner
,
Sie finden sie im Unterverzeichnis tools/
Ihres SDK-Verzeichnisses.
Wenn Sie einen Dateinamen als Argument angeben, führt der Befehl monkeyrunner
führt den Dateiinhalt als Python-Programm aus Andernfalls wird eine interaktive Sitzung gestartet.
So sieht die Syntax des Befehls monkeyrunner
aus:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
In Tabelle 1 werden die Flags und Argumente von monkeyrunner
erläutert.
Argumentation | Beschreibung |
---|---|
-plugin <plugin_jar>
|
(Optional) Gibt eine JAR-Datei mit einem Plug-in für
monkeyrunner
Weitere Informationen zu monkeyrunner -Plug-ins finden Sie in der
Abschnitt monkeyrunner mit Plug-ins erweitern.
Wenn Sie mehrere Dateien angeben möchten, fügen Sie das Argument mehrmals hinzu.
|
<program_filename>
|
Wenn Sie dieses Argument angeben, führt der Befehl monkeyrunner den Inhalt aus
der Datei als Python-Programm. Andernfalls startet der Befehl eine
interaktive Sitzung nutzen.
|
<program_options>
|
(Optional) Flags und Argumente für das Programm in <program_file> |
Hilfe zum integrierten Monkeyrunner
Zum Generieren einer API-Referenz für monkeyrunner
führen Sie folgenden Befehl aus:
monkeyrunner help.py <format> <outfile>
Die Argumente sind:
-
<format>
ist entwedertext
für die Nur-Text-Ausgabe oderhtml
für die HTML-Ausgabe. -
<outfile>
ist ein pfadqualifizierter Name für die Ausgabedatei.
Monkeyrunner mit Plug-ins erweitern
Sie können die monkeyrunner
API mit Klassen erweitern, die Sie in Java schreiben
und in eine oder mehrere JAR-Dateien
einzubauen. Mit dieser Funktion können Sie
die monkeyrunner
API mit Ihren eigenen Klassen oder zum Erweitern der vorhandenen Klassen verwenden. Ich
kann diese Funktion auch zur Initialisierung der monkeyrunner
-Umgebung verwenden.
Rufen Sie den Befehl monkeyrunner
auf, um für monkeyrunner
ein Plug-in bereitzustellen.
mit dem Argument -plugin <plugin_jar>
, das in
Tabelle 1.
In Ihrem Plug-in-Code können Sie die monkeyrunner
-Hauptklassen importieren und erweitern
MonkeyDevice
, MonkeyImage
und MonkeyRunner
in
com.android.monkeyrunner
(siehe Abschnitt zur monkeyrunner
API).
Beachten Sie, dass Plug-ins keinen Zugriff auf das Android SDK ermöglichen. Sie können keine Pakete importieren
wie com.android.app
. Das liegt daran, dass monkeyrunner
mit
das Gerät oder den Emulator unterhalb der Ebene der Framework-APIs liegt.
Plug-in-Startklasse
In der JAR-Datei für ein Plug-in kann eine Klasse angegeben werden, die vor dem
Skriptverarbeitung wird gestartet. Fügen Sie den Schlüssel hinzu, um diese Klasse anzugeben
MonkeyRunnerStartupRunner
zu den
Manifests. Verwenden Sie als Wert den Namen der Klasse, die beim Start ausgeführt werden soll. Die folgenden
zeigt dies in einem ant
-Build-Skript:
<jar jarfile="myplugin" basedir="${build.dir}"> <manifest> <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/> </manifest> </jar>
Um Zugriff auf die Laufzeitumgebung des monkeyrunner
-Tools zu erhalten, kann die Startklasse
com.google.common.base.Predicate<PythonInterpreter>
. Zum Beispiel
-Klasse einige Variablen im Standard-Namespace ein:
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; } }