SeleniumのUIテスト自動化をiOS/AndroidにもたらすAppiumの基礎知識とインストール方法、基本的な使い方:スマホ向け無料システムテスト自動化ツール(8)(1/4 ページ)
本連載では、AndroidおよびiOSアプリ開発における、システムテストを自動化するツールを紹介していきます。今回は、オープンソースのモバイルテスト自動化ツール「Appium」の特徴やインストール方法、基本的な使い方を説明します。
App(スマートフォンアプリ)のためのSelenium、Appiumとは
Appiumは、Sauce Labsが中心となって開発している、オープンソースのテスト自動化ツールで、Apache License, Version 2.0で公開されています。
Appiumの主な特徴は以下の通りです。
- Android 2.3.3以降、iOS 6.0以降に対応している
- Webブラウザーを使ったテストの自動化で広く利用されているSelenium WebDriver(「Selenium 2」とも呼ばれます)と、ほぼ同じ書き方でスマートフォンアプリのテストスクリプトを書くことができる
- Ruby、Python、Javaをはじめとした、さまざまなプログラミング言語でテストスクリプトを書くことができる
Webアプリの自動テストにSelenium WebDriverを利用しているテストエンジニアが、少ない学習コストで、AndroidやiOSのアプリの自動テストにも着手できる、という点がAppiumを採用するメリットといえます。
Appiumは、バージョン1.0を境に、テストスクリプトの書き方(API仕様)が大きく変更されています。
そのため、バージョン1.0未満を前提に書かれたドキュメント(特にサンプルコード)は、最新版では動作しない可能性がありますので、ご自分で調査される際には十分注意してください。
以降では、本稿執筆時点におけるGUI版の最新バージョン(Mac OS X向けは1.3.4、Windows向けは1.3.4.1)を前提に解説していきます。
Appiumのアーキテクチャ
Appiumは、Selenium WebDriverのRemoteWebDriverとほぼ同様なアーキテクチャを採用しており、クライアント/サーバー型の構成となっています。
クライアントとサーバーの間はMobile JSON Wire Protocolで通信を行います。
「Mobile JSON Wire Protocol」は、Selenium WebDriverで採用されている「JSON Wire Protocol」を拡張したもので、HTTPをベースにしています。
図中に登場する、AppiumクライアントライブラリとAppiumサーバーの役割は以下の通りです。
- Appiumクライアントライブラリ:テストスクリプト向けに、テスト対象アプリを操作するためのAPIを提供する
- APIを通じて、テストスクリプトから(操作などの)命令を受け取ると、それをMobile JSON Wire Protocolに変換して、Appiumサーバーに送る
- Appiumサーバーから返される処理結果を受け取り、テストスクリプトに返す
- Appiumサーバー:Appiumクライアントライブラリから受け取った命令を解釈し、プラットフォーム標準の自動化フレームワークを使ってテスト対象アプリを操作する
- テスト対象アプリの操作が完了したら、その結果をAppiumクライアントライブラリに返す
テストスクリプト・Appiumサーバー共に、テストを実行するデバイス上ではなく、PCやサーバー上で実行します。テストスクリプトの実行環境は、テストスクリプト(プログラム)が実行でき、かつ、AppiumサーバーとHTTP通信ができれば、特に制限はありません。
一方、Appiumサーバーでは、テストを実行するデバイスを操作できる必要があるため、実行環境にいくつかの制約があります。詳しくは「Appiumサーバーのセットアップ」で説明します。
Appiumの2つの動作モード
Appiumサーバーには、デフォルトの動作モード(「Appium mode」と呼びます)とは別に、Selendroid modeと呼ばれる動作モードも搭載しています。
上記で図示したAndroid向けの自動化フレームワークはAppium mode時に利用されるものですが、比較的古いAndroidバージョンでは動作しません。Appiumの動作モードをSelendroid modeにすることで、古いバージョンのAndroidでもテストできるようになります。
Selendroid modeでは、自動化フレームワークに「Selendroid」を利用します。
利用する動作モードによってテストスクリプトの書き方が異なる(詳細は、次回解説)ため、テストを書き始める前に、どちらの動作モードを利用するか決めておく必要があります。
具体的には、テスト対象アプリの性質に応じて、以下の手順で動作モードを決定してください。
- テスト対象にWebViewが含まれる場合
- 【a】「minSdkVersion」が19以上の場合:Appium mode
- 【b】「minSdkVersion」が10以上18以下の場合:Selendroid mode
- テスト対象にWebViewが含まれない場合
- 【c】「minSdkVersion」が17以上の場合:Appium mode
- 【d】「minSdkVersion」が10以上16以下の場合:Selendroid mode
また、【c】以外のケースでは、テスト対象アプリが下記条件を満たしている必要があります(満たしていない場合、テスト実行用のビルドバリアントを追加して対応します)。
- Appium modeでWebViewをテストする場合(上記【a】のケース)
WebViewでページをロードする前(WebView.loadUrl()やWebView.loadData()などを呼び出すより前)に、以下の命令を実行して、WebViewのリモートデバッグ機能を有効にする必要がある
WebView.setWebContentsDebuggingEnabled(true);
- Selendroid modeを使う場合(上記【b】【d】のケース)
「AndroidManifest.xml」に、INTERNETパーミッションの利用宣言が必要
コラム「Appiumのバージョンによる制限事項」
本稿で前提としているAppium-1.3.4では、Android 5.0以上の場合に、Appium modeでのWebViewのテストに失敗してしまいます。Appium-1.3.6では、この制限事項は解消しています。
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、テスト効率化ノウハウ、リモートテストサービスなど