Calabash-Androidを動作させるためには、以下のものが必要です。
Calabash-Androidは、Ruby Gemを使用してインストールします。下記コマンドを実行することで、Calabash-Androidをインストールできます。
$ gem install calabash-android
ネットワーク環境にもよりますが、おおむね5分程度でインストールが完了します。
次に、下記コマンドを実行することで、calabash-androidが正しくインストールできていることを確認できます。
$ gem list --local | grep calabash calabash-android (0.5.2)
なお、Calabash-Androidのインストール方法は「Calabash-AndroidのGitHub上のInstallationページ」に詳細にまとめられているので、こちらも併せて参考にしてください。
Calabash-Androidでアプリをテストできるようにするためには、アプリ側にもいくつかの設定を行う必要があります。そのためには、「Instrumentation Test Server」の仕組みについて整理・理解しておく必要があります。
なお、本稿執筆時点(2014年11月)でのサンプルプログラムの状況は以下の通りです。詳細については、いずれも後述します。
上図のようにCalabash-Androidは、「Instrumentation Test Server」という仕組みを使い、HTTP通信によってテスト対象アプリを操作します。
Instrumentation Test Serverは「AndroidのInstrumentationの仕組み」を使い、テスト対象アプリを操作します。
「Ruby Client Library」(フィーチャー/シナリオ/ステップをinterpretする機能)と「Instrumentation Test Server」との間でHTTP通信を行い、テスト対象アプリを操作します。このことは、下記資料を付き合わせることで確認できます。
また、Calabash-Androidの仕様として、Calabash-Androidがテスト対象とするapkと「Instrumentation Test Server」のapkは、同じ証明書で署名されている必要があります(詳しくは「Running Calabash Android」を参考にしてください)。
Calabash-Androidでテスト可能なアプリは、次のものです。
以上を踏まえ、アプリのセットアップを進めていきます。
先述の通り、Calabash-AndroidはRuby Client LibraryとInstrumentation Test Serverとの間でHTTP通信を行います。そのため、アプリにネットワークへの接続許可が必要になります。
この設定は、「{プロジェクトのルート}/app/src/main/AndroidManifest.xml」ファイルに下記の定義を追加することで実現できます。
<uses-permission android:name="android.permission.INTERNET" />
しかし、テストを実行するためだけにリリース対象アプリに直接手を加えることは得策ではありません。そのため、「MonkeyTalk」と同様、Calabash-Androidによるテスト実行専用のプロダクトフレーバーを追加します。
まず、「{プロジェクトのルート}/app/src/」の下に「calabash」ディレクトリを作成します。
「{プロジェクトのルート}/app/src/calabash」ディレクトリに、下記内容で「AndroidManifest.xml」ファイルを追加します。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-permission android:name="android.permission.INTERNET" /> </manifest>
「{プロジェクトのルート}/app/build.gradle」ファイルを、下記のように修正します。
productFlavors { <中略> calabash { applicationId "com.nowsprinting.hellotesting.calabash" } }
これで、リリース対象アプリに直接手を加えることなく、Calabash-Androidでアプリをテストすることが可能になります。
ちなみに、この設定を行わない場合、Calabash-Android実行時に下記のエラーが発生します。
RuntimeError: App did not start
リリース用に署名されたアプリをテストする場合、最初に、署名用にkeystoreファイルを作成する必要があります。以下は、今回のサンプルで使用する「{プロジェクトのルート}/sample.keystore」ファイルの作成手順です。
$ keytool -genkeypair -keyalg RSA -keystore sample.keystore -keypass sample -alias atmarkit -storepass atmarkit -validity 10000
なお特に明記のない限り、後述の説明は、この「{プロジェクトのルート}/sample.keystore」ファイルの設定に基づいて行うこととします。
リリース用に署名されたアプリをテストする場合、さらに上記で作成したkeystoreファイルを使用して、ビルド時にアプリへ署名できるようにします。
「{プロジェクトのルート}/app/build.gradle」ファイルを、下記のように修正します。
signingConfigs { calabash { storeFile file("../sample.keystore") keyPassword "sample" keyAlias "atmarkit" storePassword "atmarkit" } } productFlavors { def calabashSigningVariable = signingConfigs.calabash <中略> calabash { applicationId "com.nowsprinting.hellotesting.calabash" signingConfig calabashSigningVariable } }
この修正後、プロジェクトのルートで下記コマンドを実行すると、リリース用に署名されたアプリが作成されるようになります。今回のサンプルでは「{プロジェクトのルート}/app/build/outputs/apk/app-calabash-release.apk」ファイルが該当します。
$ ./gradlew build
なお、gradleでのkeystoreファイルの指定方法については、以下も併せて参考にしてください。
Copyright © ITmedia, Inc. All Rights Reserved.