Selenium モバイルテストの総合ガイド

最終更新日 2020年4月06日 — Continuous Testing 上級
Continuous Testing

 

今日では DevOps 現代では、継続的開発と継続的デプロイメントがソフトウェア開発環境の重要な目標となっています。コードは継続的に開発され、 継続的にテスト 自動テストツールは、アプリケーションの継続的なデプロイの鍵となります。Seleniumは、Selenium開発者が開発に継続的テストを統合するのに役立つ、人気のテスト自動化ツールです。複数のブラウザ、プラットフォーム、オペレーティングシステムをサポートしています。

しかし、スマートフォンの普及により、市場には多様なデバイス、プラットフォーム、OSが登場しました。以前は、モバイル画面は小さく、デザインもユーザーフレンドリーではありませんでした。しかし、今日の画面では状況は変わり、モバイルファーストアプリが新たなトレンドとなっています。そのため、企業はテスト戦略を見直し、これらの変化に対応していく必要があります。 モバイルアプリソリューション.

モバイルアプリは使いやすく、アクセスしやすくなっています。今日では、オンラインショッピングや各種サービスのサブスクリプションにモバイルデバイスを使用する人が増えています。現在、ビジネスリソースの60%がモバイルからアクセスされています。しかし、自動化ソリューションのテストにおいて、多くのテスターはAppiumではなくSeleniumモバイルテストを使用しています。

Seleniumはモバイルアプリのテストをサポートしていますか?Seleniumはモバイルテストを直接サポートしていませんが、モバイルアプリをテストするためのフレームワークを提供しています。Selendriodは、企業がAndroidデバイスで自動テストを実行できるようにするSeleniumベースのモバイルテストフレームワークです。ただし、選択肢は限られています。そこで、Seleniumモバイルテスト開発者にとってAppiumが救いの手となります。Appiumは、Seleniumをベースにした強力なモバイル自動テストフレームワークで、クロスプラットフォームおよびクロステクノロジーのサポートを提供します。AndroidとiOSの両方に対応した単一のテストコードを記述できます。

SeeTest を使用した Selenium および Appium テストについて詳しく知りたい場合は、ここをクリックしてください。 

テクノロジープロトコル

SeleniumとAppiumは同じプロトコル、JSON Wireプロトコルを使用しています。このプロトコルは最近W3C標準プロトコルとなり、現在では多くの業界やブラウザプロバイダが標準プロトコルとして実装しています。

Seleniumアーキテクチャ

Seleniumアーキテクチャ

Seleniumでは、Java、PHP、C#、Pythonなど、様々な言語でコードを記述できます。コードはJSON Wireプロトコルを介して実行されます。このプロトコルは、ブラウザを制御するために使用されるREST APIです。コードがHTTP RESTリクエストとして実行されると、Seleniumサーバーによって新しいセッションが作成されます。その後、ブラウザドライバー(Chromeドライバー、Safariドライバー、Edgeドライバー)が呼び出され、ブラウザにアクセスします。ブラウザは要求された情報をブラウザドライバーを介してSeleniumサーバーに送信し、その情報はクライアントに送信されます。

Selenium グリッドコンポーネント

Selenium グリッドコンポーネント

Selenium Gridには3つの主要コンポーネントが含まれています。Selenium Grid Hubは、テストジョブをノードに分配するサーバーマシンです。サーバーマシンは、事前に定義された必要な機能に基づいて、どのノードがテストを受信するかを決定します。Selenium Grid Nodeは、ハブから受信したテストを実行するマシンです。各サーバーは複数のノードを持つことができます。wd/hubは、ハブとノード間の通信を容易にするURL部分です。

Appiumアーキテクチャ

Appiumアーキテクチャ

AppiumのアーキテクチャはSeleniumのアーキテクチャと非常によく似ています。Appiumでは、Seleniumモバイルテスト開発者がJava、PHP、C#、Python、Ruby、Javascript(WebdriverIO)、Javascript(WD)など、複数の言語でコードを記述することもできます。ただし、Appiumは他のオプションも実装しています。たとえば、Javaを使用する場合、RemoteWebDriverから継承されます。Appiumサーバーは、マシンまたはクラウドにインストールできます。JSON Wireプロトコルを介してAppiumクライアントからcreateSession()コマンドが実行されると、AppiumサーバーはAppiumドライバー(Androidドライバー/iOSドライバー)を介してモバイルデバイス上に新しいセッションを作成します。Androidデバイスの場合、Android ADBインフラストラクチャを使用します。必要に応じてマシン上にAPKを作成します。iOSの場合、モバイルIDEフレームワークを使用し、コマンドラインで通信します。

ここでのアイデアは、モバイルデバイス上でダミーの無限テストを実行することです。iOSではXCUITestを実行します。テストはサーバーによって制御されます。

Appiumのインストール

