2012年3月20日火曜日

[Android TIPS] Monkey Runner でアプリ自動実行

Monkey Runner について、これまでに
「一通りやったよ」というような記事があまりなかったと思うので、
今回は Monkey Runner でのアプリ自動実行をご紹介。


Monkey Runner というのは Andorid の操作を予め
決めておいて、それを基に自動実行できる仕組みです。
自動実行の途中でスクリーンショットもとれるので、
テストにはもってこいなわけです。

アプリのレイアウトに依存するところが大きいのですが、
複数の条件を切り替えてテストするような場面や、
長時間実行によるリソース使用量の変化を観測する
場合などに使えるツールです。


自動実行するアプリのサンプル
として、←のような四則演算を
行うアプリを取り上げます

アプリのソースは こちら からどうぞ。

まずは←のアプリをエミュレータで
実行できるように準備します。

また、Monkey Runner は
ボタンなどのウィジェットの操作を
座標を元に行うので、
エミュレータのサイズを 480x800
にします。





つぎに、↓のような python のコードを用意し、
「C:\mr_simplecalc.py」に保存しておきます。

#!/usr/bin/python
# coding: UTF-8

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
import datetime

# 日時文字列の取得
def getDate():
    d = datetime.datetime.today()
    return d.strftime('%Y%m%d_%H%M%S')

# スナップショットの取得
# (monkeyrunner.bat と同階層に snapshot フォルダを準備のこと)
def snapshot(device):
    MonkeyRunner.sleep(1)
    result = device.takeSnapshot()
    result.writeToFile('snapshot/%s.png' % getDate(), 'png')

# テスト初期化
def init():
    device = MonkeyRunner.waitForConnection()
    device.startActivity(component='jp.probsc.simplecalc/.MainActivity')
    return device

# 標準出力へメッセージを出力
def printMsg(msg):
    print '[%s] %s' % (getDate(), msg)

# テストの実施
def doTest():
    device = init()

    snapshot(device)

    for i in range(1, 1001):
        printMsg('cnt: %d' % i)

        # 1つめの数値を入力
        MonkeyRunner.sleep(1)
        device.touch(65, 215, 'DOWN_AND_UP')
        device.type('%d' % i)

        # 2つめの数値を入力
        MonkeyRunner.sleep(1)
        device.touch(240, 215, 'DOWN_AND_UP')
        num = i * 2
        device.type('%d' % num)

        # 「+」ボタンを押下
        MonkeyRunner.sleep(1)
        device.touch(155, 110, 'DOWN_AND_UP')

        snapshot(device)

# テストの開始
printMsg('test start.')
doTest()
printMsg('test end.')

↑のコードでは、1+2、2+3、3+4 ... の計算を
1000回分繰り返します。
で、毎回、png ファイルのスクリーンショットを
とっていきます。

次は、この保存場所を準備します。

Monkey Runner では「monkeyrunner.bat」
というツールを使うのですが、↑のコードでは
同じフォルダ内の「snapshot」フォルダの中に保存します。

僕の例では「monkeyrunner.bat」は

 「C:\android\android-sdk-windows\tools\monkeyrunner.bat

にあるので、「snapshot」フォルダは

 「C:\android\android-sdk-windows\tools\snapshot

に用意します。
最後に、コマンドプロンプトから下記の太字部分のコマンドを入力します。


c:\>
c:\>C:\android\android-sdk-windows\tools\monkeyrunner.bat C:\mr_simplecalc.py
[20120318_145102] test start.
[20120318_145117] cnt: 1
[20120318_145132] cnt: 2
[20120318_145148] cnt: 3
[20120318_145201] cnt: 4
[20120318_145215] cnt: 5
...


すると... なんということでしょー!
勝手にエミュレータ内のアプリが動くではありませんか!
また、「snapshot」フォルダ内に↓のように
みるみるテストの様子が保存されていきます!

 


便利ー。そんなかんじー。

0 件のコメント:

コメントを投稿