Lo strumento monkeyrunner
legacy fornisce un'API per la scrittura di programmi che controllano un
emulatore o dispositivo Android al di fuori del codice Android.
Lo strumento monkeyrunner
è progettato principalmente per testare app e dispositivi
a livello funzionale/framework e per l'esecuzione di suite di test delle unità, ma puoi usare
per altri scopi. Con monkeyrunner
, puoi scrivere un programma Python
che installa un'app o un pacchetto di test per Android, li esegue, invia sequenze di tasti
acquisisce gli screenshot della relativa interfaccia utente e li archivia sulla workstation.
Attenzione: l'API monkeyrunner
non è gestita. Ti consigliamo di utilizzare
Strumento crawler delle app oppure
Automatore UI
di test.
Lo strumento monkeyrunner
non è correlato al
Scimmia UI/applicazione di esercizio,
chiamato anche strumento monkey
. Lo strumento monkey
viene eseguito in
della shell adb
direttamente
dispositivo o emulatore e genera flussi pseudo-casuali di eventi utente e di sistema. In confronto,
Lo strumento monkeyrunner
controlla i dispositivi e gli emulatori da una workstation inviando
e comandi specifici di un'API.
Lo strumento monkeyrunner
fornisce le seguenti funzionalità per i test Android:
-
Controllo di più dispositivi: l'API
monkeyrunner
può applicare uno o più suite di test su più dispositivi o emulatori. Puoi collegare fisicamente tutti i dispositivi o avvia tutti gli emulatori (o entrambi) contemporaneamente, connettili uno a uno in modo programmatico ed eseguire uno o più test. Puoi anche avviare un emulatore configurazione in modo programmatico, esegui uno o più test e poi arresta l'emulatore. -
Test funzionale:
monkeyrunner
può eseguire un processo automatico dall'inizio alla fine di un'app per Android. Puoi fornire valori di input usando le sequenze di tasti o gli eventi tattili e la visualizzazione i risultati sotto forma di screenshot. -
Test di regressione:
monkeyrunner
può testare la stabilità dell'app eseguendo un e confrontando gli screenshot di output con una serie di screenshot risposta esatta. -
Automazione estendibile: poiché
monkeyrunner
è un toolkit API, puoi sviluppare un sistema di moduli e programmi basati su Python per controllare Android dispositivi mobili. Oltre a utilizzare l'APImonkeyrunner
, puoi utilizzare lo standard Pythonos
esubprocess
per richiamare strumenti Android come Android Debug Bridge.Puoi anche aggiungere i tuoi corsi all'API
monkeyrunner
. Questo è descritti più dettagliatamente nel Estendi monkeyrunner con i plug-in.
Lo strumento monkeyrunner
utilizza
Jython, un'implementazione di Python che utilizza il linguaggio di programmazione Java. Jython lascia
L'API monkeyrunner
interagisce facilmente con il framework Android. Con Jython,
possono usare la sintassi Python per accedere a costanti, classi e metodi dell'API.
Un semplice programma monkeyrunner
Ecco un semplice programma monkeyrunner
che si collega a un dispositivo, creando un
MonkeyDevice
. Con l'oggetto MonkeyDevice
, il programma installa un'applicazione Android
un pacchetto, esegue una delle sue attività e invia gli eventi chiave all'attività.
Il programma acquisisce quindi uno screenshot del risultato, creando una
MonkeyImage
oggetto.
Da questo oggetto, il programma scrive un file PNG contenente lo 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')
L'API monkeyrunner
L'API monkeyrunner
è contenuta in tre moduli
Pacchetto com.android.monkeyrunner
:
-
MonkeyRunner
: Una classe di metodi di utilità per i programmimonkeyrunner
. Questo corso fornisce per connetteremonkeyrunner
a un dispositivo o a un emulatore. Offre inoltre metodi per creare UI per un programmamonkeyrunner
e per visualizzare guida integrata. -
MonkeyDevice
: Rappresenta un dispositivo o un emulatore. Questo corso fornisce metodi per installare disinstallare pacchetti, avviare un'attività e inviare eventi tastiera o tocco a un dell'app. Puoi utilizzare questa classe anche per eseguire pacchetti di test. -
MonkeyImage
: Rappresenta un'immagine di acquisizione schermo. Questo corso fornisce metodi per acquisire schermate, convertendo le immagini bitmap in vari formati, confrontando due oggettiMonkeyImage
e scrivere un'immagine in un file.
In un programma Python, accedi a ogni classe come modulo Python. monkeyrunner
non importa automaticamente questi moduli. Per importare un modulo, utilizza
Istruzione from
Python:
from com.android.monkeyrunner import <module>
Dove <module>
è il nome del corso che vuoi importare. Puoi importare altre
di un modulo nella stessa istruzione from
, separando i nomi dei moduli con
virgole.
Corri scimmia runner
Puoi eseguire programmi monkeyrunner
da un file o inserendo
monkeyrunner
istruzione in
in una sessione interattiva. Per entrambe le operazioni, richiama il comando monkeyrunner
che si trova nella sottodirectory tools/
della directory SDK.
Se fornisci un nome file come argomento, il comando monkeyrunner
esegue i contenuti del file come programma Python; altrimenti avvia una sessione interattiva.
Di seguito è riportata la sintassi del comando monkeyrunner
:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
La tabella 1 spiega i flag e gli argomenti monkeyrunner
.
Argomento | Descrizione |
---|---|
-plugin <plugin_jar>
|
(Facoltativo) Specifica un file JAR contenente un plug-in per
monkeyrunner .
Per ulteriori informazioni sui plug-in monkeyrunner , consulta la
Estendi monkeyrunner con i plug-in.
Per specificare più di un file, includi l'argomento più volte.
|
<program_filename>
|
Se fornisci questo argomento, il comando monkeyrunner esegue i contenuti
del file come programma Python. Altrimenti, il comando avvia
sessione interattiva.
|
<program_options>
|
(Facoltativo) Flag e argomenti per il programma in <program_file> |
guida integrata di monkeyrunner
Puoi generare un riferimento API per monkeyrunner
eseguendo:
monkeyrunner help.py <format> <outfile>
Gli argomenti sono:
-
<format>
ètext
per l'output di testo normale ohtml
per l'output HTML. -
<outfile>
è un nome valido per il percorso del file di output.
Estendi monkeyrunner con i plug-in
Puoi estendere l'API monkeyrunner
con classi che scrivi in Java
e integrare in uno o più file JAR. Puoi usare questa funzionalità per estendere
l'API monkeyrunner
con le tue classi o per estendere i corsi esistenti. Tu
puoi utilizzare questa funzionalità anche per inizializzare l'ambiente monkeyrunner
.
Per fornire un plug-in a monkeyrunner
, richiama il comando monkeyrunner
con l'argomento -plugin <plugin_jar>
descritto in
tabella 1.
Nel codice del plug-in, puoi importare ed estendere le classi monkeyrunner
principali
MonkeyDevice
, MonkeyImage
e MonkeyRunner
pollici
com.android.monkeyrunner
(consulta la sezione relativa all'API monkeyrunner
).
Tieni presente che i plug-in non ti consentono di accedere all'SDK per Android. Non puoi importare pacchetti
ad esempio com.android.app
. Questo perché monkeyrunner
interagisce con
il dispositivo o l'emulatore al di sotto del livello delle API
del framework.
La classe di avvio del plug-in
Il file JAR di un plug-in può specificare una classe di cui viene creata un'istanza prima
viene avviata l'elaborazione dello script. Per specificare questa classe, aggiungi la chiave
MonkeyRunnerStartupRunner
al file JAR
del file manifest. Per il valore, utilizza il nome della classe da eseguire all'avvio. Le seguenti
lo snippet mostra come farlo all'interno di uno script di build ant
:
<jar jarfile="myplugin" basedir="${build.dir}"> <manifest> <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/> </manifest> </jar>
Per accedere all'ambiente di runtime dello strumento monkeyrunner
, la classe startup può implementare
com.google.common.base.Predicate<PythonInterpreter>
. Ad esempio, questo
imposta alcune variabili nello spazio dei nomi predefinito:
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; } }