Appiumとは?詳しく解説します
Appiumの概要について
Appiumはネイティブ、 ハイブリッド型モバイルアプリのために開発されたオープンソースのテスト自動化フレームワークです。
Appiumはモバイルアプリのテストツールとして最も有名なツールの一つとして知られておりますが、その機能や特徴について詳しく紹介させていただきます。
Appiumは、iOSモバイル、Androidモバイル、およびWindowsデスクトッププラットフォームでネイティブ、モバイルWeb、およびハイブリッドアプリケーションを自動化するためのオープンソースツールとして機能します。
ネイティブアプリは、iOS、Android、またはWindowsSDKを使用して作成されたアプリを指します。
モバイルWebアプリは、モバイルブラウザーを使用してアクセスするWebアプリを指します。
また、(Appiumは、iOSおよびChromeではSafariをサポートし、Androidでは組み込みの「ブラウザー」アプリをサポートしております。
ハイブリッドアプリには、「webview」(Webコンテンツとの対話を可能にするネイティブコントロール)のラッパーがあります。
Apache Cordovaのようなプロジェクトでは、Webテクノロジーを使用してアプリを簡単に構築し、ネイティブラッパーにバンドルして、ハイブリッドアプリを作成できます。
Appiumの大きな特徴としてクロスプラットフォームであるということです。
同じAPIを使用して、複数のプラットフォーム(iOS、Android、Windows)に対してテストを作成できます。
これにより、iOS、Android、およびWindowsのテストスイート間でコードを再利用でき、時間やコストを削減することが可能となります。
Appiumは、2011年にDan Cuellarによって「iOSAuto」という名前で開発され、C#プログラミング言語で記述されておりました。2012年にオープンソース化された点も大きな特徴の一つです。2013年には、Node.jsを使用してコードを書き直し、より高度なテストツールとしての機能を提供することになりました。Appiumは、最高のオープンソースデスクトップおよびモバイルソフトウェアについて、InfoWorldの2014Bossie賞を受賞しており、業界でも高い評価を獲得しているツールとして知られております。
Appiumについて詳しく解説させていただきますので、参考にしていただけましたら幸いです。
まずはAppiumの理念について説明させていただきます。
Appiumは2つのアイデアに基づいて開発されています。
一点目はネイティブアプリをテストする際に従来のようにSDKやアプリのリコンパイルを必要としないこと、
二点目が開発者にとって望ましいテストプラクティス、フレームワーク、ツールが使えることです。
これらを実現するためにAppiumはオープンソースプロジェクトで、活気に満ちたコミュニティ活動を支えるためのデザインやツールに関する意思決定を行うことで、サービスの品質の向上や改善を実現しております。多くの開発者が集まることでより高い品質の開発を行うことができ、特定の言語に依存せず好きな言語でコードを書くことができるという点もその特徴と言えるでしょう。
ハイブリッドアプリの自動化についても詳しく解説させていただきます。
Appiumの基本原則の1つは、アプリをテストするためにアプリを変更する必要がないことです。
Appiumではその方法論に沿って、Webアプリ用のSeleniumを使用した場合と同じ方法でハイブリッドアプリをテストすることが可能です。Appiumがアプリのネイティブな側面を自動化するか、Webビューを自動化するかを判断するにはケースに応じて判断する必要があります。これらはすべてについてSeleniumWebDriverプロトコル内にとどまることができます。また、テストがWebビューのコンテキストで行われると、使用可能なコマンドセットは完全にSeleniumWebDriverAPIとして機能します。
さらに詳しく解説すると、AppiumにはChromedriverを介したハイブリッドサポートが組み込まれています。これにより、ChromeでサポートされているAndroidWebビューを自動化できます。
これらのアプリのビルドには追加の手順が必要であり、それぞれのプロパティに設定する必要があります。
必要な機能を設定 してAppiumセッションを開始したら、上記の一般的な手順に従います。
次にハイブリッドiOSアプリの自動化について説明させていただきます。
Webビューと対話するために、Appiumはカスタムリモートデバッガーを使用して接続を確立します。
シミュレーターに対して実行する場合、シミュレーターとAppiumサーバーが同じマシン上にあるため、この接続は直接確立されます。
Appiumは、 WkWebViewおよびUIWebView 要素を自動化して、Appiumセッションを開始します。
iOSのデバイスに対して実行する場合、AppiumはWebビューに直接アクセスできません。
したがって、接続はUSBケーブルを介して確立する必要があります。
Seleniumは、Webアプリケーションをテストするための最も有名なフレームワークとして多くの現場に導入されております。
これはスクリプト言語を学習する必要がなく、かつ機能テストを作成するための再生ツールを提供することが
できるため非常に便利なプラットフォームと言えます。
SeleniumはC#、Groovy、Java、Perl、PHP、Python、Ruby、Scalaなどの複数の一般的なプログラミング言語でテストを作成するためのテストドメイン固有言語(Selenese)を提供することであらゆるエンジニアがテストを簡単に実施することが可能となります。 Seleniumは習得のための難易度が比較的低いことや、テスト作業を簡単に効率化できることができるため多くの現場で導入されているテストツールです。
テストを実行する際の方法として、WebブラウザにおいてITエンジニアが入力を行い検証するテスト方法と、
プログラミング言語やスクリプト言語を利用しテストを実行させる方法があり、Seleniumは後者に該当します。
Seleniumは複数のコーポネントによって構成され、それぞれがWeb アプリケーションのテスト自動化の開発を支援する特定の役割を果たします。
一般的にスクリプト言語などの複雑な知識がなくともテストにおける品質を担保し、開発者の負担を減らすことができるという点がSeleniumの魅力の一つです。
品質保証はソフトウェア開発の重要な部分であることは言うまでもなく、ソフトウェアが特定の品質基準を満たしていることを確認する一連のアクティビティです。
これには通常、ソフトウェアのテストと、バグ、エラー、およびユーザビリティの問題のチェックが含まれます。
Seleniumはこれらの市場に大きな影響を与えたテクノロジーであり、多くのテストエンジニアの作業を効率化しておきました。
バグの検出、ユーザー入力の検証など、さまざまな目的に使用できますが、LambdaTestではSeleniumの優れたテクノロジーを利用することでさらに効率的なテストツールをユーザーに提供します。
Selenium Test Automation Cloudでは、3000以上のデスクトップおよびモバイルブラウザのSelenium Grid Cloudでテストすることが可能です。信頼性が高くスケーラブルで、安全でかつパフォーマンスの高いテストを実施するので、開発チームとテストチームがリリースサイクルを加速でき、時間とコストを大幅に削減することが 可能となります。
また、Selenium Test Automation Cloudでは3000以上の異なるデスクトップおよびモバイル環境のクラウドでSeleniumスクリプトを実行することにより、ブラウザーのカバレッジを飛躍的に向上させてすべてのデバイスでシームレスなユーザーエクスペリエンスを確保します。
Seleniumスクリプトは、テストを自動化するためにWebブラウザーで実行されるコードです。Seleniumスクリプトの最も重要な機能は、Windows、Linux、Mac OSなどのさまざまなプラットフォームから実行できることです。 Seleniumスクリプトではさまざまなプロジェクトで再利用できる繰り返し可能なテストケースを作成することもできます。 これらのSeleniumスクリプトでテストケースを複数回実行するプロセスを自動化することにより、開発者とテスターがコードのバグをすばやく見つけるのに役立つため、ソフトウェア開発ライフサイクルで非常に重要です。
より良い結果を得るためにSeleniumテストケースを書き直す方法は多数あります。
例えば、コードに変更を加えてスクリプトを手動で書き直したり、Selenium IDEと呼ばれるツールを使用したりすることです。 このツールを使用すると、ユーザーは簡単にテストを作成して実行できます。
このアプローチは簡単かつ高速に実行することが可能です。ただし、ユーザーがコードを変更することはできないという点については注意が必要です。
さらに詳しくAppiumについて紹介させていただきますので、参考にしてみてください。
自動化サポート
Appiumチームによってサポートされているドライバーを簡単に紹介させていただきます。
iOSの自動化は、XCUITestドライバー、UIAutomationドライバー、Appleのsafaridriver用のsafaridriverのドライバーでサポートされています。バージョンは12.2以降をサポートします。原則として、Appiumは最新の2つのiOSバージョンをサポートしております。
デバイスはiPhone、iPad、tvOS用のシミュレーターと実際のデバイスをサポートしております。
ネイティブアプリのサポートはデバッグバージョンの.app(シミュレーター)または正しく署名された.ipa(実際のデバイス)を使用します。
基盤となるサポートは、AppleのXCUITest(または古いバージョンの場合はUIAutomation )フレームワークによって提供されます。
モバイルWebサポートは、モバイルSafariの自動化を介して実施します。
ハイブリッドサポートも対象内となります。
1つのセッションで複数のアプリを自動化するためのサポートは実施しておりませんが、複数のデバイスを同時に自動化するためのサポートを実施します。
ベンダー提供またはサードパーティのアプリの自動化のサポートを実施します。
カスタムの非標準UIコントロールの自動化のサポートは最小限の内容をサポートしております。
基本的な自動化を可能にするコントロールにアクセシビリティ情報を設定する必要があります。
Androidの自動化は、UiAutomator2ドライバー、エスプレッソドライバー、UiAutomatorドライバー、FirefoxおよびGeckoView用のgeckodriverのドライバーでサポートされています。
バージョンは4.3以降がサポートされております。
バージョン4.3以降は、AppiumのUiAutomatorおよびUiAutomator2ライブラリを介してサポートされています。UiAutomatorがデフォルトのドライバーです。
デバイスはAndroidエミュレーターと実際のAndroidデバイスがサポートされており、
ネイティブアプリのサポートを実施しております。
モバイルWebサポートも実施しております。自動化は、バンドルされたChromedriverサーバーをプロキシとして使用して実行されます。
4.3では、自動化は公式のChromeブラウザまたはChromiumでのみ機能します。4.4以降では、自動化は組み込みの「ブラウザ」アプリでも機能します。
Chrome / Chromium / Browserは、テスト対象のデバイスにすでにインストールされている必要があります。
ハイブリッドサポートも実行しております。
デフォルトのAppium自動化バックエンドのサポートはバージョン4.4以降であれば対象となっております。
1つのセッションで複数のアプリを自動化するためのサポートを実行します。
--port複数のデバイスを同時に自動化するためのサポートも実行します。
サーバーパラメーターに異なるポートを使用してAppiumを起動する必要があります。
ベンダー提供またはサードパーティのアプリの自動化のサポートを実行しております。
カスタムの非標準UIコントロールの自動化のサポートは行っておりません。
Appiumの考え方について
Appiumは、次の4つの信条で概説されている哲学に従って、モバイル自動化のニーズを満たすように設計されました。
一点目が容易な操作です。
テストを自動化するために、アプリを再コンパイルしたり、変更したりする必要なく簡単に実施することが可能です。
二点目が自由度です。
テストを作成して実行するために、特定の言語やフレームワークに縛られることなく、
開発者の得意な言語によってコーディングすることが可能です。
三点目が自動化APIです。
自動化APIに関しては、モバイル自動化フレームワークが再発明を行うべきではありません。
四点目がモバイル自動化フレームワークです。
モバイル自動化フレームワークは、名前だけでなく、精神と実践においてもオープンソースであるべきとしております。
Appiumプロジェクトの構造は、これらの考え方を実現するために様々なテクノロジーを導入し実行しております。
具合的には内部でベンダー提供の自動化フレームワークを使用することがです。
その結果としてAppium固有またはサードパーティのコードやフレームワークをアプリにコンパイルする必要がありません。
Appiumが使用するベンダー提供のフレームワークは、
iOS 9.3以降においてはAppleのXCUITest、
iOS 9.3以前においてはAppleのUIAutomation、
Android 4.3以降ではGoogleのUiAutomator / UiAutomator2です。
WindowsはMicrosoftのWinAppDriverです。
これらのベンダー提供のフレームワークを1つのAPIであるWebDriverAPIにラップすることで、
Appiumの考え方を実現することが可能です。WebDriverは、クライアントサーバープロトコル(JSONワイヤープロトコルとして知られています)を指定します。
このクライアントサーバーアーキテクチャでは、任意の言語で記述されたクライアントを使用して、適切なHTTP要求をサーバーに送信できます。
すべての人気のあるプログラミング言語で書かれたクライアントがすでにあります。これは、必要なテストランナーとテストフレームワークを自由に使用できることも意味します。
クライアントライブラリは単なるHTTPクライアントであり、任意の方法でコードに混在させることができます。
AppiumおよびWebDriverクライアントは、技術的には「テストフレームワーク」ではなく、「自動化ライブラリ」です。テスト環境は開発者の好きなように管理することが可能です。
WebDriverはWebブラウザーを自動化するための事実上の標準になり、W3Cワーキングドラフトです。
これらのモバイル自動化に役立つ追加のAPIメソッドを使用してプロトコルを拡張しました。
Appiumの構成と機能
Appiumの構成と機能について説明させていただきます。
一点目がクライアントサーバー型のアーキテクチャとなります。
クライアント/サーバーネットワークは、サーバーと1つ以上のクライアントの間でワークロードを分割するネットワークの一種です。
サーバーはデータを管理し、クライアントはデータにアクセスすることが可能です。
クライアント/サーバーアーキテクチャは、最も一般的なタイプのコンピュータネットワークとして知られております。
これはコンピューティングの初期の頃から存在しており、今日でも多くの異なるタイプのネットワークで使用されています。
クライアント/サーバーモデルは、コンピューターシステムを編成する方法として解釈できます。
また、一部のコンピューターは、データを共有しながら他のコンピューターのプログラムを実行することに専念します。
サーバーは1つ以上のクライアントにリソースを提供します。クライアントはそれらのリソースを消費し、
サーバーがより多くのリソースを提供できるようにするためにサーバーにフィードバックを提供します。
これは、1973年に、単一の大学のキャンパスにある複数のコンピューター間でファイルを共有するために使用できるネットワークを作成したいと考えていたMITの研究者によって最初に開発されました。
Appiumは、クライアントサーバー型のアーキテクチャを導入していることでそのメリットを享受することが可能です。
Appiumはその中心にあるRESTAPIを公開するWebサーバーとして機能します。クライアントから接続を受信し、コマンドをリッスンし、モバイルデバイスでそれらのコマンドを実行し、コマンド実行の結果を表すHTTP応答で応答します。
クライアント/サーバーアーキテクチャがあるという事実は、多くの可能性を開きます。
httpクライアントAPIを備えた任意の言語でテストコードを記述できますが、Appiumクライアントライブラリの1つを使用する方が簡単です。
テストを実行しているのとは別のマシンにサーバーを配置できます。テストコードを記述し、クラウドサービスに依存してコマンドを受信して解釈することができます。
二点目がセッションです。
テストの自動化は、常にセッションのコンテキストで実行されます。クライアントは、各ライブラリに固有の方法でサーバーとのセッションを開始しますが、最終的にPOST /sessionは、「必要な機能」オブジェクトと呼ばれるJSONオブジェクトを使用してサーバーにリクエストを送信します。
この時点で、サーバーは自動化セッションを開始し、さらにコマンドを送信するために使用されるセッションIDで応答します。
三点目が必要な機能です。
必要な機能は、Appiumサーバーに送信されるキーと値のセットであり、サーバーに、起動することに関心のある自動化セッションの種類を通知します。
自動化中にサーバーの動作を変更できるさまざまな機能もあります。たとえば 、AndroidやWindowsではなくiOSセッションが必要であることをAppiumに通知するplatformName機能を設定できます。
iOSまたは、Safari自動化セッション中に、JavaScriptを使用して新しいウィンドウを開くことができるようにするために、safariAllowPopups 機能をに設定することもできます。
四点目がAppiumサーバーです。
Appiumは、Node.jsで記述されたサーバーです。
Node.jsは、スケーラブルなネットワークアプリケーションを構築するために使用されるJavaScriptランタイム環境です。
Node.jsは約10年前から存在しており、高速でスケーラブルなネットワークアプリケーションを構築するための頼りになるフレームワークとして人気を博しています。
これは、アプリケーションのサーバー側またはアプリケーションのクライアント側を開発するために使用できる、オープンソースのクロスプラットフォームランタイム環境です。
Node.jsは、シングルページアプリケーション、
リアルタイムWebアプリ、および非同期の性質を持つモバイルアプリの開発にも適しています。
Node.jsは、JavaScript言語に基づいて構築されたプラットフォームであり、ユーザーがスケーラブルで高速なWebアプリケーションを簡単に構築できるようにします。イベント駆動型の非ブロッキングI / Oモデルを使用しており、軽量で効率的であり、分散デバイス間で実行されるデータ集約型のリアルタイムアプリケーションに最適です。
これらはWindows、Linux、MacOS、Unixシステムなどのあらゆる環境で使用できるクロスプラットフォームフレームワークとして機能します。
また、新しい機能と既存の機能の改善でプロジェクトに絶えず貢献している開発者と貢献者の大規模なコミュニティがあります。
このテクノロジーは実稼働環境で使用するのに十分な安定性と信頼性があります。
これらはソースからビルドしてインストールすることも、 NPM から直接インストールすることもできます。
五点目がAppiumクライアントです。
WebDriverプロトコルに対するAppiumの拡張機能をサポートするクライアントライブラリ(Java、Ruby、Python、PHP、JavaScript、およびC#)があります。
Appiumを使用する場合は、通常のWebDriverクライアントの代わりにこれらのクライアントライブラリを使用する必要があります。
六点目がAppiumデスクトップです。
Appiumサーバーの周りにはGUIラッパーがあり、どのプラットフォームにもダウンロードできます。
ここでは、Appiumサーバーの実行に必要なすべてのものがバンドルされております。
また、アプリの階層を確認できるインスペクターも付属しています。これは、テストを作成するときに利用することが可能です。
特徴
Appiumの特徴について説明させていただきます。
すでにご紹介したAppiumの機能、考え方などと大きく関係している部分でもありますので、あわせて参考にしてみてください。
一点目がAppiumのビジョンについてです。
Appiumは、最高のアプリ自動化テクノロジーのモバイルJSONWPフロントエンドになることを目指しています。
さまざまな便利な自動化エンジンをすべて取り入れ、それらのAppiumドライバーを作成し、Appiumのテクノロジーを導入することでより高品質なサービスを生み出すというビジョンをもって運営を実行しております。
これは、Seleniumプロジェクトの目標と非常によく似ています。
Appiumドライバーの開発を可能な限りシンプルで定型的なものにしない共有ライブラリを使用している場合でも、
すべてのドライバーを独立したエンティティを目指します。
また、AppiumではJavaScriptは多くの開発者が理解して貢献しやすいため、最新のJavaScriptを使用しています。
二点目が開発者コミュニティとなります。
すでに本文で伝えたようにAppiumはオープンソースで運営されており、Appium開発者になることは誰でも歓迎されております。
多くの開発者によって支えられているこのコミュニティは、開発者の質問やヘルプによって構成されておりAppiumの質を高めることに繋がります。
Appiumのコードを開発していて質問がある場合は開発者コミュニティに連絡するだけで
様々な知識を獲得することが可能です。また、AppiumにおけるGitHubの問題追跡システムは、バグレポートと機能リクエスト専用となります。
Appiumに貢献するにはさまざまな方法があります。
Appiumの行動規範に準拠していることが前提ですが、多くの方法でコミュニティに対して貢献することが可能です。
三点目がアジャイル開発ワークフローとなります。
アジャイル開発は、高品質のソフトウェアを作成するために反復型および増分型のプロセスに依存するソフトウェア開発方法論です。
アジャイル方法論は、プロジェクト管理およびソフトウェア開発方法論であり、動作するソフトウェアを短いサイクルで提供し、継続的なフィードバックを可能にします。
アジャイルプロジェクト管理は、製品、サービス、およびプロセスの市場投入までの時間と価値までの時間を最適化する一連のプラクティスです。アジャイルアプローチは、体系的な方法で行われるインクリメンタルリリースによって組織が製品を改善するのに役立ちます。
アジャイルアプローチは、プログラミングを開始する前に要件が文書化される、従来のウォーターフォールモデルの代替手段です。
Appiumチームは、非常に軽量なバージョンのSCRUMに従って開発を実行します。2週間ごとに、新しいスプリントを決定する期間を開始します。
Appiumコードベースに精通している人であればこのスプリント計画に参加し、そのスプリントのSCRUMチームメンバーとして参加でき、参加するために長期的な取り組みは必要ありません。
スプリント中、 Appium Slackグループの進捗状況を毎日更新します。スプリントの最後に、チームの成果を祝い、物事がどのように進んだかを振り返るために、回顧展を開催します。
最終的には、各スプリントの最後、つまり2週間ごとにAppiumのリリースのタイミングを計ることが目標としております。
これらのアジャイル開発ワークフローにより、Appiumは新しい機能追加やバグ修正など多くの開発を実施し品質を担保することが可能となっております。
四点目がアーキテクチャとなります。
Appiumは主に、実行中のnode.jsサーバーを形成するために結合するnode.jsパッケージのコレクションです。
これらのパッケージは互いに独立して維持され、それぞれに独自のGitHubリポジトリ、CI、およびリリースプロセスがあります。
一部のパッケージは大きく、Appiumに重要な機能を追加しますが、他のパッケージはサポートの役割を果たし、他のパッケージで再利用される特定の機能を公開します。
また、パッケージ階層の概要と各パッケージが果たす役割については、パッケージ概要ドキュメントに記載されております。
五点目がトランスパイルとなります。
Appiumは、ES6と呼ばれる新しい形式のJavaScriptで記述されています。
JavaScriptは、Webページの作成に使用されるプログラミング言語です。これは、ページコンテンツをレンダリングするためにWebブラウザによって使用されます。
このバージョンの言語は、古いバージョンのnode.jsでネイティブにサポートされていないため、AppiumコードはES5にトランスパイルされます。このトランスパイルプロセスは、コードを実行する前に実行する必要があります。新しい言語機能に加えて、JavaScriptの後続asyncバージョンから2つの非常に重要なキーワードを採用しました。
await、非同期コードをきれいに書くのに役立ちます。トランスパイルステップのため、Appiumパッケージには、コードの変更を監視し、コードを自動的に再トランスパイルするツールが含まれています。通常、同じツールが自動的に単体テストを実行して、小さなコーポネントが壊れていないことを確認します。ほとんどのAppiumパッケージには、実行時のデフォルトの動作としてこれが設定されております。
六点目がスタイルです。
これには、スタイルの規則、コーディングパターン、およびさまざまな問題を解決するために使用するライブラリが必要となり、それらの機能を提供します。
具体的にはトランスパイル時に、AppiumパッケージはESLintまたは他のlintツールを自動的に実行し、コードがスタイルに準拠していない場合に警告またはエラーフィードバックを提供します。
これらのツールは、全てのスタイルの問題を必ずしも網羅しているわけではないため、レビューでスタイルの問題について言及することもあります。
クリーンで一貫性があり、読みやすいコードベースを持つためにこれらは実行されます。
JavaScriptを書くときに使用する原則についてのスタイルを説明させていただきます。
Appiumではスタイルについて前後に移動することなくプルリクエストをマージできるように、これらに準拠する必要があります。
七点目がコードの送信です。
コードをAppiumに取り込むのは簡単に実行することが可能です。
それらはPRをリポジトリの1つに送信し、レビュープロセスでメンテナと連携するだけです。
コード提出における要件は以下の通りです。
周囲のコードのスタイルとスタイルガイドに従うことです。
また、論理的な変更ごとに1つのコミットが必要となります。
つまり、プログラムが機能するためにコミットがグループに含まれる必要がないことを確認して、任意のコミットで機能する必要があります。
また、PRを送信する前に、常に最新のマスターの上にリベースする必要があります。
また、ほとんどすべての変更にはテストが必要です。バグ修正には、少なくともバグが修正されたことを証明する単体テストが必要です。
新しい機能には、機能が実際に機能することを証明するための単体テストと、ほとんどの場合e2eテストが必要です。
これらは周囲のテストコードを読むことから始めることが推奨されております。AppiumのCIシステムは通常、テストカバレッジ統計を実行し、テストカバレッジを低下させるコードをマージしない可能性があります。
送信する前にこれらすべてのことを行うと、コードはほぼ確実に非常に迅速に受け入れられます。もちろん、多くの作業を必要とするAppiumに変更を加えることを考えている場合は、
開発者リストに連絡して、変更が私たちの哲学に沿っており、原則として私たちが受け入れるものであることを確認することができます。
パッケージのNPM所有者である必要があることに注意する必要があります。これらの所有権はAppiumコミッターによって管理されます。
まとめ
いかがでしたでしょうか?
Appiumについて詳しく解説させていただきましたので、参考にしていただけましたら幸いです。