میمون دونده

ابزار legacy monkeyrunner یک API برای نوشتن برنامه‌هایی ارائه می‌کند که دستگاه یا شبیه‌ساز اندروید را از خارج از کد اندروید کنترل می‌کنند.

ابزار monkeyrunner اساساً برای آزمایش برنامه‌ها و دستگاه‌ها در سطح عملکردی/فریم‌ورک و برای اجرای مجموعه‌های تست واحد طراحی شده است، اما می‌توانید از آن برای مقاصد دیگر استفاده کنید. با monkeyrunner ، می‌توانید یک برنامه پایتون بنویسید که یک برنامه یا بسته آزمایشی اندروید را نصب می‌کند، آن را اجرا می‌کند، برای آن کلید می‌فرستد، از رابط کاربری آن عکس می‌گیرد و اسکرین‌شات‌ها را در ایستگاه کاری ذخیره می‌کند.

احتیاط: API monkeyrunner نگهداری نمی شود. توصیه می کنیم به جای آن از ابزار خزنده برنامه یا چارچوب تست UI Automator استفاده کنید.

ابزار monkeyrunner به UI/Application Exerciser Monkey که به عنوان ابزار monkey نیز شناخته می شود، مرتبط نیست. ابزار monkey در یک پوسته adb مستقیماً روی دستگاه یا شبیه‌ساز اجرا می‌شود و جریان‌های شبه تصادفی رویدادهای کاربر و سیستم را تولید می‌کند. در مقایسه، ابزار monkeyrunner دستگاه ها و شبیه سازها را از یک ایستگاه کاری با ارسال دستورات و رویدادهای خاص از یک API کنترل می کند.

ابزار monkeyrunner این ویژگی ها را برای تست اندروید ارائه می دهد:

  • کنترل چند دستگاه : API monkeyrunner می تواند یک یا چند مجموعه آزمایشی را در چندین دستگاه یا شبیه ساز اعمال کند. می‌توانید تمام دستگاه‌ها را به‌صورت فیزیکی متصل کنید یا همه شبیه‌سازها (یا هر دو) را به‌طور هم‌زمان راه‌اندازی کنید، به نوبه خود به‌صورت برنامه‌ریزی به هر یک متصل شوید و سپس یک یا چند آزمایش را اجرا کنید. همچنین می توانید پیکربندی شبیه ساز را به صورت برنامه ریزی شده راه اندازی کنید، یک یا چند آزمایش را اجرا کنید و سپس شبیه ساز را خاموش کنید.
  • تست عملکردی : monkeyrunner می‌تواند یک تست خودکار شروع تا پایان برنامه اندروید را اجرا کند. شما مقادیر ورودی را با فشار دادن کلید یا رویدادهای لمسی ارائه می‌کنید و نتایج را به‌عنوان اسکرین شات مشاهده می‌کنید.
  • تست رگرسیون : monkeyrunner می‌تواند پایداری برنامه را با اجرای یک برنامه و مقایسه اسکرین شات‌های خروجی آن با مجموعه‌ای از اسکرین‌شات‌هایی که به درستی شناخته شده‌اند، آزمایش کند.
  • اتوماسیون توسعه پذیر : از آنجایی که monkeyrunner یک جعبه ابزار API است، می توانید سیستمی از ماژول ها و برنامه های مبتنی بر پایتون را برای کنترل دستگاه های اندرویدی توسعه دهید. علاوه بر استفاده از خود monkeyrunner API، می‌توانید از سیستم os پایتون و ماژول‌های subprocess برای فراخوانی ابزارهای اندروید مانند Android Debug Bridge استفاده کنید.

    همچنین می توانید کلاس های خود را به monkeyrunner API اضافه کنید. این موضوع در بخش Extend monkeyrunner with plugins با جزئیات بیشتر توضیح داده شده است.

ابزار monkeyrunner از Jython استفاده می کند، پیاده سازی پایتون که از زبان برنامه نویسی جاوا استفاده می کند. Jython به monkeyrunner API اجازه می دهد تا به راحتی با فریم ورک اندروید تعامل داشته باشد. با استفاده از Jython، می‌توانید از دستور Python برای دسترسی به ثابت‌ها، کلاس‌ها و متدهای API استفاده کنید.

یک برنامه ساده میمون رانر

در اینجا یک برنامه monkeyrunner ساده است که به یک دستگاه متصل می شود و یک شی MonkeyDevice ایجاد می کند. با استفاده از شی MonkeyDevice ، برنامه یک بسته برنامه اندرویدی را نصب می کند، یکی از فعالیت های خود را اجرا می کند و رویدادهای کلیدی را برای فعالیت ارسال می کند. سپس برنامه یک اسکرین شات از نتیجه می گیرد و یک شی 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')

API monkeyrunner

