본문 바로가기

안드로이드

monkeyrunner


monkeyrunner


MonkeyRunner 는 Android Code 밖에서 Device or Emulator 를 control 할 수 있게 해주는 프로그램을 구현하는데 필요한 API 를 제공해 준다.


Python Program 으로 Android Application or Test Package 를 install 할 수 있으며, 실행(Run) 가능하며, keyStrokes (key/touch event) 를 application 에 보낼 수 있고, 현재 화면의 screenshots 을 take 해서 PC 에 store 까지 가능하다. 


MonkeyRunner Tool 은 주로 Functional/Framework level 에서 application and device 를 test 할 수 있도록 설계되었다.

(Running Unit-Test Suite 라고 보면 된다.)
 


하지만, 이를 다른 부분에 활용하는 건 개발자 자유다. ( 다른 분야에서 이런 특성들을 활용해서 Debug Tool 등에 활용할 수 있겠죠~ Application 을 자유자재로 주무를 수 있다는 말이니깐...)


MonkeyRunner 는 기존 사용해 왔던, Monkey 라는 Tool(UI/Application Exerciser) 과는 아무 관련이 없다.


Monkey Tool 은 Device or Emulator 의 ADB Shell 에서 바로 실행되면서, 가짜 "user and system" events 를 발생 시키는데 비해, MonkeyRunner 는 API 를 이용해, 특별한 Command 또는 Event 를 보냄으로써, PC(WorkStation) 에서 Device or Emulator 를 control 하는 구조이다.

 


MonkeyRunner 는 다음과 같이, Android Testing 을 위한 특별한 Feature 들을 제공한다.

Multiple Device Control : 한 대 이상의 device or emulator 를 순서데로(순서도 program 할 수 있음), test 할 수 있다. 

Functional Testing : 원하는 key strokes 를 application 에 보냄으로써, Android Application을 자동으로 Start-to-Finish Test 할 수 있다. 이를 screen shot 으로 확인 할 수도 있다.

Regression Testing : Application 을 실행 시키고, 그 결과 값을 capture 해서, 이미 알고 있는 정상 동작일 때의 결과 화면과 비교함으로써, application stability 를 test 할 수 있다.

Extensible automation(확장 가능한 자동화) : MonkeyRunner 는 API Toolkit 이기 때문에, 얼마든지 개발자에 의해 Android Device 를 Control 할 수 있는 Python-based module 및 program 등의 전반적인 Automation System  개발이 가능하다. 

게다가, MonkeyRunner API 를 이용하여, ADB 와 같은 Android Tool 을 call 할 수 있는 표준 Python os and subprocess module 을 사용할 수 있다.


또한, 개발자는 자신이 만든 class 를 MonkeyRunner API 에 추가시킬 수 있다. 여기 참조





MonkeyRunner 는 Java Programming Language 를 사용하여 구현 된, Python, 즉 Jython 을 사용한다.

Jython 은 MonkeyRunner API 가 좀 더 쉽게 Android Framework 와 상호작용할 수 있도록 해준다.

Jython 을 이용하여, constant, class, method 등에 access 하는데 python syntax 를 사용할 수 있도록 해준다.



A Simple monkeyrunner Program

아래는 간단한 MonkeyRunner 프로그램 예제이다.(MonkeyDevice object 를 생성한다.)

MonkeyDevice 를 생성함으로써, android package 를 설치하고 있으며, activity 를 실행 한 후. key events 를 보낸다. 결국, screen shot 을 capture 해서 MonkeyImage object 를 생성하여, 주어진 PC 경로에 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
# to see if the installation worked.
device
.installPackage('myproject/bin/MyApplication.apk')

# Runs an activity in the application
device
.startActivity(component='com.example.android.myapplication.MainActivity')

# Presses the Menu button
device
.press('KEYCODE_MENU','DOWN_AND_UP')

# Takes a screenshot
result
= device.takeSnapShot

# Writes the screenshot to a file
result
.writeToFile('myproject/shot1.png','png')


The monkeyrunner API

MonkeyRunnder API 는 com.android.monkeyrunner package 의 세가지 모듈안에 존재 한다.

  • MonkeyRunner: monkeyrunner programs 의 util 관련 class. MonkeyRunner 를 device or emaulator 에 연결시켜주는 method 제공. (It also provides methods for creating UIs for a monkeyrunner program and for displaying the built-in help.)
  • MonkeyDevice: Device or Emulator 를 표현 함. package 설치, 제거, activity 실행, key / touch event 보내기 등의 method 제공. (You also use this class to run test packages.)
  • MonkeyImage: Capture 된 Image 를 나타냄. Screen capture 기능과 함께, capture 된 bitmap image 를 다양한 format 으로 변경할 수 있고, 두 MonkeyImage objects 를 비교하는 기능, 이를 파일로 저장하는 기능까지 제공.

Python 프로그램에서, 각 class 는 Python module 로써 접근할 수 있다. MonkeyRunner Tool 은 자동으로 이들을 import 하지 않기 때문에, import 를 위해서는 from statement 를 꼭 사용해야 한다. ( 콤마(,) 를 이용하여 2개 이상의 module(class) 를 import 할 수 있다.

from com.android.monkeyrunner import <module>


[출처]: http://developer.android.com/guide/developing/tools/monkeyrunner_concepts.html
http://blog.naver.com/PostList.nhn?blogId=kimyow&currentPage=3 

[출처] MonkeyRunner|작성자 사랑혜영