Casperjs / PhantomJsとSelenium


150

UIテストを自動化するためにSeleniumを使用しています。最近、ユーザーの大半がChromeを使用しているのを見てきました。だから私たちは知りたかった-PhantomJSとSeleniumを使用することの長所と短所:

  • テストケースの実行にかかる時間など、パフォーマンスの面で実際に利点はありますか?
  • いつSeleniumよりもPhantomJSを選ぶべきですか?

回答:


183

彼らはさまざまな問題を攻撃しています。PhantomJSはコマンドラインで完全に実行されるため、開発ワークフローの一部として、または継続的インテグレーションサーバーで、煙のテストの最初のレイヤーとして適しています。Seleniumは複数のブラウザを対象としているため、ブラウザ間の一貫性を保証し、さまざまなオペレーティングシステムで広範囲なテストを実行することは非常に有用です。

WebアプリケーションをさまざまなWebブラウザーで実行する必要がある場合、PhantomJSのみを使用してUIテストを実行しても、ほとんどのテストカバレッジは得られません。ただし、詳細なテストを行う前に、PhantomJSを起動し、いくつかの基本的な健全性チェックを実行することは完全に問題ありません。ログイン画面が意図せず壊れて機能しない金融アプリケーションのテストの狂気を想像してみてください。

2つの間の線は、最新のPhantomJSでの最近のWebDriverサポートによってわずかにぼやけていることに注意してください。最初にPhantomJSを使用してテストをすばやく実行し、次に(重大なエラーが発生しないと仮定して)Seleniumセットアップで同じテストを徹底的に実行し続けることが可能になりました。


回答ありがとうございます。実際の製品アプリでパフォーマンス関連の統計を収集するために人々がphantomjsをどのように使用しているかを理解するのに役立つリンク。
spirit3189

34
Ariya HidayatがPhantomJsの作成者に見えます
Sebastian Patten

PhantomJSを使用してテストを作成し、Seleniumを使用するという説明したワークフローは、テストを完全に書き直すことを前提としているようです... SeleniumでPhantomJSスクリプトを直接使用できますか?
lajarre

1
素晴らしいPhantomJS、@ AriyaHidayatをありがとう!:)
rinogo 2017

49

最近のWebDriver統合により(Ariyaが述べたように)、Seleniumを使用してPhantomJSを駆動できるようになりました。

これは非常に強力です。

すべてのチェックイン時にヘッドレスUnixサーバー上のCIを介して、(PhantomJSをWebDriver実装として使用して)完全に自動化された一連のSeleniumテストを実行できます。次に、ブラウザーの互換性をテストする場合は、基になるWebDriver実装をChrome、Firefoxなどに変更することにより、ローカルでテストを実行できます。


41

現在、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 1423およびHTML-UNIT 1046を参照してください。

  • 画像の読み込みとスタイルシートを無効にしているにもかかわらず、Firefoxが最も遅いSeleniumドライバーです。これは、ロードと初期化が最も遅く、Chromeよりもかなり遅くなるためです。また、抽出が失敗するたびにドライバーをリロードする必要があります(テストでは、5つのドライバーのプールを作成して、すべてのURL取得遅延を軽減していますSelenium Webドライバー)。

  • PhantomJSは、Firefoxよりも精度が高く、Chromeよりもわずかに低くなりますが、Firefoxの約半分の時間です。さらに、私は自分の開発ボックスでそれを実行できます。複数のブラウザーを起動して「自分のマシンを引き継ぐ」ことはないので、仕事に取り掛かることができます。

PhantomJSを強くお勧めします。


1
phantomJSでテストスイートを実行するには9分かかりますか?それは永遠のように感じるに違いない...
ケビン

@Kevinはい:)-しかし、HTMLCleanerは標準テストです。JUnit カテゴリを使用して他のテストをオプションとしてマークし、標準ユニットテストの一部ではないようにします
Mark Butler

ありがとう。ええ、私はフルJSテストに取り組んできましたが、それらは非常に氷のようです-数ページのテストで15〜20秒。多分私の氷河のスケールはheheでも調整する必要があります:)奇妙なことに、私が手動でそれを行った場合、フォームをクリックするのに5秒しかかかりません。
ケビン

1
@lucaswxpはい!そしてその間にある他の多くのプロジェクト。上記で説明したように、完璧な選択肢はありません。当時はHtmlCleanerを使用していましたが、抽出するページで必要な場合にPhantomJSを使用するオプションを追加しました。
Mark Butler

1
@iconoclastいいえ-残念ながら以前の雇用主はIPを持っています。
マークバトラー

2

SeleniumとPhantomJSの両方の機能を活用する PhantomJSにはヘッドレスブラウザー機能があるため、これをセレン(IE、Chromeなどの従来のブラウザーに加えて)のブラウザーの1つとして使用することをお勧めします。このアプローチの利点:

  1. CIでWebアプリケーションのSanityを実行するために使用できます(エージェントマシンにIEまたはChromeがない場合でも)テストは効果的に実行されます。
  2. 一部の開発チームはこのアプローチを使用して迅速な結果を取得し、時間とリソースの消費量を減らしています。
  3. ファントムJSの最大の機能は、マルチスレッドを使用して並列テストを実行する画面キャプチャであり、これにより実行時間が大幅に短縮されます。

1

PhantomJSの使用中に直面した課題:

私のアプリケーションはWebアプリケーションの価格設定でした:

  1. ある時点で、Chromeブラウザで正常に動作していたロケータがphantomJSで動作しません。
  2. 時々、セレンによるダブルクリックまたはコンテキストクリックを実行している間、私は最初にそれがクリックしていない操作cozを確認するために追加のチェックをしなければなりません。
  3. キャッシュとCookieの永続性。ログアウトしてからログインすると、データはキャッシュに残ります。| したがって、Chromeでテストを実行します。
  4. 私が見つけた最も重要な問題の1つは「ファイルのアップロードの問題」です。アプリケーションのphantomJsブラウザーでファイルをアップロードできません。javascriptexcutorやjqueriesをいろいろ試しましたが、どれもまったく機能しませんでした。したがって、Chromeでもこのテストを実行します。注:PhantomJSのWeb要素と対話するために、フレームワークでJavaScript関数を広範囲に使用しました。PhantomJSでは実行時間が非常に短いことは確かです。したがって、機能性/パフォーマンスが必要かどうかは、クライアントの優先順位に依存し、それでそれを実現します。エンドツーエンドのシナリオをテストする場合は、Chromeを使用してください。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.