API monkeyrunner در سه ماژول در بسته com.android.monkeyrunner موجود است:

  • MonkeyRunner : دسته ای از روش های کاربردی برای برنامه های monkeyrunner . این کلاس روشی برای اتصال monkeyrunner به یک دستگاه یا شبیه ساز ارائه می دهد. همچنین روش‌هایی را برای ایجاد رابط‌های کاربری برای یک برنامه monkeyrunner و نمایش راهنمای داخلی ارائه می‌دهد.
  • MonkeyDevice : یک دستگاه یا شبیه ساز را نشان می دهد. این کلاس روش هایی را برای نصب و حذف بسته ها، شروع یک فعالیت و ارسال رویدادهای صفحه کلید یا لمسی به یک برنامه ارائه می دهد. شما همچنین از این کلاس برای اجرای بسته های آزمایشی استفاده می کنید.
  • MonkeyImage : یک تصویر از صفحه نمایش را نشان می دهد. این کلاس روش هایی را برای گرفتن صفحه نمایش، تبدیل تصاویر بیت مپ به فرمت های مختلف، مقایسه دو شی MonkeyImage و نوشتن یک تصویر به یک فایل ارائه می دهد.

در یک برنامه پایتون، شما به هر کلاس به عنوان یک ماژول پایتون دسترسی دارید. ابزار monkeyrunner این ماژول ها را به صورت خودکار وارد نمی کند. برای وارد کردن یک ماژول، from استفاده کنید:

from com.android.monkeyrunner import <module>

جایی که <module> نام کلاسی است که می خواهید وارد کنید. با جدا کردن نام ماژول ها با کاما، می توانید بیش از یک ماژول را from دستور وارد کنید.

Monkeyrunner را اجرا کنید

می‌توانید برنامه‌های monkeyrunner را از طریق یک فایل یا با وارد کردن دستورات monkeyrunner در یک جلسه تعاملی اجرا کنید. شما هر دو را با فراخوانی دستور monkeyrunner که در دایرکتوری tools/ subdirectory دایرکتوری SDK شما یافت می شود، انجام می دهید. اگر نام فایل را به عنوان آرگومان ارائه دهید، دستور monkeyrunner محتویات فایل را به عنوان یک برنامه پایتون اجرا می کند. در غیر این صورت، یک جلسه تعاملی را شروع می کند.

شکل زیر دستور monkeyrunner است:

monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

جدول 1 پرچم ها و استدلال های monkeyrunner را توضیح می دهد.

جدول 1. پرچم‌ها و آرگومان‌های monkeyrunner

استدلال توضیحات
-plugin <plugin_jar> (اختیاری) یک فایل JAR حاوی یک افزونه برای monkeyrunner را مشخص می کند. برای کسب اطلاعات بیشتر در مورد پلاگین های monkeyrunner ، به بخش Extend monkeyrunner with plugins مراجعه کنید. برای تعیین بیش از یک فایل، آرگومان را چندین بار اضافه کنید.
<program_filename> اگر این آرگومان را ارائه دهید، دستور monkeyrunner محتویات فایل را به عنوان یک برنامه پایتون اجرا می کند. در غیر این صورت، دستور یک جلسه تعاملی را شروع می کند.
<program_options> (اختیاری) پرچم ها و آرگومان های برنامه در <program_file> .

monkeyrunner ساخته شده در کمک

با اجرای زیر می توانید یک مرجع API برای monkeyrunner ایجاد کنید:

monkeyrunner help.py <format> <outfile>

استدلال ها عبارتند از:

  • <format> یا text برای خروجی متن ساده یا html برای خروجی HTML است.
  • <outfile> یک نام واجد شرایط مسیر برای فایل خروجی است.

Monkeyrunner را با افزونه ها گسترش دهید

می توانید API monkeyrunner را با کلاس هایی که در جاوا می نویسید و در یک یا چند فایل JAR ایجاد می کنید، گسترش دهید. می توانید از این ویژگی برای گسترش API monkeyrunner با کلاس های خود یا برای گسترش کلاس های موجود استفاده کنید. همچنین می توانید از این ویژگی برای مقداردهی اولیه محیط monkeyrunner استفاده کنید.

برای ارائه یک افزونه به monkeyrunner ، دستور monkeyrunner را با آرگومان -plugin <plugin_jar> که در جدول 1 توضیح داده شده است، فراخوانی کنید.

در کد افزونه خود، می‌توانید کلاس‌های اصلی monkeyrunner MonkeyDevice ، MonkeyImage ، و MonkeyRunner را در com.android.monkeyrunner وارد و گسترش دهید (به بخش مربوط به monkeyrunner API مراجعه کنید).

توجه داشته باشید که افزونه ها به شما امکان دسترسی به Android SDK را نمی دهند. شما نمی توانید بسته هایی مانند com.android.app را وارد کنید. این به این دلیل است که monkeyrunner با دستگاه یا شبیه‌ساز زیر سطح APIهای چارچوب تعامل دارد.

کلاس راه اندازی افزونه

فایل 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> را پیاده سازی کند. به عنوان مثال، این کلاس چند متغیر را در فضای نام پیش فرض تنظیم می کند:

کاتلین

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
    }
}

جاوا

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;
    }
}