הכלי הקודם של monkeyrunner
מספק API לכתיבת תוכניות ששולטות
אמולטור או מכשיר Android מחוץ לקוד של Android.
הכלי monkeyrunner
נועד בעיקר לבדוק אפליקציות ומכשירים
ברמה הפונקציונלית או ה-framework, וכדי להריץ חבילות בדיקה של יחידות, אפשר להשתמש
אותו למטרות אחרות. באמצעות monkeyrunner
, אפשר לכתוב תוכנת Python
שמתקין אפליקציה ל-Android או חבילת בדיקה, מריץ אותה, שולח אליה הקשות,
מצלמת צילומי מסך של ממשק המשתמש, ושומרת צילומי מסך בתחנת העבודה.
זהירות: ה-API של monkeyrunner
לא מתוחזק. מומלץ להשתמש
הכלי סורק אפליקציות או
יוצר אוטומטי של ממשק משתמש (UI)
אלא את המסגרת הרעיונית.
הכלי monkeyrunner
לא קשור אל
UI/Application Exerciser Monkey,
שנקרא גם הכלי monkey
. הכלי monkey
פועל
המעטפת adb
ישירות על
של המכשיר או אמולטור, ויוצרת סטרימינג אקראי לכאורה של אירועי משתמש ומערכת. לשם השוואה,
הכלי monkeyrunner
שולט במכשירים ואמולטורים מתחנת עבודה באמצעות שליחה
פקודות ואירועים ספציפיים מ-API.
הכלי monkeyrunner
מספק את התכונות הבאות לביצוע בדיקות ב-Android:
-
שליטה במכשירים מרובים: ה-API של
monkeyrunner
יכול להחיל אחת או יותר לבדוק את החבילות בכמה מכשירים או אמולטורים. אפשר לחבר את כל המכשירים באופן פיזי או להפעיל את כל האמולטורים (או את שניהם) בו-זמנית, להתחבר לכל אחד מהם בתורו באופן פרוגרמטי, ולאחר מכן מריצים בדיקה אחת או יותר. אפשר גם להפעיל אמולטור את התצורה שלו באופן פרוגרמטי, מריצים בדיקה אחת או יותר ולאחר מכן מכבים את האמולטור. -
בדיקה פונקציונליות:
monkeyrunner
יכול להפעיל רכיב התחלה אוטומטי של אפליקציה ל-Android. עליך להזין ערכי קלט באמצעות הקשות או אירועי מגע והצגה את התוצאות כצילומי מסך. -
בדיקת רגרסיה:
monkeyrunner
יכול לבדוק את יציבות האפליקציה על ידי הרצת ולהשוות את צילומי המסך של הפלט לקבוצה של צילומי מסך שידועים נכון. -
אוטומציה ניתנת להרחבה:
monkeyrunner
היא ערכת כלים ל-API, לכן אפשר לפתח מערכת של תוכנות ומודולים מבוססי Python לשליטה ב-Android מכשירים. מלבד השימוש ב-API שלmonkeyrunner
, אפשר להשתמש בגרסה הרגילה Pythonos
וsubprocess
כדי לקרוא לכלים של Android, כמו גשר לניפוי באגים ב-Android.אתם יכולים גם להוסיף כיתות משלכם ל-API של
monkeyrunner
. הדבר שמתוארים בפירוט הקטע Extend monkeyrunner באמצעות יישומי פלאגין
הכלי monkeyrunner
משתמש ב
Jython, יישום של Python שמשתמש בשפת Java. Jython מאפשר
ממשק API של monkeyrunner
יכול ליצור אינטראקציה בקלות עם framework של Android. עם Jython,
יכול להשתמש בתחביר Python כדי לגשת לקבועים, למחלקות ולשיטות של ה-API.
תוכנית פשוטה של קוף
הנה תוכנה פשוטה של 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')
ממשק ה-API של Monkeyrunner
ה-API monkeyrunner
נמצא בשלושה מודולים
חבילת com.android.monkeyrunner
:
-
MonkeyRunner
: סוג של שיטות עזר לתוכנותmonkeyrunner
. בכיתה הזו יש שיטה לחיבורmonkeyrunner
למכשיר או לאמולטור. הוא גם מספק שיטות ליצירת ממשקי משתמש לתוכניתmonkeyrunner
ולהצגת לקבלת עזרה מובנית. -
MonkeyDevice
: מייצג מכשיר או אמולטור. בכיתה הזו יש שיטות להתקנה הסרת חבילות, התחלת פעילות ושליחת אירועי מקלדת או מגע אל אפליקציה. אפשר להשתמש בכיתה הזו גם כדי להריץ חבילות בדיקה. -
MonkeyImage
: מייצג תמונה של צילום מסך. בכיתה הזו יש שיטות לצילום מסכים המרת תמונות של מפת סיביות (bitmap) לפורמטים שונים, השוואה בין שני אובייקטים שלMonkeyImage
, לכתוב תמונה לקובץ.
בתוכנת Python, אתם ניגשים לכל כיתה כמודול Python. monkeyrunner
לא מייבא את המודולים האלה באופן אוטומטי. כדי לייבא מודול, משתמשים
הצהרת from
של Python:
from com.android.monkeyrunner import <module>
כאשר <module>
הוא שם הכיתה שרוצים לייבא. אפשר לייבא עוד
ממודול אחד באותה הצהרת from
על ידי הפרדה בין שמות המודולים באמצעות
פסיקים.
הרצה של monkeyrunner
אפשר להריץ תוכנות של monkeyrunner
מקובץ או על ידי כניסה
monkeyrunner
הצהרות ב-
סשן אינטראקטיבי. כדי לעשות את שתי הפעולות האלה, מפעילים את הפקודה monkeyrunner
,
שנמצא בספריית המשנה tools/
של ספריית ה-SDK.
אם מספקים שם קובץ כארגומנט, הפקודה monkeyrunner
מריצה את התוכן של הקובץ כתוכנה Python; אחרת, הוא יתחיל סשן אינטראקטיבי.
זה התחביר של הפקודה monkeyrunner
:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
טבלה 1 מסבירה את הדגלים והארגומנטים monkeyrunner
.
ארגומנט | תיאור |
---|---|
-plugin <plugin_jar>
|
(אופציונלי) מציין קובץ JAR שמכיל פלאגין עבור
monkeyrunner
למידע נוסף על יישומי הפלאגין monkeyrunner , אפשר לעיין ב
הקטע הרחבה של monkeyrunner באמצעות יישומי פלאגין.
כדי לציין יותר מקובץ אחד, צריך לכלול את הארגומנט כמה פעמים.
|
<program_filename>
|
אם מספקים את הארגומנט הזה, הפקודה monkeyrunner תריץ את התוכן
של הקובץ כתוכנת Python. אחרת, הפקודה תתחיל
לסשן אינטראקטיבי.
|
<program_options>
|
(אופציונלי) דגלים וארגומנטים לתוכנית ב-<program_file> |
עזרה מובנית לקוף
אפשר ליצור הפניית API בשביל monkeyrunner
באמצעות הרצה של:
monkeyrunner help.py <format> <outfile>
הארגומנטים הם:
-
<format>
הואtext
לפלט טקסט פשוט אוhtml
לפלט HTML. -
<outfile>
הוא שם ייחודי לנתיב של קובץ הפלט.
הרחבת Monkeyrunner באמצעות יישומי פלאגין
אפשר להרחיב את ה-API של monkeyrunner
באמצעות כיתות שכותבים ב-Java
בונים קובץ JAR אחד או יותר. תוכל להשתמש בתכונה זו כדי להרחיב
API monkeyrunner
עם הכיתות שלכם או כדי להרחיב את הכיתות הקיימות. שלך
יכול להשתמש בתכונה הזו גם כדי לאתחל את סביבת monkeyrunner
.
כדי לספק פלאגין ל-monkeyrunner
, יש להפעיל את הפקודה monkeyrunner
באמצעות הארגומנט -plugin <plugin_jar>
שמתואר
טבלה 1.
בקוד הפלאגין, אפשר לייבא ולהרחיב את המחלקות הראשיות של monkeyrunner
MonkeyDevice
, MonkeyImage
ו-MonkeyRunner
אינץ'
com.android.monkeyrunner
(עיינו בקטע על API של monkeyrunner
).
לתשומת ליבכם: יישומי פלאגין לא מעניקים לכם גישה ל-Android SDK. אין לך אפשרות לייבא חבילות
כמו com.android.app
. הסיבה לכך היא ש-monkeyrunner
יוצר אינטראקציה עם
המכשיר או האמולטור מתחת לרמת ממשקי ה-API של framework.
סיווג ההפעלה של יישומי הפלאגין
קובץ ה-JAR של פלאגין יכול לציין מחלקה שנוצרת לפני כן
עיבוד הסקריפט מתחיל. כדי לציין את המחלקה הזו, צריך להוסיף את המפתח
MonkeyRunnerStartupRunner
לקובץ ה-JAR
. כערך, משתמשים בשם המחלקה שתרוץ בזמן ההפעלה. הבאים
קטע הקוד שמראה איך לעשות זאת בתוך סקריפט build של 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; } }