monkeyrunner

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'API monkeyrunner, puoi utilizzare lo standard Python os e subprocess 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 programmi monkeyrunner. Questo corso fornisce per connettere monkeyrunner a un dispositivo o a un emulatore. Offre inoltre metodi per creare UI per un programma monkeyrunner 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 oggetti MonkeyImage 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.

Tabella 1. monkeyrunner flag e argomenti

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 o html 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;
    }
}