biegacz z małpką

Starsze narzędzie monkeyrunner udostępnia interfejs API służący do pisania programów, które kontrolują z urządzenia z Androidem lub emulatora spoza kodu Androida.

Narzędzie monkeyrunner jest przeznaczone przede wszystkim do testowania aplikacji i urządzeń na poziomie funkcjonalnego/ramowego i do uruchamiania zestawów testów jednostkowych. w innych celach. Dzięki monkeyrunner możesz napisać program w Pythonie instaluje aplikację lub pakiet testowy na Androida, uruchamia go i przesyła do niego naciśnięcia klawiszy robi zrzuty ekranu interfejsu i zapisuje zrzuty ekranu na stacji roboczej.

Uwaga: interfejs API monkeyrunner nie jest obsługiwany. Zalecamy użycie metody Robota indeksującego aplikacji lub Automator UI środowiska testowego.

Narzędzie monkeyrunner nie jest związane z Małpa ćwicząca UI/aplikacja, znanym także jako narzędzie monkey. Narzędzie monkey działa w adb bezpośrednio w urządzenia lub emulatora i generuje pseudolosowe strumienie zdarzeń użytkownika i systemów. Dla porównania: narzędzie monkeyrunner steruje urządzeniami i emulatorami stacji roboczej. polecenia i zdarzenia z interfejsu API.

Narzędzie monkeyrunner udostępnia te funkcje do testowania w Androidzie:

  • Sterowanie wieloma urządzeniami: interfejs API monkeyrunner może stosować na różnych urządzeniach i emulatorach. Możesz fizycznie podłączyć wszystkie urządzenia lub uruchom wszystkie emulatory (albo oba) jednocześnie; połącz je po kolei automatycznie, a następnie uruchomić co najmniej 1 test. Możesz też uruchomić emulator, automatycznie przeprowadzić konfigurację, uruchomić co najmniej 1 test, a potem wyłączyć emulator.
  • Testy funkcjonalne: monkeyrunner może przeprowadzać automatyczne testy funkcji, zaczynając od początku do końca. testu aplikacji na Androida. Wartości wejściowe podajesz za pomocą naciśnięć klawiszy lub zdarzeń dotknięcia i widoku wyniki w postaci zrzutów ekranu.
  • Testowanie regresji: monkeyrunner może testować stabilność aplikacji, uruchamiając aplikacji i porównywać wyjściowe zrzuty ekranu z zestawem zrzutów ekranu, Zgadza się.
  • Elastyczna automatyzacja: monkeyrunner to zestaw narzędzi interfejsu API, stworzyć system opartych na Pythonie modułów i programów do kontrolowania Androida. urządzenia. Oprócz interfejsu API monkeyrunner możesz używać standardowego interfejsu API Python os oraz subprocess modułów do wywoływania narzędzi Androida, takich jak Android Debug Bridge.

    Do interfejsu API monkeyrunner możesz też dodawać własne zajęcia. To jest omówiono to szczegółowo w Rozszerz aplikację monkeyrunner za pomocą wtyczek.

Narzędzie monkeyrunner używa Jython – implementacja języka Python w języku programowania Java. Jython pozwala interfejs API monkeyrunner jest łatwy w interakcji z platformą Androida. Dzięki Jython może użyć składni Pythona, aby uzyskać dostęp do stałych, klas i metod interfejsu API.

Prosty program typu „monkeyrunner”

Oto prosty program monkeyrunner, który łączy się z urządzeniem, tworząc MonkeyDevice obiektu. Za pomocą obiektu MonkeyDevice program instaluje aplikację na Androida pakietu, uruchamia jedno ze swoich działań i wysyła do niego kluczowe zdarzenia. Program robi zrzut ekranu z wynikami, tworząc w ten sposób MonkeyImage obiekt. Program zapisuje na podstawie tego obiektu plik PNG ze zrzutem 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 API monkeyrunner składa się z 3 modułów w interfejsie API Pakiet com.android.monkeyrunner:

  • MonkeyRunner: Klasa metod narzędziowych dla programów monkeyrunner. Te zajęcia przedstawiają: Metoda łączenia monkeyrunner z urządzeniem lub emulatorem. Zapewnia też metod tworzenia UI dla programu monkeyrunner oraz wyświetlania z wbudowaną pomocą.
  • MonkeyDevice: Reprezentuje urządzenie lub emulator. Ta klasa przedstawia metody instalowania odinstalowywanie pakietów, rozpoczynanie aktywności i wysyłanie zdarzeń dotyczących klawiatury lub dotknięcia do . Tej klasy możesz też używać do uruchamiania pakietów testowych.
  • MonkeyImage: Reprezentuje zrzut ekranu. Ta klasa przedstawia metody przechwytywania ekranów, konwertowanie obrazów bitmapowych do różnych formatów, porównywanie 2 obiektów MonkeyImage oraz zapisując obraz do pliku.