Android向けAppiumのインストールは非常に簡単です。しかし、iOSデバイスの場合は少し複雑になります。主な課題は、アプリケーションをそのままデバイスにインストールすることができないことです。特に開発者向けアプリケーションを扱う場合は、すべてのアプリケーションをデバイスに署名する必要があります。エミュレータを使用する場合は、いくつかの手順を省略できます。さらに、Apple開発者ID、有効な開発証明書、プロビジョニングプロファイル、署名済みの.ipaファイル、XCode、コマンドライン開発者ツールが必要です。さらに、XCodeで開発用にデバイスをセットアップする必要があります。

たとえば、Java を使用している場合は、次のタスクを実行する必要があります。

  • Javaの設定
  • Homebrewをインストールする
  • 次に、node.jsとnpmをインストールします。
  • 次にAppiumをインストールします
    • npm インストール –g appium
  • 最後に、wdをインストールします
    • npm インストール wd
  • ilibmobiledeviceをインストールするAppium iOSデバイスを構成する
  • XCUITest ドライバーを構成する

Appiumのインストール手順については、このチュートリアルを参照してください。

http://appium.io/docs/en/about-appium/getting-started/#installing-appium

カバーマトリックス

Androidアプリのテストには、Windows、Mac、Linuxマシンを使用できます。ただし、iOSアプリのテストにはMacデバイスが必要です。クラウドはiOSアプリケーションとAndroidアプリケーションの両方で利用できます。

Selenium開発者カバーマトリックス

モバイルデバイスとブラウザ

モバイル テストに進む前に、モバイル デバイスとブラウザー間の環境の違いを理解することが重要です。

  • ジェスチャー: モバイル デバイスでは、スワイプ、ピンチ、2 本指タッチ、複数本指タッチなど、Web ブラウザーでは利用できないさまざまな入力オプションやジェスチャが使用されます。
  • 異なる URL システム: モバイル アプリは、通常の Web URL を持たないモバイル デバイスに特有のものです。
  • 実際のデバイスとエミュレーター: 実機とシミュレータの両方でテストを行います。Androidでは、どちらのオプションでも同じAPKを使用します。ただし、iOSでは、シミュレータはx64で動作するのに対し、実機はARMプロセッサを使用するため、実機とシミュレータで異なるテクノロジを使用します。そのため、両方のオプションでテストを行う必要があります。
  • ボタン: モバイルデバイスには、ホーム、電源、音量などのボタンが付いています。テスト時にはこれらを考慮する必要があります。
  • ホーム画面: モバイルデバイスには通知バー付きのホーム画面があります。そのため、ホーム画面での操作性を考慮する必要があります。
  • 回転スクリーン: モバイル画面は縦向きと横向きに切り替えられ、画面サイズも変わります。
  • さまざまなネットワーク接続: 2G、3G、4G、5Gなどのネットワーク状況を考慮する必要があります。特に機能テストは、異なるインターネット速度で実施する必要があります。

モバイルアプリとウェブアプリ

アプリケーションに関して言えば、モバイル アプリは Web アプリとは異なります。

  • アプリケーションライフサイクル: モバイルアプリのライフサイクルは多様で複雑です。アプリのインストール、アンインストール、起動、終了など、さまざまな操作が可能です。
  • ステートフルナビゲーション: モバイルアプリはセッションを記憶し、次回ログイン時にそれに応じた応答を返します。よりステートフルな操作性を実現しています。ナビゲーションもシンプルです。
  • DOM UI テクノロジー: iOSとAndroidでは異なります
  • クライアント側スクリプト: JavaScriptなどはモバイルアプリでは利用できません
  • デバッグツール: (例: Chrome の F12) は使用できません。

モバイル機能

ローカル機能については、次の詳細を指定する必要があります。

  • プラットフォーム名: プラットフォーム(iOS / Android)を指定してください
  • デバイス名: デバイス名を指定します(複数のデバイスを使用するため)
  • 自動化名: 使用される自動化テクノロジーを指定します(例:iOS の場合は XCUITest)
  • アプリ: アプリケーションをインストールするには、apkパスを指定します
  • バンドルID/アプリアクティビティ: アプリのバンドルIDを指定します。Androidの場合、アプリ内で起動できるバンドルアクティビティと特定のアクティビティがあります。ただし、iOSの場合はバンドルアクティビティのみとなります。

クラウド機能

Selenium 開発者がクラウド テクノロジーを使用する場合:

  • アクセスキー: アクセスキーはリモートテストへのアクセスを提供します
  • デバイスクエリ: クラウドで使用しているデバイスを見つけるには

モバイルコマンド

モバイルコマンドをオーバーロードするために、Selenium開発者はExecuteScriptを使用できます。アプリケーションに関連するモバイルコマンドの例:

  • インストールアプリ
  • 起動アプリ
  • リセットアプリ
  • 削除アプリ
  • アプリを終了する
  • バックグラウンドで実行

