ここ数ヶ月、MonkeyRunnerを仕事で使ってみて思ったこと

本エントリーはAndroid Advent Calendar8日目「裏」です。担当は私@rukiadiaが担当させて頂きます。

8日目の表を担当されているのは@tomorrowkeyさん、エントリーはこちらから御覧ください。

本日のお題は「MonkeyRunnerを仕事を使ってみた感想」です。

急ぎ足で書いたので、「読みづらい」とかコメントがあれば遠慮無く言ってください。それでは始めます。



■『MonkeyRunner』ってどんなもの?

思い出語りを始める前に、まずは『MonkeyRunner』について簡単に説明しておきます。

『MonkeyRunner』とはAndroid端末やエミュレータAndroidのコードの外から操作するためのAPIのことです。

これを使うことによって、ロボット操作でPCに繋いだAndroid端末を操作出来ます。
可能な動作は「画面上のボタンを押す」「指定したアプリを起動し、動かす」等、多岐に渡ります。



■それで、その『MonkeyRunner』で何をやってたの?

簡単にいうと、アプリの動作テストをやっていました。

基本的な流れは

  • 「〜の端末で〜のアプリの動作試験をやりたい」という依頼を受ける。
  • テストスクリプトを書く。
  • テストを繰り返し実行し、不具合・バグを見つけ出す。
といったところです。



■なんで『MonkeyRunner』を使うことになったの?

『MonkeyRunner』がアプリのストレステストに向いていたからです。

アプリの基本動作のテストを10回、20回ではなく、100回、200回と繰り返し、潜在的なバグを見つけ出すことも目的の1つでした。

ストレステストを人の手でやろうとすると、それなりの人数が必要になり、人数に応じた人件費がかかります。
また、テスターを集める時間も必要になります。

それで「『MonkeyRunner』で機械的にテストを繰り返せば、その辺りの手間を省けるのでは?」
→「じゃあ使ってみよう」という話になった訳です。



■『MonkeyRunner』を使ってみて良かったところは?


  • Pythonでテストコードが書ける。
  • Javaで拡張プラグインが作れる。
  • 割と簡単にテストが書ける(気がする)。

MonkeyRunnerのテストスクリプトは基本Pythonで書きます。Pythonに慣れ親しんだ人なら、サクサクコードが書けると思います。
自分で欲しいと思った機能はJavaプラグインを作成して追加することも出来たりします(今回は面倒なのでそこまでやりませんでしたけど)。

しかし、率直な感想を言うと、『MonkeyRunner』には結構不満を感じてる部分はあったりします。



■『MonkeyRunner』のどこが不満だったの?


  • そもそも『MonkeyRunner』を使った端末動作が不安定。
  • テストの成否判定方法が画像キャプチャーの比較。
  • 画面上のボタンを押す時、座標を逐一指定しないといけない。

主に不満だったのがこの辺りです。細かい不満を並べ始めたらキリが無くなるので、特に不満に思っている部分のみ列挙しています。

・1つ目:「操作が不安定」


今回、この『MonkeyRunner』を使ってアプリの動作テストを行ったわけですが、まず悩み所となるのが「操作の不安定さ」です。

人の手で端末を触る時のように間髪入れずにタッチ操作をさせる」や「間隔を空けず、連続で文字入力をさせる」といった事を行うと、結構な高確率で操作に失敗します。

こういった連続的な動作を安定させるためには、1つ1つの動作の間に待ち時間を入れると良い感じになります。
例えば、「文字列を入力させたい時は、1文字打つ毎に2秒ほどの待ち時間を取ってから、次の文字を打つ」といった具合です。

・2つ目:「キャプチャー比較」

『MonkeyRunner』のテストの成否判定は単純に「画像比較」で行われています。正常動作時の画面表示の画面キャプチャーを予め用意しておき、実際のテスト結果の画面キャプチャーと比較することで、テストの成否を判断します。

この判断方法の面倒なところは、「違う端末毎に、別々のキャプチャーを用意しないといけない」というところです。
検証端末が増えると、端末ごとに新規のキャプチャーを用意しないといけない手間があるのが、個人的に不満なところだったりします。

・3つ目の「ボタンの座標指定について」

『MonkeyRunner』ではもちろん端末画面上にあるボタンも押せます。どうやって押すのかというと、一々ボタンの座標を指定してあげないといけないのです。

※ちなみに、MenuボタンやBackキーはID指定をするだけで押せます。詳しくはリファレンス参照!!


最初はそれほど手間だと思わなかったんですが、テスト対象の端末が増えてくると、同じアプリを起動していても当然端末ごとにボタンの座標が違うので、スクリプトも端末毎に作り直さないといけない訳です。

これがもう面倒で面倒で・・(´・ω・`)

自分で新たな成否判定方法を開拓するしかないのかと小一時間。



■まとめ

ここまで『MonkeyRunner』について語ってきましたが、自分の中での『MonkeyRunner』について思うことは1つです。



色々と惜しい



この一言に付きます。例えるとするなら、「背中が痒くてかきたいんだけど、微妙に手が届かない」時の感覚・・!!

最近はテストに対する情熱も湧いてきてるし、もう少し研究してみるのもアリかなと思う僕なのでした。

もし、MonkeyRunnerについて詳しい方や、MonkeyRunner以外のイカしたor使えるテストツールをご存知の方がいらっしゃいましたら、情報を寄せていただけると嬉しいです!

以上です。ここまで読んでいただき、ありがとうございました!
明日、9日目の表を担当されるのは@sekitobaさん、裏を担当されるのは@sugimotoakさんです。
応援してます(`・ω・´)ゞ!