機能テストツール-MonkeyおよびMonkeyRunner

このノートでは、Android SDKに付属しているがあまり知られていないAndroidアプリケーション用の2つの機能テストツールについて説明します。 非常に類似した名前にもかかわらず、それらはいくつかの異なる目的のために意図されており、他のよく知られたツール、例えばRobotiumとは異なります。 誰が気にする-私は猫をお願いします。





最もシンプルなツールから始めましょう-Monkeyを使って。 Monkeyは、いわゆる機能テストツールではなく、 ストレステスト、またはプロジェクトドキュメントの公式ページ -UI / Application Exerciserに記載されているとおり。 おおまかに言って、Monkeyは、実行中のアプリケーションが猿の足(まあ、または小さな子供の手の中)に落ちることで電話をエミュレートし、その後の「ユーザー」の無秩序な動作を行います。 ただし、Monkeyを使用すると、「ランダム性」、イベント間の間隔、それらのタイプなどを柔軟に設定できます。 このようなテストの場合、アプリケーションのソースコードは不要です。デバイスまたはエミュレータにインストールするだけで、最も簡単な場合はコンソールから次のように起動できます。



$ adb shell monkey -p org.monkeys -v 500







アプリケーションのパッケージ名と生成されたイベントの数が示されます。 例外(Exception)の場合、対応するスタックトレースがコンソールに表示されます。



 :Sending Pointer ACTION_MOVE x=-4.0 y=2.0 :Sending Pointer ACTION_UP x=0.0 y=0.0 // CRASH: org.monkeys (pid 325) // Short Msg: java.lang.NoSuchMethodException // Long Msg: java.lang.NoSuchMethodException: onButtonClick ... // java.lang.IllegalStateException: Could not find a method onButtonClick(View) in the activity class org.monkeys.MonkeysTestActivity for onClick handler on view class android.widget.Button // at android.view.View$1.onClick(View.java:2059) // at android.view.View.performClick(View.java:2408) ... ** Monkey aborted due to error. Events injected: 17 :Dropped: keys=0 pointers=0 trackballs=0 flips=0 ## Network stats: elapsed time=1479ms (1479ms mobile, 0ms wifi, 0ms not connected) ** System appears to have crashed at event 17 of 500 using seed 0
      
      







それがMonkeyのすべてです-アプリケーションをテストしてください。



モンキーランナー





Monkeyに似た名前にもかかわらず、MonkeyRunnerはアプリケーションの機能テスト(「クリックスルー」テスト)を実行できる完全に異なるツールであり、デバイスを制御するためのAPIを提供します 。 MonkeyRunnerはRobotiumよりも低レベルであり、Robolectricと比較してアプリケーションのソースコードを必要としません。 ただし、MonkeyRunnerのアプリケーションの分野は、テストだけに限定されません。UIを介して(だけでなく)Androidデバイスを制御するシステムを構築するために使用できます。 MonkeyRunnerはJythonを使用し、スクリプトまたはテストスクリプトをPythonで記述したり、レコーダーを使用してユーザーアクションを記録したりできます。



既に述べたように、MonkeyRunnerはSDKの一部として一緒に提供され、ツールSDKディレクトリにあるmonkeyrunner



スクリプトを使用してインタープリターとそのインタラクティブコンソールを起動できます。



スクリプトの記録と再生




SDKの構成から、 レコーダープレーヤー用の2つのpythonスクリプトが必要ですmonkeyrunner



を使用してmonkeyrunner



実行する必要があります。



monkeyrunner ~/Projects/MonkeysTest/monkeyrunner/monkey_recorder.py









レコーダーは次のようになります。





「アクションのエクスポート」ボタンを使用して、スクリプトをファイルに書き込むことができます。その後、スクリプトをプレーヤーで再生できます。



monkeyrunner ~/Projects/MonkeysTest/monkeyrunner/monkey_playback.py /tmp/actions.out









もちろん、エミュレータは上記のすべてのアクションで実行されている必要があります。



スクリーンショットからわかるように、MonkeyRunnerはコントロールを選択するための座標で動作します。これは、もちろんRobotiumま​​たはRobolectricの要素の選択ほど便利ではなく、画面サイズに依存しますが、この動作はアプリケーションテストスクリプトの作成ではなく、ゲームなど、使い慣れたインターフェイス要素を使用します。



スクリプト作成




MonkeyRunnerでは、Pythonを使用して独自のスクリプトを記述することができます。 インターフェイスの管理に加えて、アプリケーションのアンインストールとインストール、スクリーンショットの保存などができます。 そのようなスクリプトの例:



 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice device = MonkeyRunner.waitForConnection() device.removePackage('org.monkeys') device.installPackage('/tmp/monkeys.apk') package = 'org.monkeys' activity = 'org.monkeys.MonkeysTestActivity' runComponent = package + '/' + activity device.startActivity(component=runComponent) MonkeyRunner.sleep(2.0) device.touch(50, 140, 'DOWN_AND_UP') device.type("Hello!") MonkeyRunner.sleep(1.0) device.takeSnapshot().writeToFile('/tmp/monkeyshot.png','png')
      
      







APIが提供する機能の詳細については、MonkeyRunnerの公式ドキュメントを参照してください。



Eclipse統合




Eclipseからスクリプトを実行するには、次のことを行うだけで十分です。

  1. PyDev拡張機能をインストールする
  2. PyDevの設定で、 monkeyrunner



    スクリプトを指定する「インタープリター実行可能monkeyrunner



    」として新しいPythonインタープリターを追加します(JythonではなくPythonと同じように追加します)。 SDKの古いバージョンでは、 スクリプトラッパーが必要になる場合があります
  3. スクリプトスクリプトを「実行構成」に追加して、新しく追加されたインタープリターを示します。




もちろん、スクリプト用に個別のPythonプロジェクトを作成できます。



実際に私が簡単に話をしたかったのはそれだけです。 おそらく、説明されているテストツールは役に立つでしょう。



All Articles