توفّر أداة monkeyrunner
القديمة واجهة برمجة تطبيقات لكتابة البرامج التي تتحكّم في
أجهزة Android أو المحاكي خارج الرموز البرمجية لنظام Android
تم تصميم أداة monkeyrunner
في المقام الأول لاختبار التطبيقات والأجهزة
على المستوى الوظيفي/إطار العمل ولتشغيل مجموعات اختبار الوحدة، ولكن يمكنك استخدام
لأغراض أخرى. باستخدام monkeyrunner
، يمكنك كتابة برنامج Python
تثبّت تطبيق Android أو حزمة اختبار وتشغّلها وترسل ضغطات المفاتيح إليها
وتلتقط لقطات شاشة لواجهة المستخدم الخاصة به وتخزن لقطات الشاشة على محطة العمل.
تنبيه: لا يتم الحفاظ على واجهة برمجة تطبيقات monkeyrunner
. ننصح باستخدام
زاحف التطبيقات أو
أداة برمجة واجهة المستخدم
إطار عمل الاختبار بدلاً من ذلك.
أداة "monkeyrunner
" غير مرتبطة
UI/Application Exerciser Monkey،
والمعروفة أيضًا باسم أداة monkey
. يتم تشغيل أداة monkey
في
واجهة أوامر adb
مباشرةً على
الجهاز أو المحاكي وينشئ مجموعات بث عشوائية زائفة لأحداث النظام والمستخدمين. وللمقارنة،
تتحكّم أداة monkeyrunner
في الأجهزة وأجهزة المحاكاة من محطة عمل من خلال
أوامر وأحداث محددة من واجهة برمجة التطبيقات.
توفّر أداة monkeyrunner
الميزات التالية لاختبار Android:
-
التحكّم في أجهزة متعدّدة: يمكن لواجهة برمجة التطبيقات
monkeyrunner
أن تطبّق جهازًا واحدًا أو أكثر. لاختبارات على أجهزة أو أدوات محاكاة متعددة. توصيل جميع الأجهزة فعليًا أو تشغيل جميع أدوات المحاكاة (أو كليهما) في وقت واحد، والاتصال بكل جهاز منها على التوالي آليًا، ثم أجرِ اختبارًا واحدًا أو أكثر. يمكنك أيضًا تشغيل محاكي التهيئة آليًا وإجراء اختبار واحد أو أكثر ثم إيقاف تشغيل المحاكي. -
الاختبار الوظيفي: بإمكان "
monkeyrunner
" تشغيل عملية مبرمَجة من البداية إلى النهاية. اختبار تطبيق Android. يمكنك إدخال قيم الإدخال من خلال ضغطات المفاتيح أو أحداث اللمس وطريقة العرض. النتائج كلقطات شاشة. -
اختبار التراجع: يمكن لـ "
monkeyrunner
" اختبار ثبات التطبيق عن طريق تنفيذ التطبيق ومقارنة لقطات الشاشة الناتجة عن مجموعة من لقطات الشاشة المعروفة صحيح. -
التشغيل الآلي الموسَّع: بما أنّ
monkeyrunner
هي مجموعة أدوات خاصة بواجهة برمجة التطبيقات، يمكنك تطوير نظام من الوحدات والبرامج المستندة إلى لغة بايثون للتحكّم في نظام التشغيل Android الأجهزة. وإلى جانب استخدام واجهة برمجة تطبيقاتmonkeyrunner
نفسها، يمكنك استخدام بايثونos
subprocess
وحدة لطلب أدوات Android، مثل Android Debug Bridge:يمكنك أيضًا إضافة صفوفك الخاصة إلى واجهة برمجة تطبيقات
monkeyrunner
. هذا هو بمزيد من التفصيل في قسم توسيع نطاق monkeyrunner باستخدام المكوّنات الإضافية.
تستخدم أداة monkeyrunner
Jython، وهو تطبيق لـ Python تستخدم لغة برمجة Java. يتيح Jython
تتفاعل monkeyrunner
API بسهولة مع إطار عمل Android. مع Jython، يمكنك
استخدام بناء جملة بايثون للوصول إلى الثوابت والفئات والطرق الخاصة بواجهة برمجة التطبيقات.
وهو برنامج قرود بسيط
في ما يلي برنامج بسيط من "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')
واجهة برمجة تطبيقات monkeyrunner
تنقسم واجهة برمجة التطبيقات monkeyrunner
إلى ثلاث وحدات ضمن
الحزمة com.android.monkeyrunner
:
-
MonkeyRunner
: فئة من طرق الأداة لبرامجmonkeyrunner
. يوفر هذا الفصل لتوصيلmonkeyrunner
بجهاز أو محاكي. كما أنه يوفر لإنشاء واجهات مستخدم في برنامجmonkeyrunner
وعرض المساعدة المضمنة. -
MonkeyDevice
: إذا كان هذا الجهاز يمثل جهازًا أو محاكيًا. توفر هذه الفئة طرقًا لتثبيت وإلغاء تثبيت الحزم وبدء نشاط وإرسال لوحة المفاتيح أو أحداث اللمس إلى التطبيق. يمكنك أيضًا استخدام هذه الفئة لتشغيل حزم الاختبار. -
MonkeyImage
: يمثل هذا النوع صورة تم التقاطها للشاشة. توفر هذه الفئة طرقًا لالتقاط الشاشات تحويل الصور النقطية إلى تنسيقات مختلفة، ومقارنة كائنَينMonkeyImage
، كتابة صورة إلى ملف.
في برنامج Python، يمكنك الوصول إلى كل فئة كوحدة Python. monkeyrunner
لا تقوم باستيراد هذه الوحدات تلقائيًا. لاستيراد وحدة، استخدم
عبارة Python from
:
from com.android.monkeyrunner import <module>
حيث يكون <module>
هو اسم الصف الذي تريد استيراده. يمكنك استيراد المزيد من المنتجات
أكثر من وحدة واحدة في عبارة from
نفسها من خلال فصل أسماء الوحدات باستخدام
فواصل.
ركض monkeyrunner
يمكنك تشغيل برامج monkeyrunner
إما من ملف أو بإدخال
monkeyrunner
كشوفات في
جلسة تفاعلية. يمكنك تنفيذ كلا الإجراءين من خلال استدعاء الأمر monkeyrunner
،
المتوفرة في الدليل الفرعي "tools/
" من دليل حزمة تطوير البرامج (SDK).
إذا قدّمت اسم ملف كوسيطة، سيتم استخدام الأمر monkeyrunner
يقوم بتشغيل محتويات الملف كبرنامج بايثون؛ وإلا، فسيتم بدء جلسة تفاعلية.
وفي ما يلي بنية الأمر monkeyrunner
:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
يوضّح الجدول 1 علامات ووسيطات monkeyrunner
.
الوسيطة | الوصف |
---|---|
-plugin <plugin_jar>
|
(اختياري) يحدد هذا الحقل ملف JAR يحتوي على مكوّن إضافي
monkeyrunner
لمعرفة المزيد من المعلومات عن مكوّنات monkeyrunner الإضافية، يمكنك الاطّلاع على
قسم توسيع نطاق monkeyrunner باستخدام المكوّنات الإضافية.
لتحديد أكثر من ملف واحد، يمكنك تضمين الوسيطة عدة مرات.
|
<program_filename>
|
إذا قدّمت هذه الوسيطة، سيشغِّل الأمر monkeyrunner المحتوى.
من الملف كبرنامج بايثون. بخلاف ذلك، يبدأ الأمر
جلسة تفاعلية.
|
<program_options>
|
(اختياري) العلامات والوسيطات للبرنامج في <program_file> |
المساعدة المضمّنة في monkeyrunner
يمكنك إنشاء مرجع واجهة برمجة تطبيقات لـ monkeyrunner
من خلال تشغيل:
monkeyrunner help.py <format> <outfile>
الوسائط هي:
-
<format>
إماtext
لإخراج النص العادي أوhtml
لإخراج HTML. -
<outfile>
هو اسم مؤهّل للمسار لملف الإخراج.
توسيع نطاق عمل monkeyrunner باستخدام المكوّنات الإضافية
يمكنك توسيع واجهة برمجة التطبيقات monkeyrunner
باستخدام الصفوف التي تكتبها بلغة Java.
ودمجها في ملف JAR واحد أو أكثر. يمكنك استخدام هذه الميزة لتوسيع
monkeyrunner
API مع صفوفك الخاصة أو لتوسيع الصفوف الحالية. إِنْتَ
أيضًا استخدام هذه الميزة لإعداد بيئة 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; } }