python覚えたのでmonkeyrunner試してみる
monkeyrunnerは端末に対して無作為なイベントを送付するmonkeyツールとは異なり、デバイスのキーイベントの送付やスクリーンショットの取得などを実行することができるテスト用のツールです。
うまく使えばframeworkのテストツールとして利用できそうなので、目をつけてたもののPython知らんぜとか思って放置してた。 覚えたついでに調べなおしを。
monkeyrunnerはjthonとして実装されており、用意されているモジュールは3つのみみたい。
- MonkeyDevice 主にメインに使うことになるクラス。アプリケーションのインストールから、タッチイベントの送付、アクティビティの立ち上げなど、いろいろできる。
MonkeyImage 主に画像を扱うときにつかう。2つのイメージの比較などにも利用できるので、実行結果のスクリーンショットと期待値のスクリーンショットの比較とかできる。
MonkeyRunner デバイスとの接続などに使う。ここのメソッドを通じてMonkeyDeviceクラスを取得する
アプリケーションを起動する
Settingsアプリを起動してみる。
# -- coding=utf-8 -- author = 'kobashin'from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
device = MonkeyRunner.waitForConnection()
def startApp(target): device.startActivity(component=target)
def main(): startApp('com.android.settings/.Settings')
if name == "main": main()
MonkeyDevice.startActivity()を使って、Activityの起動ができる。同様に、以下でHomeのIntentが投げれる。
def actionHome(): device.startActivity(action="android.intent.action.MAIN", categories=["android.intent.category.HOME"])
アプリケーションをインストールする
単なる1アプリのインストールであれば、以下でOK。 pathにはHOST PC側のapkパスを指定する。
def installApp(path): device.installPackage(path)
複数のアプリケーションを一気にインストールするのであれば、以下でいけそう。指定したディレクトリ以下のapkファイルをインストールして回る。
import globdef installAppInDir(dirpath): files = glob.glob(dirpath + '/*.apk') for apk in files: installApp(apk)
デバイスのキーを押下する
電源ボタンを押下してみる。suspend/resumeの試験とかこれでいんじゃないの?あ、adb走ってたらwakelock握りっぱなしだっけか。
import timedef keyDownAndUp(code): device.press(code, 'DOWN_AND_UP')
def main(): keyDownAndUp('KEYCODE_POWER') time.sleep(2) keyDownAndUp('KEYCODE_POWER')
スクリーンショットを取得する
取るだけなら、以下で。 pathには絶対PATHを指定すること。
def takeScreenShot(path): result = device.takeSnapshot() result.writeToFile(path, 'png') return result
とった結果と比較するときには、以下で行う。 loadImageFromFileを利用すれば、pngファイルからMonkeyImageが取得できるのでsameAsを使って比較すればよい
def compareImages(src, dest): if src.sameAs(dest, 0.9): print "2 is same" else: print "2 is different"def main(): dest = device.takeSnapshot() src = MonkeyRunner.loadImageFromFile('/Users/skobayashi1/workspace/temp/apps/test1.png') compareImages(src, dest)
一旦ここまで。 CTS実施前の端末設定とか、顧客ごとのキッティングとか、これで作ればいいんじゃないかな。