最近のAppium事情
第1回「SeleniumとWebDriverの最新事情」から始まったSelenium/WebDriverの連載ですが、今回で5回目となりました。ここでは第1回でも少し話題に上がったAppiumに関して掘り下げてみます。
Selenium/WebDriverは主にはWebブラウザを操作対象としてさまざまな機能を提供します。Appiumはこれをネイティブアプリに提供範囲を拡大することを主な目的においています。例えば、iOS/Androidといったモバイル端末のほか、macOSやWindows向けアプリが対象となります。Appium環境下におけるクライアントとサーバとのインターフェースとしてはWebDriver同様、W3Cが策定しているWebDriver APIのほか、ブラウザ以外のものを操作するためにJSON Wire protocol形式で記述するエンドポイントを定義し、それらを実装しています。
Appiumは基本的にはクライアント・サーバ型の構成をとります。そしてSelenium同様、JavaScript/Java/Python/Rubyなどでテストコードを記述可能なクライアントを提供しています。クライアントからリクエストを受け取るAppiumサーバと、Appiumサーバが受け取ったリクエストを実際に端末の挙動へ反映するためのドライバにわかれ、その二つを合わせてAppiumと呼ばれる一つのフレームワークを構成します。
クライアント・サーバ型であるため、定義されたエンドポイントにHTTPリクエストを送るクライアントを実装しさえすれば、現在サポートされていない言語においてもAppiumを介してネイティブアプリが操作可能になります。また、ドライバを新たに開発することで、既存のクライアントを使いながらもテスト可能な対象端末を増やすことも可能になります。例えば、You.i TV向けのドライバがAppum Project外で開発・コミットされ、Appium 1.6.0 にそのドライバが追加されました。
今現在、Appiumは 1.7.x シリーズですが、Appium 2.0に向けた構想がすでに議論されています。ここではAppiumをハブとして、さまざまな端末を、ドライバを拡張/置き換えることでより拡張しやすいかたちにするための再構築も進んでいます。そのようなさまざまなプラットフォームを自動化できるようにしていくという構想をStarDriverと呼んでいるみたいです。
また、Appium projectは2016年10月にJSFoundationに寄贈され、より特定の企業に依存しないOSSのプロジェクトである色が強くなってきています。Appiumは主にはSauceLabsによって開発・メンテされてきましたが、現在は数名を除くと基本的にはSelenium同様にボランティアの手によって開発が進んでいます。なお、歴史を見るとこの寄贈に至るまでの遷移を見ることができます。
ドキュメントの整備具合
Appium本体のドキュメントは、以前はあまりメンテナンスができていませんでしたが、最近はドキュメントの整備も進み、英語ではありますがAppiumに慣れない人でもまとまった情報を簡単に参照できるようになってきています。Appiumプロジェクトの開発に参加するディベロッパー向けにはESDocを、Appiumを使うユーザ向けにはMkDocsが使われる議論が行われ、ここ最近はユーザ向けのドキュメント整備が進んでいます。
以下が主なドキュメントです。まだ改善途中ではありますが、対応コマンドの一覧も存在します(クライアント側の実装例の整備がまだ間に合っていませんが)。
また、すでに少し触れたことがある方にはこちらのサンプルコードも多言語でAppiumに触れる良い参考情報になるかもしれません。中には古いものもあるので、気になる部分を最新化するというだけでも、OSSプロジェクトにPRをだす良いきっかけになるかもしれないですね。
日本語情報
ところで、Appiumに関する日本語の情報は少ないです。例えば、書籍では『実践Appium』が国内では有名どころになります。この情報はAppium 1.6.0には一部対応できていますが、最近の1.7系統には対応できないところもあります。例えば今回説明するAppiumのデスクトップアプリです。
ここ1年以内の動きだと、XCUITestドライバやEspressoドライバの開発やその情報、他にもより実行を高速に・安定させるためのドライバの開発や提案、他プロジェクトとの連携も発生しています。
これらの変化はAndroid/iOSプラットフォームの成長やモバイルのネイティブアプリに対する自動テストへの要求の動きに影響されている面もあります。そのため、Appiumプロジェクト自体の環境も変化しているため、既存の日本語情報は古いものになっていることも多々あります。