เครื่องมือ monkeyrunner
เดิมมี API สำหรับการเขียนโปรแกรมที่ควบคุม
อุปกรณ์ Android หรือโปรแกรมจำลองจากภายนอกโค้ด Android
เครื่องมือ monkeyrunner
ออกแบบมาเพื่อทดสอบแอปและอุปกรณ์เป็นหลัก
ที่ระดับการทำงาน/เฟรมเวิร์ก และสำหรับการเรียกใช้ชุดทดสอบ 1 หน่วย แต่คุณสามารถใช้
เพื่อวัตถุประสงค์อื่นๆ เมื่อใช้ monkeyrunner
คุณจะสามารถเขียนโปรแกรม Python
ที่ติดตั้งแอป Android หรือแพ็กเกจทดสอบ เรียกใช้ ส่งการกดแป้นพิมพ์
ถ่ายภาพหน้าจอของอินเทอร์เฟซผู้ใช้และจัดเก็บภาพหน้าจอบนเวิร์กสเตชัน
ข้อควรระวัง: monkeyrunner
API ไม่ได้รับการบำรุงรักษา เราขอแนะนำให้ใช้
เครื่องมือโปรแกรมรวบรวมข้อมูลแอปหรือ
เครื่องมือสร้าง UI อัตโนมัติ
เฟรมเวิร์กการทดสอบแทน
เครื่องมือ monkeyrunner
ไม่เกี่ยวข้องกับ
Monkey ตัวดำเนินการของ UI/แอปพลิเคชัน
หรือเรียกอีกอย่างว่าเครื่องมือ monkey
เครื่องมือ monkey
จะทำงานใน
adb
Shell โดยตรงบน
อุปกรณ์หรือโปรแกรมจำลอง และสร้างสตรีมจำลองของเหตุการณ์ผู้ใช้และเหตุการณ์ระบบแบบสุ่ม เมื่อเปรียบเทียบกันแล้ว
เครื่องมือ monkeyrunner
จะควบคุมอุปกรณ์และโปรแกรมจำลองจากเวิร์กสเตชันโดยการส่ง
คำสั่งและเหตุการณ์ที่เฉพาะเจาะจงจาก API
เครื่องมือ monkeyrunner
มีฟีเจอร์เหล่านี้สำหรับการทดสอบ Android
-
ระบบควบคุมอุปกรณ์หลายเครื่อง:
monkeyrunner
API จะใช้ได้เพียง 1 รายการหรือมากกว่านั้น ชุดทดสอบในอุปกรณ์หรือโปรแกรมจำลองต่างๆ คุณต่อพ่วงอุปกรณ์ทั้งหมดได้ หรือเริ่มต้นโปรแกรมจำลองทั้งหมด (หรือทั้ง 2 อย่าง) พร้อมกัน แล้วเชื่อมต่อทีละตัว แบบเป็นโปรแกรม แล้วเรียกใช้การทดสอบอย่างน้อย 1 รายการ คุณยังสามารถเริ่มใช้โปรแกรมจำลอง กำหนดค่าแบบเป็นโปรแกรม เรียกใช้การทดสอบอย่างน้อยหนึ่งรายการ จากนั้นจึงปิดโปรแกรมจำลอง -
การทดสอบการทำงาน:
monkeyrunner
สามารถเรียกใช้โหมดตั้งแต่ต้นจนจบอัตโนมัติได้ การทดสอบแอป Android คุณใส่ค่าการป้อนข้อมูลด้วยการกดแป้นพิมพ์หรือเหตุการณ์การแตะ และมุมมอง ผลการค้นหาเป็นภาพหน้าจอ -
การทดสอบการเกิดปัญหาซ้ำ:
monkeyrunner
สามารถทดสอบความเสถียรของแอปได้โดยการเรียกใช้ แอปและเปรียบเทียบภาพหน้าจอเอาต์พุตกับชุดภาพหน้าจอที่ทราบว่า ถูกต้อง -
การทำงานอัตโนมัติที่ขยายได้: เนื่องจาก
monkeyrunner
เป็นชุดเครื่องมือ API คุณจึงทำสิ่งต่อไปนี้ได้ พัฒนาระบบโมดูลและโปรแกรมแบบ Python สำหรับควบคุม Android อุปกรณ์ นอกเหนือจากการใช้monkeyrunner
API แล้ว คุณยังใช้มาตรฐาน Pythonos
และsubprocess
โมดูลสำหรับเรียกใช้เครื่องมือ Android เช่น Android Debug Bridgeคุณยังเพิ่มชั้นเรียนของคุณเองใน
monkeyrunner
API ได้ด้วย นี่คือ ซึ่งอธิบายโดยละเอียดยิ่งขึ้นใน ขยาย monkeyrunner ด้วยปลั๊กอิน
เครื่องมือ monkeyrunner
ใช้
Jython เป็นการใช้งาน Python ที่ใช้ภาษาในการเขียนโปรแกรม Java Jython ปล่อยให้
monkeyrunner
API จะโต้ตอบกับเฟรมเวิร์ก Android ได้อย่างง่ายดาย เมื่อใช้ Jython
ใช้ไวยากรณ์ Python เพื่อเข้าถึงค่าคงที่ คลาส และเมธอดของ API ได้
โปรแกรม Monkeyrunner
นี่คือโปรแกรม monkeyrunner
ง่ายๆ สำหรับเชื่อมต่อกับอุปกรณ์เพื่อสร้าง
วันที่ MonkeyDevice
ออบเจ็กต์ โปรแกรมจะติดตั้งแอปพลิเคชัน Android โดยใช้ออบเจ็กต์ 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')
monkeyrunner API
monkeyrunner
API มีอยู่ใน 3 โมดูลใน
แพ็กเกจ com.android.monkeyrunner
:
-
MonkeyRunner
: คลาสของวิธีการยูทิลิตีสำหรับmonkeyrunner
โปรแกรม ชั้นเรียนนี้จะมี วิธีการเชื่อมต่อmonkeyrunner
กับอุปกรณ์หรือโปรแกรมจำลอง และยังมี วิธีสร้าง UI สำหรับโปรแกรมmonkeyrunner
และแสดง ความช่วยเหลือในตัว -
MonkeyDevice
: หมายถึงอุปกรณ์หรือโปรแกรมจำลอง คลาสนี้บอกวิธีติดตั้งและ การถอนการติดตั้งแพ็กเกจ การเริ่มกิจกรรม และส่งกิจกรรมแป้นพิมพ์หรือการแตะไปยัง แอป นอกจากนี้ คุณยังสามารถใช้คลาสนี้เพื่อเรียกใช้แพ็กเกจการทดสอบ -
MonkeyImage
: แสดงรูปภาพที่จับภาพหน้าจอ ชั้นเรียนนี้มีวิธีการจับภาพหน้าจอ แปลงรูปภาพบิตแมปเป็นรูปแบบต่างๆ และเปรียบเทียบออบเจ็กต์MonkeyImage
2 รายการ และ การเขียนรูปภาพลงในไฟล์
ในโปรแกรม 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 ด้วยปลั๊กอิน
หากต้องการระบุไฟล์มากกว่า 1 ไฟล์ ให้ใส่อาร์กิวเมนต์หลายครั้ง
|
<program_filename>
|
หากคุณระบุอาร์กิวเมนต์นี้ คำสั่ง monkeyrunner จะเรียกใช้เนื้อหา
ของไฟล์เป็นโปรแกรม Python มิฉะนั้น คำสั่งจะเริ่มต้น
เซสชันแบบอินเทอร์แอกทีฟ
|
<program_options>
|
(ไม่บังคับ) แฟล็กและอาร์กิวเมนต์สำหรับโปรแกรมใน <program_file> |
ความช่วยเหลือในตัวของ monkeyrunner
คุณสามารถสร้างการอ้างอิง API สำหรับ monkeyrunner
โดยเรียกใช้:
monkeyrunner help.py <format> <outfile>
อาร์กิวเมนต์มีดังนี้
-
<format>
เป็นtext
สำหรับเอาต์พุตข้อความธรรมดา หรือhtml
สำหรับเอาต์พุต HTML -
<outfile>
คือชื่อที่มีคุณสมบัติพาธสำหรับไฟล์เอาต์พุต
ขยาย Monkeyrunner ด้วยปลั๊กอิน
คุณสามารถขยาย API ของ monkeyrunner
ด้วยคลาสที่คุณเขียนใน Java
และสร้างเป็นไฟล์ JAR อย่างน้อย 1 ไฟล์ คุณใช้ฟีเจอร์นี้เพื่อขยาย
monkeyrunner
API พร้อมกับชั้นเรียนของคุณเองหรือขยายชั้นเรียนที่มีอยู่ คุณ
นอกจากนี้ยังใช้ฟีเจอร์นี้เพื่อเริ่มต้นสภาพแวดล้อม 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
ไฟล์ Manifest สำหรับค่า ให้ใช้ชื่อชั้นเรียนเพื่อเรียกใช้เมื่อเริ่มต้นใช้งาน ดังต่อไปนี้
ตัวอย่างข้อมูลแสดงวิธีการดำเนินการนี้ภายในสคริปต์บิลด์ ant
<jar jarfile="myplugin" basedir="${build.dir}"> <manifest> <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/> </manifest> </jar>
หากต้องการเข้าถึงสภาพแวดล้อมรันไทม์ของเครื่องมือ monkeyrunner
คลาสสตาร์ทอัพสามารถใช้
com.google.common.base.Predicate<PythonInterpreter>
ตัวอย่างเช่น รายการนี้
class จะตั้งค่าตัวแปรบางอย่างในเนมสเปซเริ่มต้น
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; } }