はじめまして、Wです。
「はじめまして」と書きましたが、実は過去の記事で少しだけ登場していますのでよかったら探してみてください。
今回は個人的に気になっていたSelenium/Appiumの実行速度について調べてみたことを書いていきたいと思います。
Selenium/Appiumとは
テスト自動化について調べたことがあるなら説明不要かもしれませんが、簡単に説明します。
Seleniumとは、WebDriverを使用してブラウザを自動制御してWebアプリケーションを操作する自動化ツールの一つで、以下のような特徴を持っています。
・オープンソースであり無料で導入できる
・Java、JavaScript、Python、Ruby、C#など多くのプログラミング言語で使用可能
・ブラウザに対応するWebDriverさえあれば、同一のコードであっても用意に各ブラウザへ適用させることができる
AppiumはSeleniumのスマホ版といったところで、ブラウザだけではなくスマホアプリも制御することができます。
両者は上記のように高い汎用性を持っているため、プログラムが書けるエンジニアがいるのであればテスト自動化ツールの筆頭候補になってくるかと思います。
実行環境の拡張は容易だが…
先にも記述しましたが、対応するWebDriverさえあれば実行環境の拡張は容易に行えます。
しかし、各実行環境上での動作は同じようになるのでしょうか?
今回は自動テストの実施時間に大きくかかわってくる実行速度にフォーカスを当てて比較をしてみました。
実行速度の比較方法
実行速度の比較方法は、同一サイトを対象とした同一のシナリオをそれぞれの環境で実行して、その実行時間を計測することで行いました。
実行時間は実行毎に多少増減するため、計測は複数回行い平均値を算出して比較を行いました。
また、使用端末のスペックを全てそろえて計測をしているわけではないので、計測結果はあくまで目安として捉えてください。
対象サイト
今回の比較ではHOTEL PLANISPHEREを使用しました。
こちらは一般に公開されているテスト自動化の学習用の練習サイトとなっており、ホテルの予約サイトを模したつくりとなっています。
対象シナリオ
実行時間を測定するシナリオは会員登録→退会としました。
会員登録をして即退会という現実的にはあり得ないシナリオですが、テキストボックス、ラジオボタン、リストボックス、ポップアップ等の基本的な要素を一通り含んでいるのでこのシナリオとしました。
操作手順の詳細は以下のようになります。
- トップページへアクセス
- 会員登録をクリック
- 各種会員情報を入力
- 登録ボタンをクリック
- 退会するボタンをクリック
- 退会確認ポップアップのOKボタンをクリック
- 退会完了ポップアップのOKボタンをクリック
比較対象環境
今回比較を行う実行環境として以下のものを用意しました。
OS
PC:Windows10、MacOS
SP:Andoroid、iOS
ブラウザ
Chrome、Chrome(UA偽装)、Safari
実機
Android:Pixcel 4a
iPhone:iPhone 11
エミュレータ
Android:Android Studio
iPhone:XCode Simulator
ブラウザ制御方法
ブラウザとして制御、アプリとして制御
【補足説明】
UA偽装:User Agent(ユーザエージェント)をSPのものに偽装することで、PCブラウザからSPブラウザ上の表示を確認することができます。
ブラウザ制御方法:SPでブラウザを動かす場合、Appiumではアプリとして動かす方法とブラウザとして動かす方法の二つがあります。使用できる一部のメソッドやセレクタが異なります。
実行時間計測結果
PC環境
Win10のChromeが2.176[sec]と今回試した環境全ての中で最速の値となりました。
MacOSのChromeとSafariを比較してみると、トータルの実行時間としてはChromeの方が早いですが、トップページの実行時間だけで見るとSafariの方が早くなっています。
この結果からブラウザ毎に得意/不得意の癖のようなものが伺えます。
Android環境
Android環境では実機でブラウザ制御すると5.084[sec]だったのに対して、アプリ制御だとその4倍の時間を要していました。実行時間という観点からすると基本的にはブラウザ制御で実行するのがよさそうですが、アプリ制御時のみ取得できる要素もわずかにあったので、それらの要素が絡むテストではアプリ制御も選択肢に入れておくといいかもしれません。
エミュレータは実機のブラウザ制御の2倍程度の実行時間となりました。
参考までに、PCでUA偽装した場合の実行時間はUA偽装なしと比較してほぼ変わりませんでした。
iOS環境
iOS環境では実機のブラウザ制御が7.657[sec]で最速となっており、アプリ制御ではその4倍以上の時間を要していました。この傾向はAndroidと同様のようです。
その一方でエミュレータでの実行時間は2[min]以上と断トツで遅い結果となりました。
XCode Simulatorではポップアップのボタンを押すときに1[min]近く時間がかかっていました。要素を見つけるまでの最大待機時間を5[sec]としてシナリオを実装していたので、ポップアップ要素の取得に時間がかかったという事ではないようですが、原因の詳細についてはわかりませんでした。
まとめ
全実行環境で動作する同一のシナリオを作成して、その実行時間を比較しました。
同一のシナリオであっても実行環境ごとに実行時間は大きく異なってくることがわかりました。
実行環境ごとの実行時間の差は認識していないと自動テスト運用時に思わぬ落とし穴にはまってしまうかもしれません。多環境での自動テストの運用を考える際は注意してみるといいかと思います。