ابزار 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
را توضیح می دهد.
استدلال | توضیحات |
---|---|
-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;
}
}