SeleniumのUIテスト自動化をiOS/AndroidにもたらすAppiumの基礎知識とインストール方法、基本的な使い方:スマホ向け無料システムテスト自動化ツール(8)(4/4 ページ)
本連載では、AndroidおよびiOSアプリ開発における、システムテストを自動化するツールを紹介していきます。今回は、オープンソースのモバイルテスト自動化ツール「Appium」の特徴やインストール方法、基本的な使い方を説明します。
テストプロジェクトのセットアップ
続いて、テストプロジェクトのセットアップを行います。
Appiumは、テスト対象アプリの操作の自動化に特化しており、テスト対象アプリの状態が期待通りかどうか確認するAssertの機能や、その結果を出力する機能などは提供していません。そのため、Appiumクライアントライブラリと共に、テストフレームワーク(JavaではJUnit 4、RubyではRSpecなど)を使ってテストスクリプトを書けるようにします。
テストスクリプトを書く言語に対応していれば、テストフレームワークは好きなものを使うことができますが、本稿では、Android向けに用意したサンプルプログラムと同じく、Java・JUnit 4の組み合わせでテストを書く場合のセットアップ方法を説明します。また、テストスクリプトのビルドにはGradleを使います。
他のプログラミング言語でテストスクリプトを書く場合のセットアップ方法については、List of client libraries with Appium server supportを参照してください。
ディレクトリの作成
最初に、テストプロジェクトを格納するために空のディレクトリを作成します。テスト対象アプリのプロジェクトとは独立した場所に作成してください。テスト対象アプリの操作はAppiumサーバーが担うため、テスト対象プロジェクトの参照は不要です。
ここで作成したディレクトリを「テストプロジェクトのルートディレクトリ」と呼び、以降では「{テストプロジェクトのルート}」と記載します。
次に、GradleのJavaプラグインが想定するプロジェクトレイアウト(Mavenのプロジェクトレイアウトと同様)に従って、ディレクトリを作成します。このプロジェクトにはテストコードしか格納しないため、以下のディレクトリのみを作成すれば十分です。
- {テストプロジェクトのルート}/src/test/java
ファイルの配置
Gradleのビルド設定ファイル「build.gradle」を、「{テストプロジェクトのルート}」ディレクトリに作成します。作成するファイルの内容は以下の通りです。
apply plugin: 'java' // JavaソースコードのエンコーディングをUTF-8とする。 def defaultEncoding = 'UTF-8' tasks.withType(AbstractCompile).each { it.options.encoding = defaultEncoding } repositories { mavenCentral() } dependencies { // Appiumクライアントライブラリを利用するための宣言 testCompile 'io.appium:java-client:2.1.0' }
「dependencies」ブロックには、テストスクリプトが依存する(利用する)ライブラリを宣言します。
最低限、上記のように、Appiumクライアントライブラリを表す「'io.appium:java-client:2.1.0'」を指定してください。AppiumクライアントライブラリにJUnit 4への依存関係が宣言されているため、明示的なJUnit 4の宣言は不要です。
次に、テストスクリプトを配置します。「{テストプロジェクトのルート}/src/test/java」配下に、Javaのパッケージ階層に応じて、Javaで書かれたテストスクリプトを配置してください。
テストの実行(Android)
Appiumサーバーを起動する筐体に、テストを実行する端末をUSBケーブルで接続するか、エミュレーターを起動して、adbで認識された状態にします。
その後、以下のコマンドを実行してテストスクリプトを実行してください(GradleのJavaプラグインの機能を使います)。テスト結果は「{テストプロジェクトのルート}/build/reports/tests/index.html」に出力されます。
$ cd {テストプロジェクトのルート} $ ./gradlew test
テストの実行(iOS)
iOSアプリのテストを行う場合は、Appiumサーバーの起動前に下記の点に注意してください。
- Appium Desktop AppおよびAppiumサーバーは、Mac OS X上で実行する
- Appium Desktop Appからサーバーを起動する場合、iOS(Appleロゴ)ボタン下のラジオボタンを選択してからLaunchボタンをクリックする
iOSシミュレーターを使用する場合、Appiumからの操作を許可するために、テスト実行に先立ち下記コマンドを実行する必要があります。このコマンドは一度だけ実行します。
$ sudo authorize_ios
またiOS 8以降を使用するときは、設定アプリを起動して「デベロッパ」を選択し、「Enable UI Automation」のスイッチをオンにする必要があります。これはシミュレーターではデフォルトでオン、実機ではオフになっていますので注意してください。
テストスクリプトは通常のPythonスクリプトとしても扱えますが、noseを利用して下記コマンドで実行できます。
$ nosetests
サンプルプロジェクトでは、Makefileにルールを追加してありますので、下記コマンドでサンプルのテストが実行できます。
$ make appium-test
次回はテストスクリプトの書き方について
今回は、Appiumについて、特徴や基本的な使い方としてGUI版のセットアップ、テストの実行の仕方を紹介しましたが、いかがでしたでしょうか。
次回は、Java言語でのテストスクリプトの書き方やAppiumサーバーのコマンドラインからの実行方法について解説します。
- iOS/AndroidのUIテストを自動化するAppiumのテストスクリプトの書き方とインスペクターの使い方
- SeleniumのUIテスト自動化をiOS/AndroidにもたらすAppiumの基礎知識とインストール方法、基本的な使い方
- Calabash-Androidのテスト高速化、GPS、スクショ、データ駆動型テスト
- Calabash-AndroidによるBDDの実践とJenkinsによる「Living documentation」
- Calabash-Androidでテストシナリオを作成する方法
- iOS/AndroidにCucumberのBDDをもたらすテストフレームワークCalabashの基礎知識とインストール
- Androidテストで便利なuiautomatorviewer、UiScrollableの使い方、テキスト入力API制限事項の回避方法
- Android SDK標準の何でもテストツールuiautomatorの基本的な使い方
- システムテスト自動化の基礎知識とMonkeyTalkの使い方
著者紹介
外山 純生
NTTソフトウェア株式会社勤務。数年前よりAndroidアプリケーション開発にかかわり始めたのを切っ掛けに、Androidにおける自動テストに興味を持つようになる。Android関連プロジェクトに対する技術支援業務に携りながら、Android向けのテストツールがもっと広く使われるようになることを願って、ブログにて技術情報を発信中
Blog:sumioの技術メモ
Twitter:@sumio_tym
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、テスト効率化ノウハウ、リモートテストサービスなど