Eggplant - オブジェクト操作による実機テストの自動化
今回 3回目となる私のブログでは、標題にある製品の特徴についてご紹介致します。
Eggplantは、Eggplant DAIサーバー, Eggplant DAI Agentおよび Eggplant Functionalコントローラークライアント、で構成されるソフトウェアで、実際にテスト対象マシン(SUT: System Under Test)に接続してソフトウェアを操作し、テストを自動化します。
Eggplant Functional(EPF)ソフトウェアは、テスト自動化を行う実行エンジンで、SenseTalkスクリプトを実行します。EPFには下記のようなGUI開発環境が備わっており、Turbo Capture(操作の記録)やAuto Scan(オブジェクトのスキャン)といったスクリプト作成支援機能を使用しながら、ソフトウェアに対する操作をSenseTalkスクリプトで記述します。
この時のソフトウェア操作は、主に画像マッチングにより行います。
さて、画像マッチングする時の画像検索速度はどのくらいなのでしょうか?
Chromeアイコン, 画像マッチング速度 - Windowsコンソール接続, 1920x1200解像度
普段アップデートリリースの新機能検証などを行っていますが、改めて、チェックしてみました。
EPFマシンとSUT(テスト対象機)は、いずれもWindows10で、次のスペックです。
マシン | CPU | メモリ |
Eggplant Functional | Core i7 1.7GHz | 16GB |
SUT(テスト対象機) | Core m5 1.1GHz | 8GB |
解像度1920x1200のテスト対象機のデスクトップにある Chromeブラウザのアイコンを検索してマウスカーソルを移動するのにどのくらいかかるか、実際のログから抽出したのが次の結果です。
まず、最初にアイコンの位置を通常の左側に置いた場合は、
0.263秒
右下に置いた場合は、
0.259秒となりました。
通常左上のxy座標0,0から右下の1920x1200まで順に画像検索するものと思われますが、検索時間の差異はほとんどありませんでした。
オブジェクトとDigital Automation Intelligenceによる実機テストの自動化
Eggplant FunctionalのGUI開発環境は、拡張子 .suite (スイート)と呼ばれるファイル単位にマッチング画像やスクリプトコードのファイルを配置し、実行を行います。
今回のチェックで使用したEggplant Functionalのスイート(202408Blog.suite) は、次の通りです。
[Images]に、マッチング画像 [ChromeIcon.png] がありマウスカーソルが位置付けられてプレビュー表示されています。
[Scripts]には、demo(.script)がありそのコードは マウスを10秒以内に移動させるコマンド、「MoveTo(Image:”ChromeIcon”, WaitFor10)」が記述されています。
SenseTalkスクリプトはタイプレスでコンパイルが不要なインタプリタ―ですが、プログラムに必要な、「順次実行、繰り返し、判定」といった構文が備わっており、SUT操作からファイルDB操作に至るまで様々なコマンドが予め用意されています。
この他、開発環境の特徴としては、
- 変数のスコープには、スクリプト内ローカルの他に、.suite(スイート)内グローバルなどがある
- サブルーチンの作成が可能で、Returnと合わせて関数の作成も可能
- 他のスイートのインポートが可能
といった点が挙げられます。
これらの機能により、スクリプトの再利用が可能になり、更にスイートをフレームワーク化することも出来ます。
フレームワーク化されたスイートでは、AndroidやiPhoneといったマッチング画像を、同じ画像名称で異なるスイート上に蓄積し、実機への接続情報から正しいマッチング画像を処理することが可能になります。
これは「実機に応じて画像オブジェクトがまるごと切り替わる動作」と言えます。
実際のコードは例えば次画面が示すとおり、スイート上に別のスイート、この場合、iPhoneとAndroidの画像が蓄積されたスイートがそれぞれインポートされており、実行後、接続名称から適切なスイートが選択されます。
実行ウィンドウにあるブレークポイント実行箇所では、iPhoneSEの接続情報から接続するスイート名の文字列を作成し、インポートされたスイートの中から適切な画像のスイートが選択されています。
同様にコードも「デバイス単位に固有のコード、モバイルデバイスに共通のコード」という風にスイートを分割して「実行時にインポートされた中から適切なコードを含むスイートを使用する」といったことが可能です。
つまり、アプリケーションに特化したコードから接続デバイスに固有の画像又はコード、モバイルデバイスに共通のコード、といったように「階層的にスイートを利用すること」そして「ひとつのスイートで複数のテスト対象機のテストをサポートすること」が可能と言えます。
新たな機種の対応も、フレーム化されたスイートに新たな画像を取得することで比較的容易に行えます。
例えば、おおまかには次のような手順です。
1. 類似機種の画像アセット(資産)を有するスイートのコピーを用意します。
2. 検索画像を更新するモードAuto, Manualのうち、Manualでテストを実行します。
3. 画像更新パネル上で画像を取り直しながら実行していき画像アセットを作成します。
Eggplant FunctionalはmacOS版もサポートしており、実際の画像差替えの操作イメージは、例えば次の画面のようなものになります。
左上に、接続されたAndroidと画像更新パネルが表示されており、[Save]ボタンで画像を更新しようとしています。
このような手順で異なる機種や新たな機種のマッチング画像を差替えること出来ます。
画像マッチングの速度感については、1920x1200の解像度で、より複雑な操作を行っている動画をアップしましたのでご興味があればご覧ください。
この動画は、EPFのStartMovie, StopMovieコマンドにより作成されたものです。
ブラウザに対してはWebDriverによるWebElementに対する操作も可能ですが、動画の中では、画像検索の他にOCR検索も行っています。
このようにEggplantは実機の画像オブジェクトやWebElementオブジェクトに対してアプリケーション操作が行えるテスト自動化ソリューションです。
Eggplant DAIはWebアプリケーションが実装されており、テスト対象のアプリケーションをステートとアクションによりGUI操作でモデル化する事も可能です。
モデル実行を行うと、Eggplant DAIは機械学習も使用したテストシナリオを自動生成し、DAI Agentを介してEPFに操作指令を送ってテスト対象機を操作します。
上記URLの動画は実際にこのモデル実行の構成で動作させたものです。
モデル化されると上記のようなモデル図より、コードの進行が視覚的に捉えることが可能になりますし、機械学習も用いて実機を用いたテストを自動化することも出来ます。
DAIでもフレームワーク化したスイートと連携できます。
次の画面は、フレームワーク化したスイートをDAIに関連付けて、iPhoneSE、Androidの各デバイスのテストを、同一モデルおよび同一スイートで行ったテスト結果画面です。
EggplantはiOSやAndroidモバイルデバイスの接続もサポートしており、例えばモバイルデバイスとWindowsクライアント間で接続を切り替えて操作することも可能です。
この機会にEggplantの特徴を生かしたシステムテストの自動化にチャレンジしてみてはいかがでしょうか。