Eski monkeyrunner aracı, Android kodu dışından bir Android cihazı veya emülatörü kontrol eden programlar yazmak için bir API sağlar.
monkeyrunner aracı öncelikle uygulamaları ve cihazları işlevsel/çerçeve düzeyinde test etmek ve birim test paketlerini çalıştırmak için tasarlanmıştır ancak başka amaçlarla da kullanabilirsiniz. monkeyrunner ile bir Android uygulamasını veya test paketini yükleyen, çalıştıran, tuş vuruşlarını gönderen, kullanıcı arayüzünün ekran görüntülerini alan ve ekran görüntülerini iş istasyonunda depolayan bir Python programı yazabilirsiniz.
Dikkat: monkeyrunner API'si desteklenmemektedir. Bunun yerine UI Automator test çerçevesini kullanmanızı öneririz.
monkeyrunner aracı, monkey aracı olarak da bilinen UI/Application Exerciser Monkey ile ilgili değildir. monkey aracı, doğrudan cihazda veya emülatörde bir adb kabuğunda çalışır ve kullanıcı ile sistem etkinliklerinin sözde rastgele akışlarını oluşturur. Buna karşılık, monkeyrunner aracı, bir API'den belirli komutlar ve etkinlikler göndererek cihazları ve emülatörleri bir iş istasyonundan kontrol eder.
monkeyrunner aracı, Android testi için aşağıdaki özellikleri sunar:
-
Birden fazla cihazı kontrol etme:
monkeyrunnerAPI, birden fazla cihaz veya emülatörde bir veya daha fazla test paketi uygulayabilir. Tüm cihazları fiziksel olarak bağlayabilir veya tüm emülatörleri (ya da her ikisini) aynı anda başlatabilir, her birine sırayla programatik olarak bağlanabilir ve ardından bir veya daha fazla test çalıştırabilirsiniz. Ayrıca bir emülatör yapılandırma programını programatik olarak başlatabilir, bir veya daha fazla test çalıştırabilir ve ardından emülatörü kapatabilirsiniz. -
İşlevsel test:
monkeyrunner, bir Android uygulamasının baştan sona otomatik testini çalıştırabilir. Tuş vuruşları veya dokunma etkinlikleriyle giriş değerleri sağlarsınız ve sonuçları ekran görüntüleri olarak görürsünüz. -
Regresyon testi:
monkeyrunner, bir uygulamayı çalıştırıp çıkış ekran görüntülerini doğru olduğu bilinen bir ekran görüntüsü grubuyla karşılaştırarak uygulama kararlılığını test edebilir. -
Genişletilebilir otomasyon:
monkeyrunnerbir API araç seti olduğundan Android cihazları kontrol etmek için Python tabanlı modüllerden ve programlardan oluşan bir sistem geliştirebilirsiniz.monkeyrunnerAPI'yi kullanmanın yanı sıra, Android araçlarını (ör. Android Debug Bridge) çağırmak için standart Pythonosvesubprocessmodüllerini de kullanabilirsiniz.monkeyrunnerAPI'ye kendi sınıflarınızı da ekleyebilirsiniz. Bu konu, Extend monkeyrunner with plugins (monkeyrunner'ı eklentilerle genişletme) bölümünde daha ayrıntılı olarak açıklanmaktadır.
monkeyrunner aracı, Java programlama dilini kullanan bir Python uygulaması olan
Jython'u kullanır. Jython, monkeyrunner API'nin Android çerçevesiyle kolayca etkileşim kurmasını sağlar. Jython ile API'nin sabitlerine, sınıflarına ve yöntemlerine erişmek için Python söz dizimini kullanabilirsiniz.
Basit bir monkeyrunner programı
Aşağıda, bir cihaza bağlanarak monkeyrunner nesnesi oluşturan basit bir MonkeyDevice programı verilmiştir. Program, MonkeyDevice nesnesini kullanarak bir Android uygulama paketi yükler, etkinliklerinden birini çalıştırır ve etkinliğe önemli etkinlikler gönderir.
Program daha sonra sonucun ekran görüntüsünü alarak bir MonkeyImage nesnesi oluşturur.
Program, bu nesneden ekran görüntüsünü içeren bir PNG dosyası yazar.
# 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'si
monkeyrunner API, com.android.monkeyrunner paketindeki üç modülde yer alır:
-
MonkeyRunner:monkeyrunnerprogramları için bir yardımcı yöntem sınıfı. Bu sınıf,monkeyrunneriş ortağını bir cihaza veya emülatöre bağlamak için bir yöntem sağlar. Ayrıca,monkeyrunnerprogramı için kullanıcı arayüzleri oluşturma ve yerleşik yardımı görüntüleme yöntemleri de sunar. -
MonkeyDevice: Bir cihazı veya emülatörü temsil eder. Bu sınıf, paketleri yükleme ve kaldırma, Etkinlik başlatma ve bir uygulamaya klavye veya dokunma etkinlikleri gönderme yöntemleri sağlar. Test paketlerini çalıştırmak için de bu sınıfı kullanırsınız. -
MonkeyImage: Ekran görüntüsü resmini ifade eder. Bu sınıf; ekran yakalama, bitmap resimleri çeşitli biçimlere dönüştürme, ikiMonkeyImagenesnesini karşılaştırma ve dosyaya resim yazma yöntemleri sağlar.
Python programında her sınıfa Python modülü olarak erişirsiniz. monkeyrunner
aracı bu modülleri otomatik olarak içe aktarmaz. Bir modülü içe aktarmak için Python from ifadesini kullanın:
from com.android.monkeyrunner import <module>
Buradaki <module>, içe aktarmak istediğiniz sınıf adıdır. Modül adlarını virgülle ayırarak aynı from ifadesinde birden fazla modül içe aktarabilirsiniz.
monkeyrunner'ı çalıştırma
monkeyrunner programlarını bir dosyadan veya etkileşimli bir oturumda monkeyrunner ifadelerini girerek çalıştırabilirsiniz. Bu işlemleri, SDK dizininizin tools/ alt dizininde bulunan monkeyrunner komutunu çağırarak yapabilirsiniz.
Dosya adını bağımsız değişken olarak sağlarsanız monkeyrunner komutu, dosyanın içeriğini Python programı olarak çalıştırır. Aksi takdirde, etkileşimli bir oturum başlatır.
monkeyrunner komutunun söz dizimi şöyledir:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
Tablo 1'de monkeyrunner işaretleri ve bağımsız değişkenler açıklanmaktadır.
Tablo 1. monkeyrunner işaretler ve bağımsız değişkenler
| Bağımsız değişken | Açıklama |
|---|---|
-plugin <plugin_jar>
|
(İsteğe bağlı) monkeyrunner için bir eklenti içeren JAR dosyasını belirtir.
monkeyrunnerEklentiler hakkında daha fazla bilgi edinmek için Eklentilerle monkeyrunner'ı genişletme bölümüne bakın.
Birden fazla dosya belirtmek için bağımsız değişkeni birden çok kez ekleyin.
|
<program_filename>
|
Bu bağımsız değişkeni sağlarsanız monkeyrunner komutu, dosyanın içeriğini Python programı olarak çalıştırır. Aksi takdirde komut, etkileşimli bir oturum başlatır.
|
<program_options>
|
(İsteğe bağlı) <program_file> içindeki program için işaretler ve bağımsız değişkenler |
monkeyrunner yerleşik yardım
Aşağıdaki komutu çalıştırarak monkeyrunner için bir API referansı oluşturabilirsiniz:
monkeyrunner help.py <format> <outfile>
Bağımsız değişkenler:
-
<format>, düz metin çıkışı içintext, HTML çıkışı için isehtmlolur. -
<outfile>, çıkış dosyasının yolunu içeren adıdır.
Eklentilerle monkeyrunner'ı genişletme
monkeyrunner API'yi Java'da yazdığınız ve bir veya daha fazla JAR dosyası olarak oluşturduğunuz sınıflarla genişletebilirsiniz. Bu özelliği, monkeyrunner API'yi kendi sınıflarınızla veya mevcut sınıfları genişletmek için kullanabilirsiniz. Bu özelliği monkeyrunner ortamını başlatmak için de kullanabilirsiniz.
monkeyrunner için bir eklenti sağlamak üzere monkeyrunner komutunu tablo 1'de açıklanan -plugin <plugin_jar> bağımsız değişkeniyle birlikte çağırın.
Eklenti kodunuzda, monkeyrunner, MonkeyImage ve MonkeyRunner ana sınıflarını com.android.monkeyrunner içe aktarıp genişletebilirsiniz (monkeyrunner API'si ile ilgili bölüme bakın).MonkeyDevice
Eklentilerin Android SDK'sına erişmenizi sağlamadığını unutmayın. com.android.app gibi paketleri içe aktaramazsınız. Bunun nedeni, monkeyrunner'nın çerçeve API'lerinin altında kalan cihaz veya emülatörle etkileşimde bulunmasıdır.
Eklenti başlangıç sınıfı
Bir eklentinin JAR dosyası, komut dosyası işleme başlamadan önce oluşturulan bir sınıfı belirtebilir. Bu sınıfı belirtmek için anahtarı
MonkeyRunnerStartupRunner JAR dosyasının
manifestine ekleyin. Değer için başlangıçta çalıştırılacak sınıfın adını kullanın. Aşağıdaki snippet'te, bu işlemin ant derleme komut dosyasında nasıl yapılacağı gösterilmektedir:
<jar jarfile="myplugin" basedir="${build.dir}"> <manifest> <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/> </manifest> </jar>
Başlangıç sınıfı, monkeyrunner aracının çalışma zamanı ortamına erişmek için com.google.common.base.Predicate<PythonInterpreter>'ı uygulayabilir. Örneğin, bu sınıf varsayılan ad alanında bazı değişkenleri ayarlar:
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; } }