ユーザシナリオテスティングフレームワーク「 robotium」を使ってみた

Androidアプリのブラックボックステストを簡単で強力に行えるというテストフレームワーク「robotium」を使ってみたよ。

GitHub - RobotiumTech/robotium: Android UI Testing

サンプルテストケースの実行

サンプルとして、NotePadのテストが公開されているので、それを試してみた。

NotePadプロジェクトの作成

NotePadアプリはSDKに含まれているので eclipse でプロジェクトを作成する。
File -> New -> Project... -> Android Project からダイアログボックスで Create project from existing sample で NotePad を選択してプロジェクトを作成する。

テストプロジェクト

以下から最新のテストサンプルをDLする。
GitHub - RobotiumTech/robotium: Android UI Testing
現時点では
ExampleTestProject_v7.zip

これを eclipse でインポート。

AndroidManifest.xmlSDK versionを指定する。 NexusS 2.3.4 の場合

<uses-sdk android:targetSdkVersion="10" />

これでOK。

テストが通らない!

アプリがアップデートされたのか、SDKによってキーボードの挙動が違うのか、テストが通らなかった。
enterText() のあとに goBack() を追加するのと、searchText()がヒットしてなかったのを変更したら通った。

やってること

サンプルにはAddNote, NoteChange, NoteRemoveの3つのテストが含まれている。

  • AddNote

ノートを新規作成する。2つのノートをそれぞれNote 1, Note 2 という名前で作成。

  • NoteChange

ノートの編集をする。Note 1 のタイトルを編集する。"Note 1 Test"という名前になることを期待しているが、今回の環境ではフォーカスが先頭にくるので"TestNote 1"という名前を期待するように変更した。

  • NoteRemove

作成したノートを2つとも削除する。

メモ

実動作とテスト時の動作が違う
testNoteChange()
solo.pressMenuItem(2); // Change title
solo.enterText(0, "test"); //In text field 0, add test
solo.goBack();

これ、手で操作すると MenuItem(2) (=> Edit title) をタップするとダイアログボックスが出てきてそこでタイトルを編集するんだけど、TestCaseではダイアログボックスが出てきてない。

シナリオとしては以下でsuccessして欲しいけどfailしちゃうので、その挙動に合わせたTestCaseを書いてるので本末転倒な感じになっちゃった。

pressMenuItem(2);
solo.enterText(0, "test");
solo.clickOnButton("OK");
...

まだサンプル試した段階だから何か間違ってるのかもしれないけど、ちょっとクセがあるのかなぁ

うわっ…私のテスト…遅すぎ…?


たったこれだけのテストするのに1分近くもかかるのか、、、
テストケース増えたらすごいことになるなぁ。。。手でやるよりは断然速いからいいのか。。。

他のツールも含めてもうちょっと調査が必要だな。。