توفّر أداة monkeyrunner
القديمة واجهة برمجة تطبيقات لكتابة البرامج التي تتحكّم في
جهاز Android أو محاكي من خارج رمز Android.
تم تصميم أداة monkeyrunner
في المقام الأول لاختبار التطبيقات والأجهزة على المستوى الوظيفي أو على مستوى الإطار ولتشغيل مجموعات اختبار الوحدات، ولكن يمكنك استخدامها لأغراض أخرى. باستخدام monkeyrunner
، يمكنك كتابة برنامج Python يثبّت تطبيق Android أو حزمة اختبار ويشغِّله ويرسل ضغطات مفاتيح عليه
ويلتقط لقطات شاشة من واجهة المستخدم ويخزِّن لقطات شاشة على محطة العمل.
تحذير: لا تخضع واجهة برمجة التطبيقات monkeyrunner
للصيانة. ننصح باستخدام أداة زاحف التطبيقات أو إطار عمل الاختبار واجهة المستخدم التلقائية بدلاً من ذلك.
لا ترتبط أداة monkeyrunner
بواجهة المستخدم/مجموعة بيانات تمارين التطبيق،
المعروفة أيضًا باسم أداة monkey
. يتم تشغيل أداة monkey
في واجهة
adb
مباشرةً على
الجهاز أو المحاكي وتنشئ مجموعات بث عشوائية عشوائية لأحداث المستخدم والنظام. في المقابل،
تتحكّم أداة monkeyrunner
في الأجهزة وأجهزة المحاكاة من محطة العمل من خلال إرسال
أوامر وأحداث محدّدة من واجهة برمجة تطبيقات.
توفّر أداة monkeyrunner
الميزات التالية لاختبار Android:
-
التحكّم في الأجهزة المتعدّدة: يمكن لواجهة برمجة التطبيقات
monkeyrunner
تطبيق مجموعة اختبار واحدة أو أكثر على أجهزة أو أدوات محاكاة متعددة. يمكنك إرفاق جميع الأجهزة أو بدء تشغيل جميع أدوات المحاكاة (أو كليهما) دفعة واحدة، والربط بكل جهاز بدوره آليًا، ثم إجراء اختبار واحد أو أكثر. يمكنك أيضًا بدء إعداد المحاكي بشكل آلي وإجراء اختبار واحد أو أكثر ثم إيقاف المحاكي. -
الاختبار الوظيفي: بإمكان "
monkeyrunner
" إجراء اختبار مبرمَج من البداية إلى النهاية لتطبيق Android. ويمكنك تقديم قيم الإدخال من خلال ضغطات المفاتيح أو أحداث اللمس وعرض النتائج على شكل لقطات شاشة. -
اختبار الانحدار: يمكن لأداة
monkeyrunner
اختبار ثبات التطبيق من خلال تشغيل أحد التطبيقات ومقارنة لقطات الشاشة التي تم إخراجه بمجموعة من لقطات الشاشة المعروف أنّها صحيحة. -
التشغيل الآلي القابل للامتداد: بما أنّ
monkeyrunner
هي مجموعة أدوات لواجهة برمجة التطبيقات، يمكنك تطوير نظام من الوحدات والبرامج المستندة إلى Python للتحكّم في أجهزة Android. بالإضافة إلى استخدام واجهة برمجة تطبيقاتmonkeyrunner
نفسها، يمكنك استخدام وحدتَي Pythonos
وsubprocess
العادية لطلب أدوات Android، مثل Android Debug Bridge.يمكنك أيضًا إضافة صفوفك الخاصة إلى واجهة برمجة التطبيقات
monkeyrunner
API. ويمكن الاطّلاع على مزيد من التفاصيل في القسم Extend monkeyrunner باستخدام المكونات الإضافية.
تستخدم أداة monkeyrunner
Jython، وهو تنفيذ للغة Python تستخدم لغة برمجة Java. تتيح لغة Jython
لواجهة برمجة التطبيقات monkeyrunner
إمكانية التفاعل بسهولة مع إطار عمل Android. مع Jython، يمكنك استخدام بنية Python للوصول إلى الثوابت والفئات والطرق الخاصة بواجهة برمجة التطبيقات.
برنامج بسيط لأطفالك
في ما يلي برنامج monkeyrunner
بسيط يتصل بجهاز لإنشاء كائن MonkeyDevice
. باستخدام الكائن MonkeyDevice
، يثبّت البرنامج حزمة تطبيق Android وينفّذ أحد أنشطته ويرسل الأحداث الرئيسية إلى النشاط.
بعد ذلك، يأخذ البرنامج لقطة شاشة للنتيجة لإنشاء عنصر MonkeyImage
.
من هذا الكائن، يكتب البرنامج ملف PNG يحتوي على لقطة الشاشة.
# 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')
واجهة برمجة التطبيقات cloudrunner
تتوفّر واجهة برمجة التطبيقات monkeyrunner
في ثلاث وحدات في حزمة com.android.monkeyrunner
:
-
MonkeyRunner
: فئة من الطرق المساعدة لبرامجmonkeyrunner
. وتوفّر هذه الفئة طريقة لربطmonkeyrunner
بجهاز أو محاكي. وتوفّر أيضًا طرقًا لإنشاء واجهات المستخدم لبرنامجmonkeyrunner
وعرض المساعدة المضمَّنة. -
MonkeyDevice
: يمثل جهازًا أو محاكيًا. توفّر هذه الفئة طرقًا لتثبيت الحِزم وإلغاء تثبيتها وبدء نشاط وإرسال أحداث لوحة المفاتيح أو اللمس إلى أحد التطبيقات. ويمكنك أيضًا استخدام هذه الفئة لتشغيل حِزم الاختبار. -
MonkeyImage
: يمثّل صورة لقطة شاشة. توفّر هذه الفئة طرقًا لالتقاط الشاشات، وتحويل الصور النقطية إلى تنسيقات مختلفة، والمقارنة بين كائنMonkeyImage
، وكتابة صورة في ملف.
في برنامج بايثون، يمكنك الوصول إلى كل فئة كوحدة في لغة بايثون. ولا تستورد أداة monkeyrunner
هذه الوحدات تلقائيًا. لاستيراد وحدة، استخدِم عبارة from
في Python:
from com.android.monkeyrunner import <module>
حيث يكون <module>
هو اسم الصف الذي تريد استيراده. يمكنك استيراد أكثر من وحدة واحدة في عبارة from
نفسها من خلال فصل أسماء الوحدات بفواصل.
اركض شمسيًا
يمكنك تشغيل برامج monkeyrunner
إما من ملف أو عن طريق إدخال عبارات monkeyrunner
في جلسة تفاعلية. يمكنك تنفيذ كلا الإجراءين من خلال استدعاء الأمر monkeyrunner
الذي يمكن العثور عليه في الدليل الفرعي tools/
في دليل حزمة تطوير البرامج (SDK).
في حال تقديم اسم ملف كوسيطة، يبدأ الأمر monkeyrunner
محتوى الملف كبرنامج في Python، وإلا فإنّه يبدأ جلسة تفاعلية.
في ما يلي صيغة الأمر monkeyrunner
:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
يوضح الجدول 1 العلامات والوسيطات monkeyrunner
.
الوسيطة | الوصف |
---|---|
-plugin <plugin_jar>
|
(اختياري) تحدِّد هذه العلامة ملف JAR الذي يحتوي على مكوّن إضافي
لـ monkeyrunner .
لمزيد من المعلومات حول مكوّنات monkeyrunner الإضافية، يُرجى الاطّلاع على القسم
Extend monkeyrunner باستخدام المكوّنات الإضافية.
لتحديد أكثر من ملف واحد، يمكنك تضمين الوسيطة عدة مرات.
|
<program_filename>
|
في حال تقديم هذه الوسيطة، يبدأ الأمر monkeyrunner بتشغيل محتوى الملف كبرنامج Python. بخلاف ذلك، يبدأ الأمر
جلسة تفاعلية.
|
<program_options>
|
(اختياري) العلامات والوسيطات للبرنامج في <program_file> |
المساعدة المضمنة
يمكنك إنشاء مرجع واجهة برمجة التطبيقات لـ monkeyrunner
عن طريق تشغيل:
monkeyrunner help.py <format> <outfile>
الوسيطات هي:
-
<format>
يمكن استخدامها معtext
لإخراج النص العادي أوhtml
لإخراج HTML. -
<outfile>
هو اسم مؤهل لمسار لملف الإخراج.
توسيع نطاق البرامج الضارة باستخدام مكونات إضافية
يمكنك توسيع واجهة برمجة تطبيقات monkeyrunner
باستخدام الصفوف التي تكتبها بلغة Java
وتضمينها في ملف JAR واحد أو أكثر. ويمكنك استخدام هذه الميزة لتوسيع
واجهة برمجة التطبيقات monkeyrunner
لتشمل صفوفك الخاصة أو لتوسيع نطاق الصفوف الحالية. ويمكنك
أيضًا استخدام هذه الميزة لإعداد بيئة monkeyrunner
.
لتوفير مكوِّن إضافي لـ monkeyrunner
، يمكنك استدعاء الأمر monkeyrunner
باستخدام الوسيطة -plugin <plugin_jar>
الموضّحة في الجدول 1.
في رمز المكوّن الإضافي، يمكنك استيراد فئات monkeyrunner
الرئيسية، وهي MonkeyDevice
وMonkeyImage
وMonkeyRunner
، وتوسيع نطاقها في com.android.monkeyrunner
(يمكنك الاطّلاع على القسم الذي يتناول واجهة برمجة التطبيقات monkeyrunner
).
تجدر الإشارة إلى أنّ المكوّنات الإضافية لا تتيح لك الوصول إلى حزمة تطوير البرامج (SDK) لنظام التشغيل Android. لا يمكنك استيراد حِزم مثل com.android.app
. ويرجع ذلك إلى أنّ monkeyrunner
تتفاعل مع الجهاز أو المحاكاة أدنى مستوى واجهات برمجة التطبيقات لإطار العمل.
فئة بدء تشغيل المكوِّن الإضافي
يمكن أن يحدد ملف JAR للمكوِّن الإضافي فئة يتم إنشاء مثيل لها قبل
بدء معالجة النص البرمجي. لتحديد هذه الفئة، أضِف المفتاح MonkeyRunnerStartupRunner
إلى ملف بيان ملف JAR. بالنسبة إلى القيمة، استخدِم اسم الفئة التي يتم تشغيلها عند بدء التشغيل. يوضّح المقتطف التالي كيفية إجراء ذلك داخل نص برمجي لإنشاء ant
:
<jar jarfile="myplugin" basedir="${build.dir}"> <manifest> <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/> </manifest> </jar>
للوصول إلى بيئة وقت تشغيل أداة monkeyrunner
، يمكن لفئة بدء التشغيل تنفيذ com.google.common.base.Predicate<PythonInterpreter>
. على سبيل المثال، تقوم هذه الفئة بإعداد بعض المتغيّرات في مساحة الاسم التلقائية:
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; } }