デバイスコマンドの例

  • ロック
  • AIの洞察を解き明かす
  • ローテート
  • SHAKE
  • キーボードを非表示
  • ロック

利用可能なすべてのコマンドは、この Appium ページで見つかります。 http://appium.io/docs/en/commands/mobile-command/

Selenium と Appium を使用してモバイル テストを作成する方法は?

セレンの使用

ステップ1: Gradleファイルを作成する

テストを開始するには、IDEを開きます。例えばJavaを使用している場合は、IntelliJ IDEを開きます。

  • 新しいプロジェクトを作成します
  • Gradleを選択します(Mavenなどの他のオプションを使用することもできます)
  • プロジェクトに名前を付けます(例:Selenium 2)
  • Finishをクリックします。

ステップ2: GradleにSeleniumを追加する

GradleにSeleniumを追加する

  • 新しいバージョンをクリックすると、新しいバージョンが表示されます。ただし、現在はアルファ版が表示されています。Selenium Javaをクリックしてください。

Selenium Javaをクリック

  • 次のページで最新バージョンを選択してください

Selenium Javaの新バージョンをクリック

  • 次のページからコードをコピーし、IDEの依存関係ボックスに貼り付けてください。デバイスに必要な依存関係がない場合でも、必要な依存関係がすべてダウンロードされます。

次のページからコードをコピーしてIDEの依存関係ボックスに貼り付けます

  • このテストではTestNGを使用します。そのため、Selenium TestNGとChromeドライバをインポートしてください。Chromeドライバはhttps://chromedriver.chromium.org/からダウンロードできます。
  • 新しいパッケージ(ディレクトリ)を作成し、名前を付けます(例:William.demo)
  • クラスを作成する(例:williamSeleniumdemo)
  • これで必要な要素はすべて揃いました。Seleniumテストのコードを書いてみましょう。
    • 例えば、driver.get() は URL を開いてページの読み込みを待ちます
    • Driver.navigate() を使ってページ間を移動します
    • findElement(By.xpath())
    • すべてのブラウザを閉じるにはdriver.quit()を使用します
  • テストを実行する

Appiumテスト

Appiumを使用したiOSデバイスのテストは、Androidデバイスと比べて少し複雑です。そのため、このテストガイドではiOSデバイスを使用してテストを行います。

  1. IntelliJ IDE を開きます。
  2. Gradle に Appium の依存関係を追加します (Selenium の依存関係がある場合は削除します)
  3. iOS ドライバーをインストールします (WebDriver には特定の iOS コマンドはありません)
  4. Selenium 開発者は、Selenium テストをベースラインとして使用し、それを変更して iOS テストとして使用できます。
    1. 必要な機能を定義します (クラウド形式へのログイン方法、アプリケーションの起動などを定義するためのキー値のマップを設定するのに役立ちます)
    2. デバイスにアクセスするにはアクセスキーが必要です。クラウド環境にアクセスしてアクセスキーを作成してください。
    3. テストの名前を作成します(例:WilliamAppium テスト)
    4. 使用するアプリケーションを選択し、バンドルIDを取得します。クラウド環境にアクセスして、アプリケーションをデバイスにアップロードすることもできます。
    5. MobileCapabilityTypeを定義する
    6. 新しいiOSドライバを作成してドライバを初期化し、wd URLを指定します。
  5. 次に、IDEからテストを実行します。ドライバーが起動し、モバイルデバイスでテストが実行されます。
  6. クラウド ページに移動し、デバイスを開いて、アプリケーションのインストール、起動、終了の様子をライブ ビューで確認します。

Appiumアプリからテストを実行する

Appiumアプリからテストを実行する

  • Appiumへアクセス
  • 新しいセッションを作成する
  • クラウドプロバイダーは複数あります。1つのクラウドプロバイダーを選択してください。

クラウドプロバイダーは複数あります。1つのクラウドプロバイダーを選択してください。

  • ユーザー名とアクセスキーを入力してください
  • プラットフォーム名を定義します(例:iOS)
  • DeviceQuery を定義します (例: os=iOS)
  • セッションの開始をクリックします
  • デバイスは自動的に選択されます。Appiumデスクトップを使用して、さまざまな要素とそのプロパティを識別できます。
  • コードを書く
    • Driver.findement(by.xpath)
    • Sendkeys() (ユーザー名とパスワード)
  • コードを実行すると、別のデバイスが選択されます
  • クラウドにアクセスして、さまざまなデバイスでテストがどのように実行されているかを確認します。
  • デバッグのためにブレークポイントを設定できます。

これで完了です。これで、Selenium 開発者は Appium を使用してテストを正常に実行できました。

Experitest による Appium と Selenium のテストの詳細については、ここをクリックしてください。.

ガイ・アリエリCTO

お勧めの関連ガジェット