連載
» 2015年04月27日 05時00分 UPDATE

スマホ向け無料システムテスト自動化ツール(8):SeleniumのUIテスト自動化をiOS/AndroidにもたらすAppiumの基礎知識とインストール方法、基本的な使い方 (2/4)

[外山純生,テスト自動化研究会(STAR)/Androidテスト部]

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層など)を表示する
smaphotest8_4.jpgsmaphotest8_5.jpgsmaphotest8_6.jpg 左からMaster画面、Detail画面、Preview画面

 また、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のテストスクリプトは、さまざまな言語やフレームワークを使って書くことができますが、サンプルのテストプロジェクトでは、以下を採用しています。

  • テストスクリプトを書くのに利用するプログラミング言語:Java
  • テストフレームワーク:JUnit 4
  • ビルドツール:Gradle

 テスト内容は以下の通りです。

  • 試験目的:新規に顧客を登録すると、登録した顧客の情報がPreview画面に正しく表示されることを確認する
  • 試験手順・確認内容:
    1. Master画面の「Add」ボタンをタップし、Detail画面に遷移する
    2. Detail画面で以下の顧客情報を入力する
      • 氏名:Yamada Taro
      • メール:yamada@example.com
      • 性別:男性
      • 年齢:9歳
    3. 「Preview」ボタンをタップし、Preview画面に遷移する
    4. 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© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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