Công cụ monkeyrunner
cũ cung cấp API để viết các chương trình điều khiển thiết bị Android hoặc trình mô phỏng từ bên ngoài mã Android.
Công cụ monkeyrunner
chủ yếu được thiết kế để kiểm thử các ứng dụng và thiết bị ở cấp chức năng/khung và chạy các bộ kiểm thử đơn vị nhưng bạn có thể sử dụng công cụ này cho các mục đích khác. Với monkeyrunner
, bạn có thể viết một chương trình Python để cài đặt ứng dụng Android hoặc kiểm thử, chạy gói, thực hiện các thao tác nhấn phím, chụp ảnh màn hình giao diện người dùng và lưu trữ ảnh chụp màn hình trên máy trạm.
Thận trọng: API monkeyrunner
không được duy trì. Bạn nên sử dụng công cụ Trình thu thập thông tin của ứng dụng hoặc khung kiểm thử Công cụ tự động hoá giao diện người dùng.
Công cụ monkeyrunner
không liên quan đến Trình kiểm thử ứng dụng/giao diện người dùng Monkey, hay còn gọi là công cụ monkey
. Công cụ monkey
chạy trực tiếp trong môi trường (shell) adb
trên thiết bị hoặc trình mô phỏng và tạo những luồng giả ngẫu nhiên của các sự kiện người dùng và hệ thống. Để so sánh, công cụ monkeyrunner
sẽ kiểm soát các thiết bị và trình mô phỏng từ một máy trạm bằng cách gửi các lệnh và sự kiện cụ thể từ API.
Công cụ monkeyrunner
cung cấp các tính năng sau cho hoạt động kiểm thử Android:
-
Kiểm soát đa thiết bị: API
monkeyrunner
có thể áp dụng cho một hoặc nhiều bộ kiểm thử trên nhiều thiết bị hoặc trình mô phỏng. Bạn có thể liên kết vật lý tất cả các thiết bị hoặc khởi động toàn bộ các trình mô phỏng (hoặc cả hai) cùng lúc, kết nối lần lượt từng thiết bị hoặc trình mô phỏng bằng cách lập trình rồi chạy một hoặc nhiều quy trình kiểm thử. Bạn cũng có thể khởi động cấu hình trình mô phỏng bằng cách lập trình, chạy một hoặc nhiều quy trình kiểm thử, sau đó tắt trình mô phỏng. -
Kiểm thử chức năng:
monkeyrunner
có thể chạy quy trình kiểm thử tự động từ đầu đến cuối cho một ứng dụng Android. Bạn chỉ cần cung cấp giá trị đầu vào thông qua các lần nhấn phím hoặc các sự kiện chạm rồi xem kết quả dưới dạng ảnh chụp màn hình. -
Kiểm thử hồi quy:
monkeyrunner
có thể kiểm thử độ ổn định của ứng dụng bằng cách chạy một ứng dụng và so sánh ảnh chụp màn hình kết quả của ứng dụng đó với một nhóm ảnh chụp màn hình đã được xác định là chính xác. -
Tự động mở rộng: Do
monkeyrunner
là một bộ công cụ API nên bạn có thể phát triển một hệ thống gồm các mô-đun và chương trình dựa trên Python để điều khiển các thiết bị Android. Ngoài việc sử dụng chính APImonkeyrunner
, bạn còn có thể dùng các mô-đun Python tiêu chuẩnos
vàsubprocess
để gọi các công cụ Android như Cầu gỡ lỗi Android.Bạn cũng có thể thêm các lớp của riêng mình vào API
monkeyrunner
. Việc này được mô tả chi tiết hơn trong phần Mở rộng tính năng của công cụ monkeyrunner bằng trình bổ trợ.
Công cụ monkeyrunner
dùng Jython, một bản triển khai của Python sử dụng ngôn ngữ lập trình Java. Jython cho phép API monkeyrunner
tương tác dễ dàng với khung Android. Với Jython, bạn có thể sử dụng cú pháp Python để truy cập các hằng số, lớp và phương thức của API.
Chương trình monkeyrunner đơn giản
Dưới đây là một chương trình monkeyrunner
đơn giản kết nối với một thiết bị, tạo ra đối tượng MonkeyDevice
. Bằng cách sử dụng đối tượng MonkeyDevice
, chương trình này cài đặt gói ứng dụng Android, chạy một trong các hoạt động của chương trình và gửi các sự kiện quan trọng đến hoạt động đó.
Sau đó, chương trình sẽ chụp ảnh màn hình kết quả, tạo ra đối tượng MonkeyImage
.
Với đối tượng này, chương trình sẽ viết một tệp PNG chứa ảnh chụp màn hình.
# 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 có trong 3 mô-đun của gói com.android.monkeyrunner
:
-
MonkeyRunner
: Một lớp chứa phương thức phần mềm tiện ích cho các chương trìnhmonkeyrunner
. Lớp này cung cấp phương thức để kết nốimonkeyrunner
với một thiết bị hoặc trình mô phỏng. Lớp này cũng cung cấp các phương thức để tạo giao diện người dùng cho chương trìnhmonkeyrunner
và hiển thị trợ giúp tích hợp. -
MonkeyDevice
: Đại diện cho một thiết bị hoặc trình mô phỏng. Lớp này cung cấp các phương thức để cài đặt và gỡ cài đặt gói, khởi tạo Hoạt động, gửi sự kiện thao tác trên bàn phím hoặc sự kiện chạm cho ứng dụng. Bạn cũng có thể sử dụng lớp này để chạy các gói kiểm thử. -
MonkeyImage
: Đại diện cho ảnh chụp màn hình. Lớp này cung cấp các phương thức để chụp ảnh màn hình, chuyển đổi hình ảnh bitmap sang các định dạng khác, so sánh 2 đối tượngMonkeyImage
và viết hình ảnh vào tệp.
Đối với chương trình Python, bạn truy cập vào từng lớp dưới dạng mô-đun Python. Công cụ monkeyrunner
không tự động nhập các mô-đun này. Để nhập một mô-đun, hãy sử dụng câu lệnh from
của Python:
from com.android.monkeyrunner import <module>
Trong đó, <module>
là tên lớp mà bạn muốn nhập. Bạn có thể nhập nhiều mô-đun trong cùng một câu lệnh from
bằng cách phân tách các tên mô-đun bằng dấu phẩy.
Chạy monkeyrunner
Bạn có thể chạy các chương trình monkeyrunner
từ một tệp hoặc bằng cách nhập các câu lệnh monkeyrunner
vào một phiên tương tác. Bạn thực hiện cả hai thao tác này bằng cách gọi lệnh monkeyrunner
trong thư mục con tools/
của thư mục SDK.
Nếu bạn cung cấp tên tệp làm đối số, lệnh monkeyrunner
sẽ chạy nội dung của tệp dưới dạng chương trình Python; nếu không, quá trình này sẽ bắt đầu một phiên tương tác.
Sau đây là cú pháp của lệnh monkeyrunner
:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
Bảng 1 giải nghĩa cờ và đối số của monkeyrunner
.
Đối số | Mô tả |
---|---|
-plugin <plugin_jar>
|
(Không bắt buộc) Chỉ định tệp JAR chứa trình bổ trợ cho monkeyrunner .
Để tìm hiểu thêm về trình bổ trợ monkeyrunner , hãy xem phần nội dung Mở rộng tính năng của công cụ monkeyrunner với trình bổ trợ.
Để chỉ định nhiều tệp, hãy chèn đối số đó nhiều lần.
|
<program_filename>
|
Nếu bạn cung cấp đối số này, thì lệnh monkeyrunner sẽ chạy nội dung của tệp như một chương trình Python. Còn không, lệnh này sẽ bắt đầu một phiên tương tác.
|
<program_options>
|
(Không bắt buộc) Cờ và đối số của chương trình trong <program_file> |
Trợ giúp tích hợp sẵn monkeyrunner
Bạn có thể tạo một tham chiếu API cho monkeyrunner
bằng cách chạy:
monkeyrunner help.py <format> <outfile>
Các đối số bao gồm:
-
<format>
có thể làtext
đối với đầu ra văn bản thuần tuý hoặchtml
đối với đầu ra là HTML. -
<outfile>
là tên đường dẫn hợp lệ của tệp đầu ra.
Mở rộng tính năng của công cụ monkeyrunner với trình bổ trợ
Bạn có thể mở rộng monkeyrunner
API bằng các lớp bạn viết trong Java rồi tạo thành một hoặc nhiều tệp JAR. Bạn có thể sử dụng tính năng này để mở rộng monkeyrunner
API với các lớp riêng hoặc mở rộng các lớp hiện có. Bạn cũng có thể dùng tính năng này để khởi động môi trường monkeyrunner
.
Để cung cấp một trình bổ trợ cho monkeyrunner
, hãy gọi lệnh monkeyrunner
với đối số -plugin <plugin_jar>
được mô tả trong bảng 1.
Trong mã trình bổ trợ, bạn có thể nhập và mở rộng các lớp monkeyrunner
chính là MonkeyDevice
, MonkeyImage
và MonkeyRunner
trong com.android.monkeyrunner
(xem phần về monkeyrunner
API).
Lưu ý rằng các trình bổ trợ không cấp cho bạn quyền truy cập vào SDK Android. Bạn không thể nhập các gói như com.android.app
. Điều này là do monkeyrunner
tương tác với thiết bị hoặc trình mô phỏng ở dưới cấp độ của các API khung.
Lớp khởi động trình bổ trợ
Tệp JAR của một trình bổ trợ có thể chỉ định lớp được tạo trước khi quá trình xử lý tập lệnh bắt đầu. Để chỉ định lớp này, hãy thêm khoá MonkeyRunnerStartupRunner
vào tệp kê khai của tệp JAR. Đối với giá trị nói trên, hãy sử dụng tên lớp để chạy khi khởi động. Đoạn mã sau đây cho biết cách thực hiện việc này trong tập lệnh bản dựng ant
:
<jar jarfile="myplugin" basedir="${build.dir}"> <manifest> <attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/> </manifest> </jar>
Để có quyền truy cập vào môi trường thời gian chạy của công cụ monkeyrunner
, lớp khởi động có thể triển khai com.google.common.base.Predicate<PythonInterpreter>
. Ví dụ: lớp này thiết lập một số biến trong không gian tên mặc định:
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; } }