W programie w języku Python dostęp do poszczególnych zajęć masz w postaci modułu Pythona. monkeyrunner nie importuje tych modułów automatycznie. Aby zaimportować moduł, użyj polecenia Instrukcja Python from:

from com.android.monkeyrunner import <module>

Gdzie <module> to nazwa zajęć, które chcesz zaimportować. Możesz zaimportować więcej niż jeden moduł w tej samej instrukcji from, rozdzielając nazwy modułów znakami przecinków.

Biegacz małpich

Możesz uruchomić programy monkeyrunner z pliku lub wpisując Wyciągi monkeyrunner w aby rozpocząć sesję interaktywną. Jedno i drugie, wywołując polecenie monkeyrunner, który znajduje się w podkatalogu tools/ katalogu SDK. Jeśli jako argument podasz nazwę pliku, polecenie monkeyrunner uruchamia zawartość pliku jako program w Pythonie; W przeciwnym razie rozpoczyna się sesja interaktywna.

Oto składnia polecenia monkeyrunner:

monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

Tabela 1 zawiera omówienie flag i argumentów monkeyrunner.

Tabela 1. Flagi i argumenty: monkeyrunner

Argument Opis
-plugin <plugin_jar> (Opcjonalnie) Określa plik JAR zawierający wtyczkę dla monkeyrunner Więcej informacji o wtyczkach monkeyrunner znajdziesz tutaj Rozszerz monkeyrunner za pomocą wtyczek. Aby wskazać więcej niż 1 plik, uwzględnij ten argument kilka razy.
<program_filename> Jeśli podasz ten argument, polecenie monkeyrunner uruchomi zawartość i zapisać go jako program w Pythonie. W przeciwnym razie polecenie uruchamia sesji interaktywnej.
<program_options> (Opcjonalnie) Flagi i argumenty programu w: <program_file>.

wbudowana pomoc monkeyrunner

Odwołanie do interfejsu API dla monkeyrunner możesz wygenerować, uruchamiając:

monkeyrunner help.py <format> <outfile>

Argumenty to:

  • W przypadku zwykłego tekstu <format> to text lub html jako dane wyjściowe HTML.
  • <outfile> to kwalifikowana nazwa pliku wyjściowego.

Rozbuduj aplikację Monkeyrunner za pomocą wtyczek

Interfejs monkeyrunner API możesz rozszerzyć o klasy tworzone w języku Java. i wbudować w co najmniej 1 plik JAR. Za pomocą tej funkcji możesz przedłużyć interfejsu API monkeyrunner do własnych zajęć lub rozszerzania istniejących zajęć. Ty może też użyć tej funkcji do inicjowania środowiska 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 importować i rozszerzać główne klasy monkeyrunner MonkeyDevice, MonkeyImage i MonkeyRunner in com.android.monkeyrunner (przeczytaj sekcję o interfejsie API monkeyrunner).

Pamiętaj, że wtyczki nie dają dostępu do pakietu Android SDK. Nie możesz importować pakietów na przykład com.android.app. Dzieje się tak, ponieważ monkeyrunner wchodzi w interakcję z: urządzenia lub emulatora niższego poziomu niż interfejsy API platformy.

Klasa startowa wtyczki

Plik JAR wtyczki może określać klasę, której wystąpienie przed rozpocznie się przetwarzanie skryptu. Aby określić tę klasę, dodaj klucz MonkeyRunnerStartupRunner do folderu pliku manifestu. Jako wartość podaj nazwę klasy uruchamianą przy uruchamianiu. Poniżej 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 to klasa konfiguruje 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;
    }
}