連載
» 2014年12月16日 18時00分 公開

iOS/AndroidにCucumberのBDDをもたらすテストフレームワークCalabashの基礎知識とインストールスマホ向け無料システムテスト自動化ツール(4)(2/3 ページ)

[伊藤宏幸,テスト自動化研究会(STAR),楽天株式会社]

Calabash-Androidのインストール

 Calabash-Androidを動作させるためには、以下のものが必要です。

  • Ruby 1.8.7以上
  • Android SDK($ANDROID_HOME環境変数)
  • Ant

 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用のプロダクトフレーバーを作成済み
  • 「.calabash_settings」を作成済み(「calabash-android setup」コマンドを実行済み)
  • テスト用ファイル群を作成済み(「calabash-android gen」コマンドを実行済み)

Instrumentation Test Serverとは

Instrumentation Test Serverの仕組み(http://blog.lesspainful.com/2012/03/07/Calabash-Android/http://blog.lesspainful.com/2012/03/07/Calabash/の図を基に筆者が加筆・修正)

 上図のように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でテスト可能なアプリは、次のものです。

  • デバッグ証明書で署名されたアプリ({APP_NAME}-debug.apk)
  • リリース用に署名されたアプリ({APP_NAME}-release.apk)

 以上を踏まえ、アプリのセットアップを進めていきます。

ネットワークへの接続許可

 先述の通り、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ファイルの作成(リリース用に署名されたアプリをテストする場合)

 リリース用に署名されたアプリをテストする場合、最初に、署名用に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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。