SeleniumのUIテスト自動化をiOS/AndroidにもたらすAppiumの基礎知識とインストール方法、基本的な使い方:スマホ向け無料システムテスト自動化ツール(8)(2/4 ページ)
本連載では、AndroidおよびiOSアプリ開発における、システムテストを自動化するツールを紹介していきます。今回は、オープンソースのモバイルテスト自動化ツール「Appium」の特徴やインストール方法、基本的な使い方を説明します。
Android向けのサンプルプログラム
本稿で使用するAndroid向けのサンプルアプリ(テスト対象アプリ)と、そのサンプルアプリに対するテストスクリプトを、以下のリポジトリで公開しています。本稿と併せて参考にしてください。
リポジトリのディレクトリ構成の概要は以下の通りです。
{プロジェクトのルート} ├── build.gradle (テスト対象アプリのビルドスクリプト) ├── app (テスト対象アプリが格納されている) │ └── src │ ├── main (ソースコード本体) │ ├── appium (appiumフレーバーのソース差分) │ … │ ├── appium (本稿のテストプロジェクトのルートディレクトリ) │ ├── build.gradle (本稿のテストプロジェクト向けのビルドスクリプト) │ ├── src │ … └── test (本稿のテストスクリプトが格納されている) …
テスト対象アプリの概要
本稿でテスト対象とするアプリは連載第1回の記事で紹介したものと同じものです。Android 4.1以上で動作し、以下の3つの画面で構成されています。
- Master画面:アプリ起動直後に表示される画面。右上にある「Add」ボタンを押すと「Detail画面」に遷移する
- Detail画面:顧客の氏名、メールアドレス、性別、年齢を登録する画面。右上にある「Preview」ボタンを押すと「Preview画面」に遷移する
- Preview画面:Detail画面で入力した内容を確認するための画面。Detail画面で入力した内容と合わせて、その顧客のマーケティング区分(F1層、M2層など)を表示する
また、Appiumによるテスト実行専用のプロダクトフレーバー「appium」を、テスト対象アプリに追加しています。
「appium」プロダクトフレーバーでは、Appium mode/Selendroid modeの両方で、WebViewを含むテストが実行できるように、「Appiumの2つの動作モード」で紹介した以下の2つの対応を行っています。
- アプリ起動時におけるWebViewのリモートデバッグ機能の有効化
- INTERNETパーミッションの利用宣言
なお、実際のプロダクトでは、同じアプリを両方の動作モードでテストできるようにする必要はありません。そのため、対応が必要な場合でも、どちらか一方のみの対応で十分であることに注意してください。
テスト対象アプリのビルド方法
テスト対象アプリのapkファイルをビルドするには、以下のコマンドを実行します。
$ cd {プロジェクトのルート} $ ./gradlew build
ビルドに成功すると、「{プロジェクトのルート}/app/build/outputs/apk/」配下に、apkファイルがいくつか生成されます。本稿では、前述の「appium」プロダクトフレーバーのapkファイル「app-appium-debug.apk」を利用します。
テストプロジェクトの概要
Appiumのテストスクリプトは、さまざまな言語やフレームワークを使って書くことができますが、サンプルのテストプロジェクトでは、以下を採用しています。
テスト内容は以下の通りです。
- 試験目的:新規に顧客を登録すると、登録した顧客の情報がPreview画面に正しく表示されることを確認する
- 試験手順・確認内容:
- Master画面の「Add」ボタンをタップし、Detail画面に遷移する
- Detail画面で以下の顧客情報を入力する
- 氏名:Yamada Taro
- メール:yamada@example.com
- 性別:男性
- 年齢:9歳
- 「Preview」ボタンをタップし、Preview画面に遷移する
- Preview画面で、以下の内容が表示されていることを確認する
- 氏名:Yamada Taro
- メール:yamada@example.com
- 性別:男性
- 年齢:9
- 区分:C層
テストスクリプトのクラス構成
サンプルのテストスクリプトのクラス構成は以下の通りです。
- Appium mode向けのテストケースは、「com.nowsprinting.hellotesting.appiumtest.appium」パッケージのクラスで定義している
- Page Objectパターンを使って、テストケースから画面の操作を隠蔽するクラスを切り出し、「com.nowsprinting.hellotesting.appiumtest.appium.page」パッケージに定義している
- Selendroid mode向けのテストケースは、「com.nowsprinting.hellotesting.appiumtest.selendroid」パッケージのクラスで定義している
- Selendroid mode向けのPage Object実装クラスは、「com.nowsprinting.hellotesting.appiumtest.selendroid.page」パッケージに定義している
- Appium modeのPage Object実装を継承し、差分のみを実装している
コラム「IDEにEclipseを利用するには」
サンプルの「build.gradle」には、IDEにEclipseを使う場合の設定も記載しています。Eclipseでテストスクリプトを編集するには、「{プロジェクトのルート}/appium」ディレクトリで以下のコマンドを実行した後に、Eclipseからインポートしてください。
$ ./gradlew eclipse
テスト実行時の注意点
■テスト実行環境のAndroidバージョン
サンプルのテスト対象にはWebViewが含まれるため、Appiumがサポートしているテスト実行環境(端末やエミュレーター)のAndroidバージョンは、以下のようになります。
- Appium mode向けのテストケースを実行する場合:Android 4.4以上
- Selendroid mode向けのテストケースを実行する場合:Android 2.3.3以上
ただし、サンプルのテスト対象アプリがAndroid 4.1以上のみで動作するため、Android 4.1未満の端末・エミュレーターでは動作しない点に注意してください。
また、Android 5.0以上の端末・エミュレーターを利用する場合には、コラム「Appiumのバージョンによる制限事項」も併せて参照してください。
■特定の動作モード向けのテストケースのみを実行する方法
サンプルのテストスクリプトでは、Appium mode向けのテストケースと、Selendroid mode向けのテストケースの所属パッケージを分けているため、「--tests」オプション(Gradle Javaプラグインのフィルタリングオプション)を使って、どちらか一方のみのテストスクリプトを実行できます。
Appium mode向けのテストケースのみを実行するには、Appiumサーバーを起動した状態(後述)で、以下のコマンドを実行してください。
$ cd {プロジェクトのルート}/appium $ ./gradlew test --tests "*.appium.*"
Selendroid mode向けのテストケースのみを実行する場合は、代わりに以下のコマンドを実行してください。
$ cd {プロジェクトのルート}/appium $ ./gradlew test --tests "*.selendroid.*"
iOS向けのサンプルプログラム
iOS向けのサンプルアプリは下記リポジトリで公開しています。テスト対象アプリのビルド手順は連載第1回記事を参照してください。
テストスクリプトは、「Appium」ディレクトリ下にPython(unittestモジュール)で書いたものを格納してあります。Appiumクライアントライブラリ(Pythonバインディング)は、下記コマンドでインストールできます。
$ pip install Appium-Python-Client
また、テストランナーにnoseを使用しています。インストールされていない場合は、下記コマンドでインストールしてください。
$ pip install nose
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- テスト自動化の歴史と今後、良い/悪い事例〜システムテスト自動化カンファレンス2013レポート
テスト自動化を開発の“武器”にするための3つのポイントや、“自動化”の良い事例、悪い事例など、テストの現場を「進化させる」知見が多数紹介されたカンファンレンスの模様をレポートする。 - ビジネス目標を見据えたテスト設計が肝!「DevOps時代のテスト自動化カンファレンス 冬の陣」開催
DevOpsの実践で肝となるソフトウェアテストの自動化。しかし@ITの読者調査でも50%以上が「テスト環境に課題あり」と回答した。これにどう対応すれは良いのだろうか? カンファレンス登壇者の言葉にヒントを探る。 - Kiwi+CocoaPodsで始めるiOSアプリの振る舞いテスト入門
現代の開発現場において欠かせないCI/継続的デリバリを、iOSアプリ開発に適用するためのツールやノウハウを解説する連載。今回は、iOSアプリの機能の振る舞いをテストするテスティングフレームワークの特長とインストールの仕方、主な使い方を解説します。 - Android SDKでビジネスロジックのテストを自動化するには
- 第2回Androidテスト祭りレポート:Android開発の上層テストで失敗しないためのポイントとは
セキュリティ設計や受け入れテストガイドライン、CIツールJenkins+コードレビューGeritt、テスト効率化ノウハウ、リモートテストサービスなど