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

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

本連載では、AndroidおよびiOSアプリ開発における、システムテストを自動化するツールを紹介していきます。今回は、オープンソースのモバイルテスト自動化ツール「Appium」の特徴やインストール方法、基本的な使い方を説明します。

[外山純生,テスト自動化研究会(STAR)/Androidテスト部]
「スマホ向け無料システムテスト自動化ツール」のインデックス

連載目次

App(スマートフォンアプリ)のためのSelenium、Appiumとは

 Appiumは、Sauce Labsが中心となって開発している、オープンソースのテスト自動化ツールで、Apache License, Version 2.0で公開されています。

 Appiumの主な特徴は以下の通りです。

 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 modeの場合)

 図中に登場する、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】以外のケースでは、テスト対象アプリが下記条件を満たしている必要があります(満たしていない場合、テスト実行用のビルドバリアントを追加して対応します)。

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では、この制限事項は解消しています。


       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

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

RSSについて

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

メールマガジン登録

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