calabash-androidの導入

Androidの受け入れテストのフレームワークを調べてみるとどうやらBDDでできるものがあるとのこと。

https://github.com/calabash/calabash-android

メリットとしては、

  • 受け入れ基準を流行りのCucumber形式で書ける。
  • 実機でもテスト可能。Jenkinsとの連携も可能。
  • Javaで簡単にデフォルトにないステップを作成できる。
  • 頻繁にpull requestが出されている。(2013/3/28現在)
  • iOS版もあるので、マルチプラットフォーム開発にも使えそう。

デメリットは、

  • リリースビルドされたapkファイルはテストできない。

インストール方法は簡単。以下のコマンドを実行すればインストールされる。

$sudo gem install calabash-android

ただし、以下の準備が必要なので要注意。

  • ANDROID_HOMEを設定していること
  • JAVA_HOMEを設定していること
  • rubyがインストール済み。今回は1.9.3で試した。
$calabash-android version

でcalabashのバージョンが表示されるとインストール完了。

テスト実行も簡単!

Androidプロジェクトのホームディレクトリ(AndroidManifest.xmlがあるディレクトリ)で

$calabash-android gen

と実行するとfeaturesフォルダが自動で作成される。featuresフォルダは以下の構成。

features
|_support
| |_app_installation_hooks.rb
| |_app_life_cycle_hooks.rb
| |_env.rb
|_step_definitions
| |_calabash_steps.rb
|_my_first.feature

 あとは自分のテストしたいシナリオをmy_first.featureに書いた後、

$calabash-android run <apk>

すればテストが実行される。この時にAndroidエミュレータが起動していること、もしくは実機が接続されていなければならない。また、デバッグビルドされたapkファイルしかテストできない。

# 本当なら受け入れテストはリリースビルドされたものに対して実施したいんだが、calabash-androidはどうやらAndroidユニットテストフレームワークを裏で使っているようなのでそこは我慢。。

 

<apk>はテスト対象のapkファイルの相対パスとなる。例えばHoge.apkがbinフォルダにある場合、bin/Hoge.apkとなる。

ちなみに、htmlファイルにテスト結果を出力したい場合はオプションを指定する。

$calabash-android run <apk> --format html --out reports.html

また、Cucumberのオプションもそのまま使用できるみたい。
例えば、タグ指定して特定のシナリオだけ実行したい場合は、

$calabash-android run <apk> --tags @hoge