Seleniumを使用して、UI
テストを自動化しています。最近、ユーザーの大多数がChromeを使用していることを確認しました。 PhantomJSとSeleniumを使用することの長所と短所:
彼らはさまざまな問題を攻撃しています。 PhantomJSはコマンドラインで完全に実行されるため、開発ワークフローの一部として、および/または継続的インテグレーションサーバーにおいて、煙テストの最初のレイヤーとして適しています。 Seleniumは複数のブラウザーを対象としているため、ブラウザー間の一貫性を確保し、さまざまなオペレーティングシステムで広範なテストを実行することが非常に役立ちます。
WebアプリケーションをさまざまなWebブラウザーで実行する必要がある場合、PhantomJSのみでUIテストを実行しても、ほとんどのテスト範囲は得られません。ただし、詳細なテストを行う前に、PhantomJSを起動し、いくつかの基本的な健全性チェックを実行することはまったく問題ありません。ログイン画面が意図せずに壊れて機能しない金融アプリケーションのテストの狂気を想像してください!
最新のPhantomJSの最近のWebDriverサポートにより、2つの間の線がわずかにぼやけていることに注意してください。 PhantomJSを使用して最初にテストを迅速に実行し、(重大なエラーが発生していないと仮定して)Seleniumセットアップで同じテストを引き続き徹底的に実行できるようになりました。
Ariyaが指摘したように、最近のWebDriver統合により、Seleniumを使用してPhantomJSを駆動できるようになりました。
これは非常に強力です。
チェックインのたびに、ヘッドレスUnixサーバー上のCIを介して、完全に自動化された一連のSeleniumテストを実行できます(WebDriver実装としてPhantomJSを使用)。次に、ブラウザの互換性をテストする場合は、基盤となるWebDriver実装をChrome、Firefoxなどに変更することにより、テストをローカルで実行できます。
現在、Web抽出フレームワークを作成しています。 XPathを使用して250のWebサイトからデータを取得する524のテストがあります。当初、フレームワークはHTMLパーサー、HTMLCleanerを使用していましたが、Javascriptのサポートが必要なため、現在 Selenium を使用して調査しています。 HtmlUnit、Chrome、Firefox、および PhantomJSドライバー に対してテストを実行しました。以下に、各アプローチの所要時間と失敗数の比較を示します。
Failures Time (secs)
HtmlCleaner 0 82
HtmlUnit 169 102
Google Chrome 38 562
Firefox 46 1159
PhantomJS 40 575
いくつかのコメント:
場合によっては、「失敗」がまったく失敗ではない可能性があります。JavascriptがDOMを書き換えているために、エクストラクターが失敗している可能性があります。私は失敗を分析して原因を見つけようとしています。
とはいえ、HtmlUnitは最速のSeleniumドライバーですが、信頼性もありません。この信頼性はJavascriptだけに関係するものではありません。タグバランシングアルゴリズムで何かが壊れているように見えるため、「乱雑で汚い、実際の」HTMLの処理に問題があります。これについていくつかの問題が提起されましたが、修正されていません- HTML-UNIT 142 および HTML-UNIT 1046 を参照してください。
Firefoxは、画像の読み込みとスタイルシートを無効にしているにもかかわらず、最も遅いSeleniumドライバーです。これは、ロードと初期化が最も遅く、Chromeよりもかなり遅くなり、抽出が失敗するたびにドライバーを再ロードする必要があるためです(テストでは、すべてのURL取得遅延を軽減するために5つのドライバーのプールを作成しますSelenium Webドライバー)。
PhantomJSは、Firefoxよりも精度が高く、Chromeよりもわずかに低いですが、Firefoxの約半分の時間です。さらに、開発ボックスで実行できます。複数のブラウザを起動して「マシンを引き継ぐ」ことはないので、作業を進めることができます。
PhantomJSを強くお勧めします。
SeleniumとPhantomJSの両方のパワーを活用する PhantomJSにはヘッドレスブラウザ機能があるため、 Seleniumを搭載したブラウザ(IE、Chromeなどの従来のブラウザに加えて)、このアプローチの利点:
PhantomJSの使用中に直面した課題:
私のアプリケーションはWebアプリケーションの価格を設定していました: