公開日:4月22、2020
JavaScriptを使用してAppium Automationを設定するには、このガイドに従ってください。
*最終更新日:2025年5月
今日のソフトウェア開発環境において、モバイルテストの自動化はこれまで以上に重要になっています。ネイティブiOSおよびAndroidアプリで完璧なユーザーエクスペリエンスを実現することを目指す場合でも、ハイブリッドアプリケーションを最適化する場合でも、一貫したパフォーマンスを保証する場合でも、自動化はプロセスを推進する原動力となります。このガイドでは、Node.jsやAndroid/iOS SDKなどの必要な前提条件のインストールから、Appiumと必須のJavaScriptライブラリの設定まで、JavaScriptを使用してAppium自動化環境を構築する手順を詳しく説明します。このガイドが、モバイルアプリのテストを効率的に自動化するための確固たる基盤を築けることを願っています。
まずは開発環境の構築から始めましょう。これが私たちのデジタルツールキットになります。自動化の基盤となる、いくつかの必須ソフトウェアコンポーネントとJavaScriptライブラリをインストールします。さあ、始めましょう。
Appium インストールの前提条件
構築する前に必要な必須ツールは次のとおりです。
Node.js と npm (または Yarn): これらはJavaScriptに必要な実行環境を提供します。npm(Node Package Manager)はNode.jsにバンドルされており、JavaScriptライブラリのインストールに役立ちます。Yarnも代替パッケージマネージャーとして使用できます。
推奨事項: 公式に行く Node.js ウェブサイトにアクセスして最新の安定版をダウンロードしてください LTS(長期サポート) バージョン。インストールが完了したら、ターミナルまたはコマンドプロンプトを開き、次のコマンドを実行してインストールを確認します。
```バッシュ ノード -v Npm -
Yarn の使用 (オプション): Yarn を好む場合は、npm を使用してグローバルにインストールできます。
```バッシュ npm インストール -g 糸 `` `
インストールを検証するには、以下を実行します。
```バッシュ Yarn --バージョン `` `
より基本的なツール
- Java Development Kit(JDK): ここではJavaScriptで記述しますが、Appiumとその基盤となるコンポーネントの一部はJavaに依存しています。これは特にAndroidの自動化において当てはまります。
- 推奨事項: 互換性のあるJDKをインストールしてください。 Oracleのウェブサイト (アカウントが必要になる場合があります)またはオープンソースの代替手段を使用してください。 オープンJDK.
- 環境変数: JDKをインストールした後、おそらく `JAVA_HOME` 環境変数を JDK インストール ディレクトリを指すように設定し、他のツールが Java を見つけられるようにします。
- Android SDK (Android Automation 用): Androidアプリを自動化するには、Androidソフトウェア開発キットが必要です。これには、必要なツール、ライブラリ、エミュレータが含まれています。
- 推奨事項: ダウンロードしてインストール Androidのメーカーセットアップ中に、必要な SDK コンポーネントを選択してインストールできます。
- 環境変数: をセットする `ANDROID_HOME` Android SDKディレクトリに環境変数を追加します。また、 `プラットフォームツール` ディレクトリ(Android SDK内)をシステムのPATH環境変数に追加して、次のような重要なツールにアクセスします。 `adb`.
- Xcode および iOS SDK (iOS 自動化用): iOS アプリケーションを自動化するための Apple の開発環境である Xcode には、iOS SDK が含まれています。
- 推奨事項: XcodeはmacOSで利用でき、以下からダウンロードできます。 アップル開発者のウェブサイト または、Apple ID が必要な Mac App Store から入手することもできます。
- Xcodeコマンドラインツール: Xcodeをインストールしたら、それを開き、 Xcode > 設定… > 場所、およびをインストールします コマンドラインツール ドロップダウンメニューから選択します。
- アピウムドクター: この便利なツールは、システムにAppiumに必要な依存関係がすべて揃っているかどうかを判断します。後ほど、セットアップの確認に使用します。
Appiumのインストール
前提条件が整ったら、Appium 自体をインストールしましょう。
- Appium サーバーをインストールします。 ターミナルまたはコマンド プロンプトを開き、NPM を使用してこのコマンドをグローバルに実行すると、最新の安定した Appium 2.x サーバーがシステムにインストールされます。
```バッシュ npm インストール -g appium `` `
- Appium ドライバーをインストールします。 次に、テストするモバイルプラットフォーム用のドライバーをインストールします。最も一般的なものは、Androidの場合はUiAutomator2、iOSの場合はXCUITestです。
Appium ドライバー CLI を使用してインストールします。
Androidの場合(UiAutomator2):
```バッシュ Appium ドライバーのインストール uiautomator2 `` `
iOSの場合(XCUITest):
```バッシュ Appium ドライバーのインストール xcuitest `` `
インストールされているドライバーを確認します: 次のコマンドを実行すると、インストールされているドライバーを確認できます。
```バッシュ Appium ドライバーリスト --インストール済み `` `
必要なJavaScriptライブラリのインストール
Appiumをセットアップしたら、JavaScriptコードがAppiumサーバーと通信できるようにクライアントライブラリが必要です。JavaScriptで最も人気があり、推奨されているのは`WebdriverIO`です。
1. プロジェクトディレクトリを作成します。 Appium JavaScript テスト用の新しいフォルダーを作成し、ターミナルでそのフォルダーに移動します。
```バッシュ appium-js-tests のディレクトリ Cd Appium-js テスト `` `
2. プロジェクトを初期化する: NPM(またはYarn)を使用して `package.json` プロジェクトの依存関係を追跡するファイルです。
```バッシュ npm init -y `` `
(または `yarn init -y`)
3. WebdriverIOをインストールします。 インストール `WebdriverIO` パッケージとその同期コマンド実行ラッパーを開発依存関係としてインストールします。
```バッシュ npm インストール --save-dev WebdriverIO WebdriverIO/sync `` `
(または `yarn add –dev WebdriverIO WebdriverIO/sync`)
4. Appium サービスプラグインをインストールします。 WebdriverIO を Appium とシームレスに動作させるには、Appium サービス プラグインをインストールします。
```バッシュ npm インストール --save-dev @wdio/appium-service `` `
(または `yarn add –dev @wdio/appium-service`)
5. テストランナーをインストールする(オプションだが推奨) WebdriverIOスクリプトを直接実行することもできますが、Mochaのようなテストランナーを使用すると、より体系的にテストを構造化して実行できます。Mochaのインストール方法は次のとおりです。
```バッシュ npm インストール --save-dev mocha `` `
(または `yarn add –dev mocha`)
これで、JavaScript を使った Appium 環境の構築が完了しました。Appium のアーキテクチャを詳しく調べ、最初のモバイル自動化テストの作成を開始する準備が整いました。
Appiumアーキテクチャの理解
環境が構築されたら、Appiumがどのように動作するのか、そして舞台裏で何を行っているのかを理解することが重要です。Appiumは クライアントサーバーアーキテクチャ、テストスクリプト(クライアント)が指示を送信します Appiumサーバーサーバーは専用のドライバーを使用してモバイルデバイスと通信します。これにより、プラットフォームの独立性と、異なるオペレーティングシステム間での一貫した自動化が保証されます。
Appium サーバー要素:
- HTTP サーバー: Appium Serverは、REST API(Representational State Transfer Application Programming Interface)を使用してNode.jsで記述されたHTTPサーバーです。つまり、テストスクリプトはHTTPリクエストを送信することでサーバーと通信します。
- WebDriver プロトコル: AppiumはWebDriverプロトコル(現在W3C WebDriver仕様として知られています)を実装しています。これは、Selenium WebDriverによるWebブラウザ自動化に使用されているプロトコルと同じです。この標準は、開発者とテスターに一貫性を提供します。
- セッション管理: Appiumテストを実行する際、クライアントはサーバーにリクエストを送信し、「セッション」を開始します。セッションは、テスト対象のデバイス/エミュレータ/シミュレータとアプリケーションに固有のものです。サーバーはこのセッションのライフサイクルを管理します。
- コマンドの実行: セッションが確立されると、テストスクリプトはAppiumサーバーにコマンド(例:「要素の検索」、「クリック」、「キーの送信」)を送信します。サーバーはこれらのコマンドを解釈し、対象のモバイルデバイスで実行されるアクションに変換します。
- ドライバー委任: Appiumは特定のドライバーにインタラクションを委譲します。例えば:
- Android の自動化の場合、Appium は UiAutomator2 や Espresso などのドライバーを利用します。
- iOS 自動化では、XCUITest ドライバーを使用します。
Appiumクライアント
これらは、様々なプログラミング言語でテストスクリプトを記述するためのライブラリまたは言語バインディングです。ここでは、先ほどインストールしたJavaScriptクライアントライブラリであるWebDriverIOを使用します。
- 言語バインディング: Appium クライアントは、Appium サーバーとの通信の複雑な詳細を隠す、使いやすいツール (API) を提供します。
- WebDriver プロトコルの実装: これらのクライアント ライブラリは WebDriver プロトコルを実装し、標準化された方法で Appium サーバーにコマンドを送信できるようになります。
- 簡素化されたインタラクション: たとえば、WebDriverIO は、モバイル自動化用に特別に設計された豊富なコマンドと機能を提供し、UI 要素との対話、ジェスチャの処理、アプリケーション データの取得を容易にします。
- クライアントの選択: Appium は、Java、Python、Ruby、C#、そしてもちろん JavaScript などの言語で幅広いクライアント ライブラリをサポートしています。
サポートされているプラットフォーム
Appiumの大きな強みの一つは、クロスプラットフォーム対応です。これにより、同じAPIを使ってテストを記述でき、多くの場合、異なるモバイルOS間でテストコードを再利用できます。Appiumがサポートする主なプラットフォームは以下の通りです。
- iOSの: Appium は、iOS アプリケーションと対話するために Apple の XCUItest フレームワークを活用します。
- アンドロイド: Appiumは、GoogleのAndroid向け最新自動化フレームワークであるUiAutomator2フレームワークを使用しています。また、Androidアプリケーションのホワイトボックステスト用にEspressoもサポートしています。
- Windows: Appium は、winappdriver を使用して Windows デスクトップ アプリケーションの自動化をサポートしています。
- MacOS: 同様に、Appium は MacDriver を使用して macOS デスクトップ アプリケーションのテストも自動化します。
JavaScript で最初の Appium テストを書く
環境を構築し、Appiumのアーキテクチャをより深く理解することができました。いよいよJavaScriptを使って、初めてのモバイル自動テストを書いてみましょう!このセクションでは、簡単なテストスクリプトを作成し、モバイルデバイスまたはエミュレーター/シミュレーターで実行し、初期結果を分析します。
テストスクリプトの作成
アプリケーションを起動し、要素を見つけて、簡単なアクションを実行する基本的なテストスクリプトを作成しましょう。先ほどインストールしたJavaScriptクライアントライブラリ、WebdriverIO、そしてMochaテストランナーを使用します。
1. テストファイルを設定する: プロジェクトディレクトリ内(`appium-js-テスト`)という名前の新しいフォルダを作成します。 `テスト`このフォルダ内に、新しいJavaScriptファイルを作成します。例えば、 `first_test.js`.
2. 必要なモジュールをインポートする: 店は開いています `first_test.js` コードエディタでインポートし、 `WebdriverIO` モジュール。同期バージョンをインストールしたので、それをインポートします。
```JavaScript 定数 WebdriverIO = require('WebdriverIO'); 定数アサート = require('assert'); // アサーションを行うために `` `
3. 必要な機能を定義する: これらの機能は、Appiumサーバーに特定のデバイスまたはエミュレータ/シミュレータを使用して特定のアプリケーションをテストするよう指示します。設定に応じて調整してください。
```JavaScript 定数desiredcaps = { プラットフォーム名: 'Android'、 // または 「iOS」 デバイス名: 'your_device_name', // デバイス名またはエミュレータ名に置き換えます アプリパッケージ: 'com.example.android.app', // アプリのパッケージ名に置き換えます(Android) アプリアクティビティ: '.mainactivity', // アプリのメインアクティビティに置き換えます(Android) // iOS の場合は次のように使用できます: // プラットフォーム名: 'ios', // デバイス名: 'iPhone シミュレータ', // またはシミュレータ名 // アプリ: '/path/to/your/app.app' // iOS アプリファイルへのパス }; `` `
注意: を見つける必要があります。 `デバイス名`, `アプリパッケージ`, `アプリアクティビティ` (Android の場合) または `アプリ` テストしたいアプリケーションのパスとバンドルID(iOSの場合)を入力します。 `adbデバイス` (Android の場合) および Appium Inspector を使用すると、この情報を見つけるのに役立ちます。
4. テストスイートとテストケースを作成する: モカの 「記述」 (NAIST) と 「それ」 テストを構成するブロック:
```JavaScript Describe('私の最初のAppiumテスト', () => { It('要素を見つけてアクションを実行する必要があります', async() => { 定数クライアント = WebdriverIO.remote({ 望ましい機能: 望ましいキャップ、 ポート:4723 // デフォルトのAppiumサーバーポート }); // アクセシビリティID、XPath、またはその他のロケータ戦略で要素を検索します 定数要素 = クライアントを待機します。$('~someaccessibilityid'); // アクセシビリティIDを使用した例 // 要素に対してアクションを実行する(例:クリック) element.click() を待機します。 // 結果を検証するためにここにアサーションを追加できます // 例えば: // const anotherelement = クライアントを待機します。$('~anotherelementid'); // const isvisible = 別の要素が表示されるのを待ちます(); // assert.strictequal(isvisible, true, 'クリック後に別の要素が表示される必要があります'); // セッションを終了する client.deletesession() を待機します。 }); }); `` `
この例では、次のようになります。
- Appiumサーバーに接続して `WebdriverIO.remote()` 希望する機能を備えています。
- アクセシビリティIDロケータ戦略で`$`セレクタを使用しました( 「〜」) を使って要素を検索します。XPath (`//`)、クラス名(「。」)、ID(`#`、等)。
- 実行した `クリック()` 見つかった要素に対するアクション。
- 基本的なアサーション(コメントアウト)を次のように含めました。 `アサート` アクション後の状態を確認するモジュール。
- Appiumセッションを終了するには `client.deletesession()` デバイスのリソースを解放します。
テストの実行
最初のテスト スクリプトを作成したので、それを実行してみましょう。
1. Appium サーバーを起動します。 Appiumサーバーが起動していることを確認してください。Appiumをグローバルにインストールした場合は、通常、新しいターミナルまたはコマンドプロンプトを開いて次のコマンドを実行することで起動できます。
```バッシュ アピウム `` `
サーバーが正常に起動し、デフォルト ポート (4723) またはスクリプトで構成したポートでリッスンしていることを確認します。
2. Mocha を使用してテストを実行します。 ターミナルでプロジェクトのルート ディレクトリに移動し、テスト ファイルへのパスを指定して Mocha テスト ランナーを実行します。
```バッシュ Npx モカテスト/first_test.js `` `
Mocha はテストスクリプトを実行し、ターミナルにテストの成功/失敗を示す出力が表示されます。失敗した場合はエラーメッセージも表示されます。また、Appium がスクリプト内のコマンドを実行する際、接続されたモバイルデバイスまたはエミュレータ/シミュレータ上でアクティビティが発生することも確認できるはずです。
テスト結果の分析
テスト実行が完了したので、結果を理解していることを確認しましょう。
- 端末出力: Mocha テストランナーは、実行されたテストの数、成功したテストと失敗したテストの数など、テスト実行の概要を提供します。テストが失敗した場合は、エラーメッセージとスタックトレースが表示され、失敗の原因を特定するのに役立ちます。
- Appium サーバー ログ: クライアントから送信されたコマンドとデバイスからの応答に関する詳細な情報を提供します。これらのログはデバッグに役立ちます。エラーメッセージや予期しない動作がないか確認してください。
- デバイス/エミュレータの状態: テスト実行後、モバイルデバイスまたはエミュレータ/シミュレータの状態を確認してください。アプリケーションが正しく起動したか、想定通りの動作が行われたか、デバイス上でエラーやクラッシュが発生していないかを確認してください。
- アサーション: テストにアサーションが含まれている場合、いずれかのアサーションが満たされないとテストは失敗します。アサーションメッセージを指定することで、何が問題だったのかを把握できます。
これで、JavaScript を使った最初の Appium テストの作成、実行、そして結果の分析が完了しました。これは、テスターにとってモバイル自動化の道のりにおける重要な一歩です。
Appium JavaScript の高度な機能
Appiumの高度な機能は、非常に強力で柔軟性に優れています。これにより、モバイルアプリケーションをより洗練された方法で操作し、様々なシナリオに対応し、テストプロセスを最適化できます。JavaScriptで活用できる主要な高度な機能をいくつか見ていきましょう。
必要な機能の使用
必要な機能とは、Appiumクライアントからサーバーに送信されるキーと値のペアのセットであり、自動化セッションの設定方法をサーバーに指示します。特定のデバイス、オペレーティングシステムのバージョン、アプリケーションの設定に合わせてテストをカスタマイズするために不可欠です。
- 基本情報を超えて: 一方、 `プラットフォーム名`, `デバイス名`, `アプリパッケージ`, `アプリアクティビティ` (または `バンドルID` (NAIST) と `アプリ` iOS 向けの機能は必須ですが、他の多くの機能もテストの実行に大きな影響を与える可能性があります。
- デバイスと OS の詳細: 特定のOSバージョンをターゲットにすることができます(例: `プラットフォームバージョン: '13.0'`)、デバイスUDID(実際のデバイスの場合: `udid: 'your_device_udid'`)、または使用する自動化エンジンを指定することもできます(例: `オートメーション名: 'uiautomator2'` アンドロイド用または `オートメーション名: 'xcuitest'` iOS の場合)。
- アプリケーションの動作: 必要な機能は、テスト対象アプリケーションの起動や処理方法に影響を与える可能性があります。例えば、 `noreset: true` セッション間でアプリのデータが消去されるのを防ぎます。逆に、 `フルリセット: true` 各セッションの前にアプリをアンインストールして再インストールし、クリーンな状態を確保します。
- ブラウザのテスト: モバイルウェブアプリケーションを自動化する場合は、次のような機能を使用します。 `ブラウザ名: 'Chrome'` (Androidの場合)または `ブラウザ名: 'Safari'` (iOSの場合)。
- クラウド テスト プラットフォーム: クラウドベースのAppiumテストサービスを使用する場合、 Digital.ai テストでは、ブラウザのバージョン、デバイス プール、ビルド情報など、クラウド環境を定義するために特定の必要な機能を利用することがよくあります。
- 設定オプション: UiAutomator2 には、待機戦略やネットワーク設定などを制御する機能があります。XCUITest には、アラートやキーボードの動作を処理する機能があります。
モバイルジェスチャーの処理
モバイルアプリケーションは、アクションを実行するためにジェスチャーに依存しています。Appiumは、自動化スクリプトでこれらの複雑なインタラクションをシミュレートするメカニズムを提供します。WebdriverIOは、ジェスチャーを処理するための便利なメソッドを提供しています。
- 基本アクション: 単純なタップやクリックの場合は、 `element.click` 先ほど使用した方法で十分です。
- タッチアクションAPI: より複雑なジェスチャーを実現するために、WebdriverIOはTouch Actions APIを提供しています。これにより、画面上で実行できる一連のタッチイベントを定義できます。例えば、以下のようなアクションを作成できます。
- `press()`: 特定の座標または要素を押す動作をシミュレートします。
- `moveto()`: タッチを新しい座標または要素に移動することをシミュレートします。
- `release()`: タッチの解除をシミュレートします。
- `wait()`: 指定された期間、シーケンスを一時停止します。
- `tap()`: 要素または座標をすばやくタップします。
- `doubletap()`: ダブルタップを実行します。
- `longpress()`: 長押しを実行します。
- `swipe()`: あるポイントから別のポイントへのスワイプをシミュレートします。
- `pinchopen()` と `pinchclose()`: ピンチしてズームするジェスチャをシミュレートします。
- `draganddrop()`: 要素をドラッグして別の要素にドロップする動作をシミュレートします。
以下は、WebdriverIO のタッチ アクションを使用して実行されるスワイプの基本的な例です。
```JavaScript 定数 { タッチアクション } = WebdriverIO; It('スワイプアクションを実行する必要があります', async() => { 定数要素 = クライアントを待機します。$('~swipeableelement'); 定数 location = 要素.getlocation() を待機します。 定数 size = 要素.getsize() を待機します。 定数 startx = location.x + size.width / 2; 定数 starty = location.y + size.height / 2; Const endx = startx - 200; // 左にスワイプ 定数 endy = starty; 定数アクション = 新しいタッチアクション(クライアント); 行動 .press({ x: startx, y: starty }) .moveto({ x: endx, y: endy }) 。リリース(); action.perform() を待機します。 }); `` `
これらのタッチアクションをシーケンスで組み合わせると、モバイル アプリケーション内でのさまざまなユーザー インタラクションをシミュレートできます。
実機とエミュレータ/シミュレータの操作
自動テストを実行する場合、実際の物理デバイスでテストを実行するか、エミュレーター/シミュレーターでテストを実行するかの選択は複雑で、それぞれに長所と短所があります。
エミュレータ/シミュレータ
Advantages:
- 費用対効果の高い: 通常、SDK の一部として無料で使用できます。
- セットアップと管理が簡単: 仮想デバイスを比較的迅速に作成および構成します。
- 再現性: 一貫したテスト環境を維持しやすくなります。
- デバッグツール: 多くの場合、より優れたデバッグ機能とシステム ログへのアクセスが提供されます。
短所:
- 必ずしも実際のデバイスの動作を反映しているわけではありません。 パフォーマンス、バッテリー消費、および特定のハードウェア機能は正確にシミュレートされない可能性があります。
- ハードウェア アクセスの制限: 一部のデバイス固有の機能は完全には利用できないか、正確にシミュレートされない可能性があります。
- パフォーマンスの違い: エミュレーターまたはシミュレーター上のパフォーマンスは、実際のデバイスのパフォーマンスを正確に反映しない可能性があります。
実際のデバイス:
Advantages:
- ユーザーエクスペリエンスの正確な表現: テストは、ユーザーが実際に操作するハードウェアとソフトウェア上で実行されます。
- デバイス機能へのフルアクセス: カメラ、GPS、センサーなどの機能をテストできます。
- 現実的なパフォーマンステスト: ターゲットデバイス上のアプリのパフォーマンスに関する正確な分析情報を提供します。
短所:
- より高いコスト: 実際のデバイスの取得と維持にはコストがかかる可能性があります。
- セットアップと管理の複雑さ: 複数の物理デバイスを管理し、それらが充電され、接続され、一貫した状態であることを確認するのは困難な場合があります。
- 環境の不一致: 実際のデバイスではソフトウェアのバージョン、構成、バックグラウンド プロセスが異なる場合があり、テスト結果に一貫性がなくなる可能性があります。
Appiumテストのデバッグとトラブルシューティング
Appium の自動化を進める中で、必然的に問題に遭遇することになります。効果的なデバッグとトラブルシューティングは、問題を迅速に特定して解決し、テストスイートの安定性と信頼性を確保する上で不可欠です。
一般的な問題と解決策
| 問題 | 詳細説明 | 解決策 |
|---|---|---|
| 要素が見つかりません | これは非常によくあるエラーです。 | 要素ロケータ(アクセシビリティID、XPath、CSSセレクタなど)を再確認してください。Appium Inspectorを使用して、ロケータが正しく、操作時に要素が画面上に表示されていることを確認してください。ハイブリッドアプリの場合は、アプリケーションのコンテキスト(ネイティブ、WebView)が正しいことを確認してください。要素の表示に時間がかかる場合は、明示的な待機(`client.waituntil()`)を追加すると改善されることがあります。 |
| セッション未作成例外 | これは通常、必要な機能または Appium サーバーの設定に問題があることを示しています。 | 必要な機能に誤字や誤った値がないか、注意深く確認してください。指定したデバイスまたはエミュレータ/シミュレータが実行中でアクセス可能であることを確認してください。Appiumサーバーのログで、セッション作成中に発生したエラーメッセージを確認してください。必要なドライバー(UiAutomator2、XCUITest)が正しくインストールされていることを確認してください。 |
| Appium サーバーが起動しない、またはクラッシュする | Appiumサーバーのログでエラーメッセージを確認してください。他のプロセスが同じポート(デフォルトは4723)を使用していないことを確認してください。サーバーを再起動してください。Appium Desktopを使用している場合は、そのログを確認してください。コマンドラインを使用している場合は、Node.jsとAppiumが正しくインストールされていることを確認してください。 | |
| 「要素が操作不可」例外 | 要素は存在しますが、操作できません (たとえば、非表示、無効、または別の要素によって隠されています)。 | Appium Inspector を使用して、要素のプロパティと可視性を確認します。要素が有効になっており、他の UI 要素に隠れていないことを確認してください。 |
| テスト実行が遅い | ロケータを最適化して効率を高めましょう。過度に複雑なXPath式は避けましょう。暗黙的な待機だけに頼るのではなく、明示的な待機を使用してください。テストフロー内の不要なステップを最小限に抑えましょう。設定で可能な場合は、テストを並列実行してください。 | |
| 不安定なテスト | 時には合格し、時には不合格となるテスト。 | 多くの場合、タイミングの問題やアプリ内の非同期操作が原因です。適切な条件で明示的に待機するなど、堅牢な待機戦略を実装してください。テスト環境が安定していることを確認してください。ハードコードされた遅延に依存しないようにしてください。 |
| テスト対象のデバイスまたはアプリが正しくありません | 必要な機能を再確認し、正しいデバイス (デバイス名、UDID) とアプリケーション (apppackage/appactivity または bundleid/app path) をターゲットにしていることを確認します。 | |
| 実デバイスでの権限の問題 | 実機上のアプリケーションに必要な権限が付与されていることを確認してください。権限プロンプトの処理には、手動で権限を付与するか、必要な機能を使用する必要がある場合があります。 |
Appiumインスペクタの使用
Appium Inspectorは、接続されたデバイスやエミュレータ/シミュレータ上でモバイルアプリケーションのUI要素をリアルタイムに検査できるGUIツールです。アプリケーションの構造を理解し、自動化スクリプトの適切なロケーターを特定するのに役立ちます。
- セッションへの接続: 検査するアプリケーションに必要な機能と、実行中の Appium サーバーのアドレスとポートを使用して、Appium Inspector を構成します。
- UI 要素階層: 接続されると、Appium Inspector はアプリケーションの UI 要素の階層ビューを表示し、その構造と属性を示します。
- ロケーター識別: インスペクターで要素を選択すると、様々なロケーター戦略(XPath、アクセシビリティIDなど)が提案されます。これらはテストスクリプトで使用できます。
- 基本的なアクションの記録: Appium Inspectorの一部のバージョンでは、タップやタイピングといった基本的な操作を記録し、JavaScript(WebdriverIO)を含む様々なプログラミング言語で対応するコードを生成することができます。これは、テストスクリプトの作成をすぐに始めるのに最適な方法です。
- 要素プロパティの検証: 個々の要素のプロパティを検査してその状態 (表示、有効、選択など) を把握することができます。これは、テストでアサーションを記述する際に役立ちます。
Appium Inspector の使い方 (一般的な手順):
- ダウンロードとインストール: Appium Inspectorの最新バージョンをダウンロードしてください
- Appium サーバーを起動します。 Appiumサーバーが動作していることを確認する
- インスペクターを構成する: Appium Inspector を起動し、アプリとデバイスまたはエミュレーターに必要な情報を使用して「必要な機能」セクションを構成します。
- セッションを開始: 「セッションを開始」ボタンをクリックします。Appium InspectorはAppiumサーバーに接続し、デバイスまたはエミュレータ上で指定されたアプリケーションを起動しようとします。
- 要素を検査する: アプリがインスペクターで実行されると、UI 内を移動したり、要素を選択したり、そのプロパティや推奨されるロケーターを表示したりできるようになります。
ロギングとレポート
効果的なログ記録とレポートは、テスト実行の理解、障害の特定、モバイル アプリケーションの品質に関する洞察の獲得に不可欠です。
ロギング:
- コンソールログ: 最も単純なログ記録方法は、 `console.log()` JavaScript テスト スクリプトで、テスト実行フロー、変数値、発生した問題に関する情報を出力します。
- 専用ログライブラリ: より構造化された包括的なログ記録を行うには、次のような専用のJavaScriptログ記録ライブラリの使用を検討してください。 「ウィンストン」 or 「ピノ」これらのライブラリを使用すると、ログ レベルを設定したり、ログ メッセージをフォーマットしたり、ログをファイルやその他の出力に書き込んだりすることができます。
- Appium サーバー ログ: クライアントとサーバー間の通信の詳細な記録、およびサーバー内部のエラーも提供してください。トラブルシューティングを行う際には、これらのログに特に注意してください。
レポート:
- モカ記者 ターミナルのテスト実行サマリーにさまざまなレベルの詳細を提供するさまざまな組み込みレポーター (例: `spec`、`list`、`dot`) を提供します。
- カスタムレポーター: サードパーティのレポート ライブラリを利用して、HTML、JSON、XML などの形式で、より詳細で視覚的に魅力的なレポートを生成します。
- CI/CD との統合: テスト結果に関する自動フィードバックを提供します。
- 失敗時のスクリーンショット: この視覚的な証拠は、障害の状況を理解する上で非常に役立ちます。WebdriverIO はスクリーンショットを撮る方法を提供しています。
以下は、Mocha の `aftereach` フック内で WebdriverIO のテスト失敗時にスクリーンショットを撮る基本的な例です。
```JavaScript 定数 fs = require('fs').promises; Aftereach(非同期関数() { (this.currenttest.state === '失敗')の場合{ Const スクリーンショット = await client.takescreenshot(); 定数ファイル名 = `screenshot-${Date.now()}.png`; fs.writefile(`./screenshots/${filename}`, スクリーンショット, 'base64'); を待ちます。 Console.log(`スクリーンショットは次のように保存されました: ./screenshots/${filename}`); } }); `` `
効果的なログ記録とレポート作成の実践により、健全で有益な自動化フレームワークが維持され、テスト結果を理解しやすくなり、問題を迅速に診断できるようになります。
Appium JavaScript と他のツールの統合
Appium JavaScript自動化の効率と効果を最大化するには、他のツールやプラットフォームとのテスト統合が必要です。継続的インテグレーション(CI)ツール、専用のテストレポートプラットフォーム、そして独自のクラウドベースのテストサービスなど、主要な統合について見ていきましょう。 Digital.ai テスト。
継続的インテグレーションツール
継続的インテグレーション(CI)とは、コード変更を頻繁に共有リポジトリに統合し、それらの変更に基づいて自動ビルドとテストを実行する開発手法です。Appium JavaScriptテストをCIツールに統合することで、新しいコードがコミットされるたびにモバイルテストを自動実行できるようになります。
これらの CI ツールは、アプリケーションの安定性と品質に関する迅速なフィードバックを提供します。
- ジェンキンス: ソフトウェアのビルド、テスト、デプロイのための膨大なプラグインをサポートする、広く利用されているオープンソースの自動化サーバーです。Jenkins は基本的なテストレポートを生成したり、他のレポートツールと統合したりすることもできます。
- Gitlab CI/CD: GitLabに直接統合されたこの強力なCI/CDシステムは、`.gitlab-ci.yml`ファイルを使用して、アプリケーションのビルド、テスト、デプロイのためのパイプラインを定義します。エミュレーター、シミュレーター、または接続された実機上でAppium JavaScriptテストを実行するジョブを定義できます。
- GitHub アクション: GitHub の組み込み CI/CD プラットフォームを使用すると、GitHub リポジトリ内で直接ワークフローを自動化できます。
- サークルCI: 使いやすさとスケーラビリティに優れたクラウドベースのCI/CDプラットフォームです。CircleCIパイプラインを設定することで、様々なモバイル環境でAppium JavaScriptテストを実行できます。
- トラビスCI: GitHub および Bitbucket でホストされているプロジェクトの自動テストの実行をサポートする、もう 1 つの人気のあるクラウドベースの CI サービスです。
テストレポートツール
CIツールは多くの場合、基本的なテストレポート機能を提供しますが、専用のテストレポートツールは、テスト結果を視覚化、分析、共有するためのより高度な機能を提供します。これらのツールは、テスト実行、障害分析、履歴傾向、全体的なテストカバレッジに関する詳細な情報を提供します。
| ツール | 詳細説明 |
|---|---|
| アリュールフレームワーク | 美しく情報豊富なHTMLレポートを生成する、非常に人気の高いオープンソースのレポートフレームワークです。テストの分類、履歴の追跡、失敗時のスクリーンショットのキャプチャなどの機能を提供します。Allureには、Mochaなどのテストランナーで使用できるJavaScriptアダプターが用意されています。 |
| レポートポータル | AIを活用したオープンソースのテスト自動化分析プラットフォーム。リアルタイムレポート、障害分析、そして様々なテストフレームワークやCI/CDツールとの統合を提供します。 |
| テストレール | テストケースの整理、テスト実行状況の追跡、包括的なレポートの生成を可能にする商用テストケース管理・レポートツールです。APIを介してJavaScriptテストフレームワークと統合できます。 |
| 範囲レポート | スクリーンショット、ログ、テスト分類などのツールを備え、視覚的に魅力的なHTMLレポートを生成する、人気のレポートライブラリです。JavaScript実装も利用可能です。 |
Digital.aiのクラウドテストプラットフォーム
一般的に、クラウドテストプラットフォームは、クラウド上にホストされた様々な実モバイルデバイスやエミュレーター/シミュレーターへのオンデマンドアクセスを提供します。これにより、独自のデバイスラボを維持する必要がなくなり、モバイル自動テストの拡張性と柔軟性が向上します。
Digital.ai Testingは、幅広い実機、エミュレーター、シミュレーターを提供する、業界をリードするクラウドテストプラットフォームです。堅牢なAppiumサポート、詳細なレポート、テストセッションのビデオ録画、CI/CDツールとの統合を提供します。
Appium JavaScriptテストの実行 Digital.ai テスト:
- クラウドにログイン
- 必要な機能を構成する: クラウド プラットフォームに対して Appium テストを実行する場合は、プラットフォームで認証する特定の必要な機能を指定し、必要なデバイス、OS バージョン、ブラウザー (モバイル Web をテストする場合) を定義する必要があります。 詳細については、ドキュメントをご覧ください。.
- リモート Webdriver 構成を更新します。 WebdriverIO の設定では、`hostname`、`port` を更新し、認証の詳細 (ユーザー名/アクセス キー) を追加する必要があります。 WebdriverIOガイドへのリンクはこちらです.
- テストを実行します: WebdriverIO/Mocha テストを通常どおり実行します。WebdriverIO は、構成されたリモート Webdriver 設定と必要な機能を使用してクラウド テスト プラットフォームに接続します。
- 結果とログを表示: Digital.ai 「レポーター」のテスト モバイル スタジオの一部であり、テスト セッションのステータスを表示したり、ビデオ録画を視聴したり、デバイス ログにアクセスしたり、テスト結果を分析したりできます。
Appium JavaScript のベスト プラクティス
Appium と JavaScript の経験を積むにつれて、保守性、効率性、信頼性に優れた自動化フレームワークを作成するのに役立つベスト プラクティスがいくつかあります。
テストスイートの構造化
適切に構造化されたテスト スイートは、組織化、保守性、およびスケーラビリティにとって不可欠です。
- 機能別に整理: アプリの機能(「ログイン」、「チェックアウト」など)ごとにテストをグループ化します。
- 明確な名前を使用する: 説明的なファイル名とフォルダー名を使用します (例: login.spec.js)。
- 個別のページオブジェクト: UI 要素を管理するためのページ オブジェクト モデル (POM) を実装します。
- セットアップ/ティアダウンを活用する: テストのセットアップとクリーンアップにはフック (beforeEach、afterEach) を使用します。
- テストの独立性を保つ: テストの依存関係を避け、それぞれ独自の状態を設定する必要があります。
- データ駆動型テストを使用する: 複数の入力があるシナリオのテスト データを外部化します。
- ヘルパー関数を実装する: 一般的なタスク用の再利用可能なユーティリティを作成します。
- 自動化レイヤーを検討してください。 より優れた抽象化を実現するために、複雑なフレームワークをレイヤーに構造化します。
パフォーマンスの最適化
タイムリーなフィードバックとリソースの有効活用には、効率的なテスト実行が不可欠です。Appium JavaScriptテストのパフォーマンスを最適化するためのヒントをご紹介します。
- 効率的なロケーターを使用する: 高速かつ信頼性の高いロケータ (アクセシビリティ ID など) を優先します。
- 待ち時間を最小限に抑える: 特定の条件で明示的な待機を使用します。
- 機能の最適化: 必要な機能のみを含めます。
- セッションを再利用する(慎重に): オーバーヘッドを削減するためにセッションの再利用を検討しますが、潜在的な依存関係に注意してください。
- テストを並列で実行する: 可能な場合はテストを同時に実行します。
- 画像処理の最適化: 必要に応じて、画像の比較とサイズを最適化します。
- プロファイルテスト: テスト コードのパフォーマンスのボトルネックを特定します。
- ヘッドレス(Webビュー)を検討する: ヘッドレス ブラウザを使用して、WebView テストを高速化します。
H3 テストの信頼性の確保
信頼性の高いテストは一貫性があり、信頼できる結果を提供します。
- アトミックテストを書く: 障害の特定を容易にするために、各テストを 1 つの機能に集中させます。
- 明示的な待機を使用する: より優れた回復力を得るには、固定のタイムアウトではなく特定の条件を待機します。
- 動的要素の処理: 変更される要素には、堅牢なロケーター (アクセシビリティ ID など) を使用します。
- エラー処理とレポートを実装する: try…catch を使用し、エラーをログに記録し、失敗した場合はスクリーンショットを撮ります。
- テストデータを分離する: テストごとに一意のデータを使用し、干渉を避けるために後でクリーンアップします。
- 代表的な環境でのテスト: さまざまな関連デバイスと OS バージョンでテストを実行します。
- 定期的なレビューとリファクタリング: 保守性を高めるためにテスト コードを更新して改善します。
- バージョン管理: Git を使用して変更を追跡し、効果的に共同作業を行います。
- コーディング標準に従う: 読みやすさを向上させるために、一貫したスタイル ガイドラインに従ってください。
AppiumとJavaScriptを使った簡単なモバイル自動化への旅
わあ、できました!最後までお付き合いいただき、ありがとうございます。この記事を通して、JavaScriptでAppium環境を構築し、そのコアアーキテクチャを理解し、最初のテストを作成し、高度な機能を試し、基本的なデバッグ手法を学び、他の強力なツールとの統合方法を発見することで、モバイル自動化をスムーズに進めるための第一歩を踏み出しました。
テスト スイートの構造化、パフォーマンスの最適化、自動化作業の信頼性の確保に関する重要なベスト プラクティスのいくつかを確認する時間もありました。
モバイルアプリケーションは進化を続け、私たちのデジタルライフにおいて重要な役割を果たします。自動化は、テストを効率的に行うための鍵となります。AppiumのパワーとJavaScriptの柔軟性を組み合わせることで、高品質なモバイルエクスペリエンスを自信を持って提供できるようになります。
方法についてもっと知りたい場合は Digital.ai テストはこれらの取り組みに役立ちますので、無料トライアルにサインアップしてください。