Android,iOS,Windowsなどのマルチプラットフォームで動くUIテストツールを目指しています。最近(8/18)iOS版が加わったので、試してみました。
簡単な解説とデモムービーは、UI テストツール「NativeDriver」の iOS 版をリリースしましたで見ることができます。 基本コンセプトは、ここにある"NativeDriver introduction" に説明があります。
テスト対象のアプリ内に HTTP サーバをおき、テストツールがクライアントとしてコネクトして JUnit のテストコードを実行することで、UIテストをする構造になっているようです。アプリ内に HTTP サーバを実現するためのライブラリが NativeDriver のコアになる部分で、テスト対象のアプリをビルドするときにスタティックリンクする形になるので、配布用のアプリとは別に UIテスト用のアプリを別のターゲットとして作成することになります。この NativeDriver のライブラリはプライベートAPIを使っているので、配布用のアプリに含めると、Apple の審査を通らないことになるので、注意が必要です。
まず、最初の手がかりとして、GettingStartedIOS に従って、ライブラリとサンプルアプリを作りテストを実行してみるのが理解の早道でしょう。開発環境は以下の通りです。
- Xcode 4
- Eclipse version 3.5 以降 (Eclipse IDE for Java Developers が必要) - download
- Ant - download
- JDK 1.6 以降 - download
0.ソースコードの入手
Google Codeからソースコードを入手するためにsvnが必要になるので、インストールしておく必要があります。ここではコマンドライン版のsvnを使います。 適当なディレクトリを作り
Google Codeからソースコードを入手するためにsvnが必要になるので、インストールしておく必要があります。ここではコマンドライン版のsvnを使います。 適当なディレクトリを作り
$ svn checkout https://nativedriver.googlecode.com/svn/trunk nativedriverで、リポジトリをチェックアウトすると、nativedriver 以下のディレクトリにソースコードが次のような構成で展開されます (Android用はソースコードは省略しています)。
nativedriver
|
|__iphone
| |__Classes (サーバコード)
| |__Client (クライアントコード)
| |__NativeDriver.xcodeproj (サーバのXcode プロジェクト)
| |__SampleApp (テスト用のサンプルアプリ)
| |__Tests (サーバコードの単体テスト)
| |__ThirdParty (必要なObjective-C ライブラリ)
|
|__third_party (必要なJava ライブラリ)
1.SampleAppのビルド/ラン
nativedriver/iphone/SampleApp/SampleApp.xcodeproj を Xcode で開ます。既にプロジェクトに nativedriver サーバのライブラリ ( nativedriver/iphone/NativeDriver.xcodeproj ) が組み込まれていますので、修正は不要です。ターゲットとして Automation iPhone 4.3 Simulator を選択し、ビルド/ランします。
ビルドが成功すれば、エミュレータが立ち上がり、SampleAppが実行されます。
テスト実行時にこの SampleApp がテスト対象の nativedriver サーバとなります。
nativedriver/iphone/SampleApp/SampleApp.xcodeproj を Xcode で開ます。既にプロジェクトに nativedriver サーバのライブラリ ( nativedriver/iphone/NativeDriver.xcodeproj ) が組み込まれていますので、修正は不要です。ターゲットとして Automation iPhone 4.3 Simulator を選択し、ビルド/ランします。
ビルドが成功すれば、エミュレータが立ち上がり、SampleAppが実行されます。
テスト実行時にこの SampleApp がテスト対象の nativedriver サーバとなります。
2.クライアントライブラリのビルド
nativedriver クライアントの機能を実現するためのライブラリ ios-client-standalone.jar をビルドします。 元になる ant プロジェクトは、nativedriver/iphone/Client にあります。このディレクトリに移動して ant を実行すれば、ビルドがはじまります。
nativedriver クライアントの機能を実現するためのライブラリ ios-client-standalone.jar をビルドします。 元になる ant プロジェクトは、nativedriver/iphone/Client にあります。このディレクトリに移動して ant を実行すれば、ビルドがはじまります。
$ cd nativedriver/iphone/Client
$ ant
Buildfile: /Users/<.....>/nativedriver/iphone/Client/build.xml
directory:
[mkdir] Created dir: /Users/<.....>/nativedriver/iphone/Client/class
[mkdir] Created dir: /Users/<.....>/nativedriver/iphone/Client/build
classes-client:
[javac] /Users/<.....>/nativedriver/iphone/Client/build.xml:30: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 6 source files to /Users/<.....>/nativedriver/iphone/Client/class
jar-client:
[jar] Building jar: /Users/<.....>/nativedriver/iphone/Client/build/ios-client.jar
standalone-client:
[zip] Building zip: /Users/<.....>/nativedriver/iphone/Client/build/ios-client-standalone.jar
eclipse-references:
[copy] Copying 1 file to /Users/<.....>/nativedriver/iphone/Client/test
compile:
BUILD SUCCESSFUL
Total time: 5 seconds
3.サンプルテストケースのインポート
SampleApp に対するテストケースは、nativedriver/iphone/Client/test にあります。この中に、テストケースのコードが格納されたディレクトリがあります。また、先ほどビルドされたios-client-standalone.jarがコピーされているはずです。これらを Eclipse に既存のプロジェクトしてインポートしてプロジェクトを作成します。
SampleApp に対するテストケースは、nativedriver/iphone/Client/test にあります。この中に、テストケースのコードが格納されたディレクトリがあります。また、先ほどビルドされたios-client-standalone.jarがコピーされているはずです。これらを Eclipse に既存のプロジェクトしてインポートしてプロジェクトを作成します。
- Eclipse を起動
- メニューの File>Import を選択
- カテゴリ General の Existing Projects into Workspace を選択し、Next ボタンを押す
- チェックボックス Select root directory をチェックして、Browse... ボタンを押す
- nativedriver/iphone/Client/test を選択して、Open ボタンを押す
- Project: 欄に、ios-test(<ディレクトリ名>) にチェックが入ってるのを確認して、Finishボタンを押す
インポートされると Package Explorer に ios-test というプロジェクトが追加されます。
4.テストの実行
以上で、nativedriver クライアントを実行して、UIテストする準備が整いました。
プロジェクトに含まれるテストコード NativeDriverTest.java(のクラスNativeDriverTest)をJUnit Testとして実行すると、UIテストが実行されます。
このとき、1.の手順でランしていたSampleApp がエミュレータで実行されていない場合、当然UIテストが正しく行えません。JUnit Testを実行する前に、SampleApp をランしておいてください。
次の画面は、テスト完了時の様子です。
最後に
とりあえず、SampleApp のUIテストできるようになりましたが、実機での UIテストはどうするのか、あるいは、具体的なテストコードはどう書けばいいかなど、実際に自分のプロジェクトに取り入れる上で知らなければならない点はたくさんあります。それらの点はまた項を改めて述べたいと思います。
以上で、nativedriver クライアントを実行して、UIテストする準備が整いました。
プロジェクトに含まれるテストコード NativeDriverTest.java(のクラスNativeDriverTest)をJUnit Testとして実行すると、UIテストが実行されます。
このとき、1.の手順でランしていたSampleApp がエミュレータで実行されていない場合、当然UIテストが正しく行えません。JUnit Testを実行する前に、SampleApp をランしておいてください。
次の画面は、テスト完了時の様子です。
最後に
とりあえず、SampleApp のUIテストできるようになりましたが、実機での UIテストはどうするのか、あるいは、具体的なテストコードはどう書けばいいかなど、実際に自分のプロジェクトに取り入れる上で知らなければならない点はたくさんあります。それらの点はまた項を改めて述べたいと思います。
0 件のコメント:
コメントを投稿