なんか、ソシャゲやアニメの記事が多い中、違和感ありますが。一応ITとかAIも機会があれば取り上げてるので;(もう昨年の話ですが、ラズパイとかディープラーニングとか書いたなー)
今回のお題は、スマホアプリの自動化ツール「Appium」のお話です。
「自動化」といえばWinActorに代表される、業務自動化ツール(RPA)の活用が拡大しているこの頃ですね。事務作業自動化とはまた違う領域ですが、開発現場においても広義のRPAといえるツールの導入の機運が高まっているのを感じています。
特に、アプリケーションのテスト作業の自動化については、Selenium IDEといった、
ノンプログラマーでも使いやすい枯れたツールが存在していることもあり、既に当たり前に使われている現場も多いかと思われます。
Webアプリケーション向けのテスト自動化では、Seleniumと呼ばれるOSSが広く使われていますが、一方で、昨今のスマホ普及により増加したモバイルアプリのテスト向けとして開発・使用されているのが「Appium」と呼ばれるOSSです。
自分も開発現場でこの度触る機会が一時期あり、色々勉強したのですが、その仕組みなどはまだもやっとしたまま……(仕組みなどは詳しく理解しなくても、とりあえず使うことはできるのですがね)
自己学習の整理のため、Appiumの仕組み(アーキテクチャ)について、アウトプットしておきます。
(参考文献)
Manoj Hans
オライリージャパン
売り上げランキング: 466,285
オライリージャパン
売り上げランキング: 466,285
(参考ページ)
・Appiumの仕組みと使い方 - Qiita
・SeleniumのUIテスト自動化をiOS/AndroidにもたらすAppiumの基礎知識とインストール方法、基本的な使い方 (1/4):スマホ向け無料システムテスト自動化ツール(8) - @IT
Appiumアーキテクチャ
Appiumにはいくつかの登場人物が存在します。登場人物を一覧表に示します。
大きな特徴しては、Appiumを搭載しているPC内でクライアント-サーバー型のアーキテクチャを取っていることだと思います。
テストスクリプトで内で記述したAppiumクライアントライブラリを介して、Appiumサーバーに命令を送る。Appiumサーバーがそれに従って、PCにUSB接続されたデバイスを自動操作するというものです。
なぜ、このようなクライアント-サーバー型の構成をとっているのかは不明ですが、クラサバの一般的なメリットから考えれば、おそらく以下の狙いがあるのかなと。
・機能分散、実装上の都合?(複数のテストスクリプトを同時実行する際、PC-デバイス間の中継機能を持たせたサーバを配するのがいい?)
クラサバ間で使われているプロトコル(Mobile JSON Wire Protocol)はHTTPベースで、データはJSON形式と決して特殊なものではなく、なじみのあるものが使われています。
テスターがデバイスをAppiumで自動操作する際には、まずセッションを確立するところから始まります。このセッションを介することで、デバイスにあるテスト対象のアプリを自動操作することになります。
セッション確立までの流れは調べたところ以下のようになるみたいです。(Androidデバイス操作の場合)
※実際の実装を調べたわけではないので、順序や内容が間違ってる可能性あり
セッションはテスト終了後に切断されます。
Appiumの仕組みはまだ詳細は深入りしていませんが、最初のセッション確立だけでもその大まかな概観が見えてきますね。
Appiumのインストールやコマンドの解説については、以下に記しました。
・インストール、テスト準備方法
https://nine-num-98.blogspot.com/2020/04/appium-katalon-01.html
・コマンド、サンプルコード解説
https://nine-num-98.blogspot.com/2020/04/appium-katalon-02.html