Alat monkeyrunner
lama menyediakan API untuk program penulisan yang mengontrol emulator
atau perangkat Android dari luar kode Android.
Alat monkeyrunner
terutama dirancang untuk menguji aplikasi dan perangkat
pada tingkat fungsional/framework dan untuk menjalankan suite pengujian unit, tetapi Anda dapat menggunakannya
untuk tujuan lain. Dengan monkeyrunner
, Anda dapat menulis program Python
yang menginstal dan menjalankan aplikasi Android atau paket pengujian, mengirimkan penekanan tombol ke aplikasi,
mengambil screenshot antarmuka pengguna aplikasi, dan menyimpan screenshot di workstation.
Perhatian: monkeyrunner
API tidak dipertahankan. Sebaiknya gunakan
alat Crawler Aplikasi atau
framework pengujian
UI Automator.
Alat monkeyrunner
tidak ada kaitannya dengan
UI/Application Exerciser Monkey,
yang juga dikenal sebagai alat monkey
. Alat monkey
berjalan di
shell adb
secara langsung pada
perangkat atau emulator serta menghasilkan aliran pseudo-random peristiwa pengguna dan sistem. Sebagai perbandingan,
alat monkeyrunner
mengontrol perangkat dan emulator dari workstation dengan mengirimkan
perintah dan peristiwa khusus dari API.
Alat monkeyrunner
menyediakan fitur berikut untuk pengujian Android:
-
Kontrol beberapa perangkat:
monkeyrunner
API dapat menerapkan satu rangkaian pengujian atau lebih di beberapa perangkat atau emulator. Anda dapat secara fisik menautkan semua perangkat atau memulai semua emulator (atau keduanya) secara bersamaan, terhubung ke setiap perangkat secara bergiliran dan terprogram, lalu menjalankan satu pengujian atau lebih. Anda juga dapat memulai konfigurasi emulator secara terprogram, menjalankan satu pengujian atau lebih, lalu mematikan emulator. -
Pengujian fungsional:
monkeyrunner
dapat menjalankan pengujian aplikasi Android dari awal sampai akhir secara otomatis. Anda memberikan nilai input dengan tombol atau peristiwa sentuh, dan melihat hasilnya sebagai screenshot. -
Pengujian regresi:
monkeyrunner
dapat menguji stabilitas aplikasi dengan menjalankan aplikasi dan membandingkan screenshot output-nya dengan serangkaian screenshot yang telah terbukti benar. -
Otomatisasi yang dapat diperluas: Karena
monkeyrunner
adalah toolkit API, Anda dapat mengembangkan sistem modul dan program berbasis Python untuk mengontrol perangkat Android. Selain menggunakanmonkeyrunner
API, Anda dapat menggunakan modulos
dansubprocess
Python standar untuk memanggil alat Android seperti Android Debug Bridge.Anda juga dapat menambahkan class versi Anda sendiri ke
monkeyrunner
API. Cara untuk menambahkannya dijelaskan secara lebih detail di bagian Memperluas monkeyrunner dengan plugin.
Alat monkeyrunner
menggunakan
Jython, implementasi Python yang menggunakan bahasa pemrograman Java. Jython memudahkan
monkeyrunner
API berinteraksi dengan framework Android. Dengan Jython, Anda
dapat menggunakan sintaksis Python untuk mengakses konstanta, class, dan metode API.
Program monkeyrunner sederhana
Berikut adalah program monkeyrunner
sederhana yang terhubung ke sebuah perangkat sehingga membuat
objek
MonkeyDevice
. Dengan menggunakan objek MonkeyDevice
, program ini akan menginstal paket aplikasi
Android, menjalankan salah satu aktivitasnya, dan mengirimkan peristiwa utama ke aktivitas tersebut.
Setelah itu, program akan mengambil screenshot hasilnya dan membuat
objek MonkeyImage
.
Dari objek inilah program akan menulis file PNG yang berisi 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')
Monkeyrunner API
monkeyrunner
API dimuat dalam tiga modul di paket
com.android.monkeyrunner
:
-
MonkeyRunner
: Class metode utilitas untuk programmonkeyrunner
. Class ini menyediakan metode untuk menghubungkanmonkeyrunner
ke perangkat atau emulator. Class ini juga menyediakan metode guna membuat UI untuk programmonkeyrunner
dan menampilkan bantuan bawaan. -
MonkeyDevice
: Menampilkan perangkat atau emulator. Class ini menyediakan metode untuk menginstal dan meng-uninstal paket, memulai Aktivitas, dan mengirim keyboard atau peristiwa sentuh ke aplikasi. Anda juga akan menggunakan class ini untuk menjalankan paket pengujian. -
MonkeyImage
: Menampilkan gambar screenshot. Class ini menyediakan metode untuk mengambil screenshot, mengonversi gambar bitmap ke berbagai format, membandingkan dua objekMonkeyImage
, dan menulis gambar ke file.
Di program Python, Anda mengakses setiap class sebagai modul Python. Alat monkeyrunner
tidak mengimpor modul ini secara otomatis. Untuk mengimpor modul, gunakan
pernyataan from
Python:
from com.android.monkeyrunner import <module>
Dengan <module>
adalah nama class yang ingin Anda impor. Anda dapat mengimpor lebih
dari satu modul dalam pernyataan from
yang sama dengan memisahkan nama modul dengan
koma.
Menjalankan monkeyrunner
Anda dapat menjalankan program monkeyrunner
dari file atau dengan memasukkan
pernyataan monkeyrunner
dalam
sesi interaktif. Anda dapat melakukan keduanya dengan memanggil perintah monkeyrunner
yang ditemukan di subdirektori tools/
dari direktori SDK Anda.
Jika Anda memberikan nama file sebagai argumen, perintah monkeyrunner
akan menjalankan konten file sebagai program Python; jika tidak, sesi interaktif akan dimulai.
Berikut adalah sintaksis perintah monkeyrunner
:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
Tabel 1 menjelaskan flag dan argumen monkeyrunner
.
Argumen | Deskripsi |
---|---|
-plugin <plugin_jar>
|
(Opsional) Menentukan file JAR yang berisi plugin untuk
monkeyrunner .
Untuk mempelajari plugin monkeyrunner lebih lanjut, baca bagian
Memperluas monkeyrunner dengan plugin.
Untuk menentukan lebih dari satu file, sertakan argumen ini beberapa kali.
|
<program_filename>
|
Jika Anda menyediakan argumen ini, perintah monkeyrunner akan menjalankan konten
file sebagai program Python. Jika tidak, perintah akan memulai
sesi interaktif.
|
<program_options>
|
(Opsional) Flag dan argumen untuk program di <program_file> |
Bantuan bawaan monkeyrunner
Anda dapat membuat referensi API untuk monkeyrunner
dengan menjalankan:
monkeyrunner help.py <format> <outfile>
Argumennya adalah:
-
<format>
adalahtext
untuk output teks biasa atauhtml
untuk output HTML. -
<outfile>
adalah nama yang menentukan jalur untuk file output.
Memperluas monkeyrunner dengan plugin
Anda dapat memperluas monkeyrunner
API dengan class yang ditulis di Java
dan di-build menjadi satu atau beberapa file JAR. Anda dapat menggunakan fitur ini untuk memperluas
monkeyrunner
API dengan class Anda sendiri atau untuk memperluas class yang sudah ada. Anda
juga dapat menggunakan fitur ini untuk melakukan inisialisasi lingkungan monkeyrunner
.
Untuk menyediakan plugin ke monkeyrunner
, panggil perintah monkeyrunner
dengan
argumen -plugin <plugin_jar>
yang dijelaskan dalam
tabel 1.
Dalam kode plugin, Anda dapat mengimpor dan memperluas class monkeyrunner
utama,
yaitu MonkeyDevice
, MonkeyImage
, dan MonkeyRunner
di
com.android.monkeyrunner
(lihat bagian tentang monkeyrunner
API).
Perhatikan bahwa plugin tidak memberi Anda akses ke Android SDK. Anda tidak dapat mengimpor paket
seperti com.android.app
. Hal ini karena monkeyrunner
berinteraksi dengan
perangkat atau emulator di bawah level API framework.
Class startup plugin
File JAR untuk plugin dapat menentukan class yang dibuat sebelum
pemrosesan skrip dimulai. Untuk menentukan class ini, tambahkan kunci
MonkeyRunnerStartupRunner
ke manifes file
JAR. Untuk nilai, gunakan nama class agar dapat dijalankan saat memulai. Cuplikan
berikut menunjukkan cara melakukannya dalam skrip build ant
:
<jar jarfile="myplugin" basedir="${build.dir}"> <manifest> <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/> </manifest> </jar>
Untuk mendapatkan akses ke lingkungan runtime alat monkeyrunner
, class startup dapat mengimplementasikan
com.google.common.base.Predicate<PythonInterpreter>
. Misalnya, class
ini menetapkan beberapa variabel dalam namespace default:
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; } }