قرد

توفّر أداة 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.

الجدول 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;
    }
}