Appiumはモバイルアプリのテスト自動化において、広く利用されているツールの一つです。Appiumの使い方を学び、効率的なモバイルアプリテストを実現するためのノウハウを紹介します。また、テスト自動化を導入することで、モバイルアプリの品質向上や開発効率の向上が期待できます。
本記事では、Appiumの概要や基本的な使い方、そしてモバイルアプリのテスト自動化がもたらすメリットについて解説いたします。
モバイルアプリテストの重要性
モバイルアプリ、いわゆるiOSやAndroid向けにリリースされるアプリケーションは、スマートフォンユーザーにとって欠かせない存在となっています。スマートフォンを電話、メッセージの機能だけで利用している人は少なく、ゲームや動画、メッセージなどさまざまなアプリを利用しています。
そして、身近な存在であるだけに、モバイルアプリは常に他のアプリとの可処分時間の奪い合いとなっています。そこで大事になるのがアプリの品質です。品質が悪いアプリ(遅い、落ちる、使いにくい)は、ユーザーにとってストレスの原因となり、アンインストールされたり、使われなくなったりします。
そのため、テストがとても大事になります。ユーザーにとって使いやすいアプリを提供し続けなければ、苛烈なスマホアプリの競争では生き残れません。幸い、スマホアプリは一度リリースしたら終わりではなく、自動アップデートの仕組みによって、リリース後も改善が可能です。むしろ、改善を続けなければなりません。
もう一点、Webアプリケーションとの違いもあります。Webアプリケーションはサーバー側にすべてのコードが保持され、ユーザーに情報をどう見せるのか、サーバー側でコントロールできます。それに対して、モバイルアプリはユーザーの端末にインストールされるため、開発者ではコントロールできない部分が常に存在します。そうした多機種対応やOSバージョンの違いによるテストを手動ですべて行うのは限界があり、テストの自動化が求められます。
Appiumとは
モバイルアプリにおけるテスト自動化を担うのがAppiumになります。AppiumはUIテストを自動化するオープンソース・ソフトウェアで、モバイルだけに限らず、下記の環境に対応しています。
– モバイル
iOS/Android/Tizen
– ブラウザ
Chrome/Firefox/Safari
– デスクトップ
macOS/Windows
– TV
Roku/tvOS/Android TV/Samsung
こうした各種デバイスに対してドライバーを提供しており、Appiumから共通のスクリプトを通じてテストを実行できます。また、AppiumはSelenium WebDriverのプロトコルを採用しているので、Seleniumの知識があればAppiumも使いやすいと言えます。
他にも、モバイルアプリのUIテストを行えるツールは幾つかあります。
– Maestro
– Espresso
– XCTest
これらのテストツールは特定のOS向け(iOS向け、Android向け)に限定される、コミュニティがまだ小さく知見がたまっていない場合があります。Appiumは長期に渡って開発が行われており、多くのユーザーに利用されているので、情報が豊富で安心感があります。
Appiumの使い方
では、Appiumの簡単な使い方を紹介します。
環境構築
Appiumを利用する際には、 [Node.js](https://nodejs.org/en/) が必要なので、まずインストールする必要があります。インストール後、ターミナルやコマンドプロンプトで以下のコマンドを実行します。
“`bash
npm install -g appium
“`
インストールが終わると、 `appium` コマンドが使えるようになります。
周辺ツールとして、下記も必要になります。
iOSデバイスにアプリをインストールするためのツール(Windows/Linux向け)
iOSデバイスにアプリをインストールするためのツール(macOS向け)
Androidデバイス用Appiumドライバー
iOSデバイス用Appiumドライバー
テストスクリプトの作成
今回はJavaScriptを使った簡単なテストスクリプトについて解説します(ファイル名は `test.js` とします)。各行で何を行っているのかはコメントを参照してください。
“`javascript
// WebdriverIOのremote関数をインポート
const {remote} = require(‘webdriverio’);
// Appiumのテストで使用するデバイスやアプリの設定を指定
const capabilities = {
platformName: ‘Android’, // テスト対象のプラットフォーム(Androidを指定)
‘appium:automationName’: ‘UiAutomator2’, // 自動化ツールとしてUiAutomator2を使用
‘appium:deviceName’: ‘Android’, // テスト対象のデバイス名
‘appium:appPackage’: ‘com.android.settings’, // テストするアプリのパッケージ名
‘appium:appActivity’: ‘.Settings’, // アプリの開始アクティビティ(設定アプリのメイン画面)
};
// WebdriverIOの接続オプションを設定
const wdOpts = {
hostname: process.env.APPIUM_HOST || ‘localhost’, // Appiumサーバーのホスト名(環境変数があればそれを使い、なければlocalhost)
port: parseInt(process.env.APPIUM_PORT, 10) || 4723, // Appiumサーバーのポート番号(環境変数があればそれを使い、なければ4723)
logLevel: ‘info’, // ログレベル(infoで標準の情報を出力)
capabilities, // 上記で設定したデバイスやアプリの情報を指定
};
// 非同期関数としてテストを実行する関数を定義
async function runTest() {
// WebdriverIOを使ってAppiumサーバーに接続し、ドライバを作成
const driver = await remote(wdOpts);
try {
// XPathセレクタを使って「Battery」というテキストを持つUI要素を取得
const batteryItem = await driver.$(‘//*[@text=”Battery”]’);
// 取得したバッテリーの項目をクリック
await batteryItem.click();
} finally {
// 1秒間処理を一時停止
await driver.pause(1000);
// テスト終了後、セッションを削除してAppiumとの接続を切る
await driver.deleteSession();
}
}
// テストを実行し、エラーがあればコンソールに出力
runTest().catch(console.error);
“`
実際のテストは `node` コマンドで実行します。
“`bash
node test.js
“`
Appiumを活用した効率的なテスト手法
Appiumはクロスプラットフォーム(iOS/Android)でのテスト自動化が可能です。Androidの場合はエミュレータを、iOSの場合はiOSシミュレーター(macOSのみ)を使ってテストも可能です。開発時には、このようにローカルの仮想環境を使ってテストを行うのが良いでしょう。
そして、リリースできる段階になったら実機テストが望ましいです。CI/CDと絡めたテストの場合、ローカルネットワーク内でAndroid/iOSデバイスを接続して行うことも、[Anytest](https://service.valtes.co.jp/anytest/)のようなリモート実機サービスを利用することもできます。リモート実機サービスの場合、デバイスやOSバージョンなども多数選択できるので、多様な環境でのテストが可能です。
UIのテストは複雑で、アプリやOSの更新による影響を受けやすい傾向にあります。そのため、すべてのフローについてテストスクリプトを作成するのは現実的ではありません。テストケースを選定し、テストスクリプトの最適化を行いましょう。エラーがあった場合にビジネスインパクトが大きい部分を中心にテストを作成する、メンテナンス工数の少ないところからテストを自動化するのが有効です。
アプリ開発とAppiumの統合
テスト自動化の目的とも言えるのが、CI/CDパイプラインへの組み込みになります。コードを書いてローカルでテストを行うのは、その開発者自身が手がけた部分に限定されます。チームで開発している場合には、アプリ内のモジュールはもちろん、サーバーサイドとの連携やデータベースの更新など、多くの部分が影響します。
そうした部分を含めてテストを行うのが、CI/CDパイプラインの大事な役割になります。アプリは高頻度で更新・リリースされるので、都度手動テストを行うのは現実的ではありません。CI/CDパイプラインを使って、コードの変更があったら自動でテストを行い、問題があれば開発者に通知するといった仕組みを作りましょう。
CI/CDパイプラインはテスト領域だけなく、アプリのビルドやサーバーサイドの更新などにおいても有効です。CI/CDとテスト自動化によって、高品質なアプリを迅速にリリースできるようになります。
まとめ
今回はAppiumの基本的な使い方と、プロジェクトにおける役割(テスト自動化)について解説しました。Appiumはモバイルアプリのテスト自動化において、広く利用されているツールです。モバイルアプリの品質向上や開発効率の向上を目指す上で、ぜひ導入を検討してください。
T-DASHでは、先日モバイルアプリのテスト自動化に対応しました(現在はAndroidのみ)。Appiumを利用されたことのない方はもちろん、すでに利用されている方も、誰でもテストスクリプトを作成できるT-DASHをぜひご活用ください。
誰でもカンタンにテスト自動化ができる時代は、すぐそこまできています。当サイトでは、テスト自動化ツールに興味のある方へ、「テスト自動化 推進ガイドブック」と「テスト自動化ツールT-DASH 基本ガイドブック」のダウンロード資料をご用意しております。ぜひダウンロードいただき、資料をご覧ください。
またテスト自動化ツール「T-DASH」を無料でトライアル利用できる環境もご用意しています。ぜひ、お試しいただき、ツールを活用したテスト自動化に挑戦してみてください。
当サイトでは、テスト技法を学びたい方、アジャイル開発やマイグレーションのテスト手法について知りたい方、テストアウトソーシングサービスに興味のある方へ、ダウンロード資料を多数ご用意しております。ぜひダウンロードいただき、資料をご活用ください。