Subj。 Atm私はSeleniumとPythonを使用していますが、同じことが他のスクレイピングソリューションにも当てはまります。
不思議なんだけど:
客観性を維持するために、「最適/推奨/ベストプラクティス」とは、「ニッチな分野で注目を集めているプロジェクトによって広く使用されているか、推奨されているか、推奨されているか」を意味します。
このトピックに関するSelenium関連または汎用の資料を見つけることができなかったため、ネット検索に1日ほど費やしたため、重要な情報が不足している可能性があります。
スクレイピングの基本的な操作は次のとおりです。
コールチェーンは次のようになります。
(テストコード->)ユーザーコード->フレームワーク(セレン)->ブラウザ(ウェブドライバ)->サイト
だから、私が模倣できる3つのホップがあります。それぞれに課題があります。
提供するコンテンツには2つのオプションもあります。
最後の懸念の1つは、サイトが事実上状態マシンであるという事実です。私はどちらがより便利になるかわかりません:
表明された懸念に対処するための更新:
私はサードパーティのサイトをスクレイピングしています-いつの日か予告なしに変更される可能性があり、変更される可能性があります。したがって、「執筆時のサイトのインターフェイス」に対するテストで問題はありません。コードの変更がスクレイパーの内部ロジックに違反していないかどうかをすばやく確認するためです。
c796112 で@RobertHarveyによって与えられたアイデアは、サイトをまったく模倣しないことです。
目的がスクレーパーの内部ロジックをテストすることである場合、それを正確にテストします:
あなたのスキームでは、それは「ユーザーコード->フレームワーク」ホップから一歩高くなります:User code -> Elementary page operations -> Framework
。
あなたは細部をからかって夢中になることができます。多くの複雑なテストケースを考えると、それはおそらく実現可能ではありません。
可能な場合は、実際のテスト入力全体を記録し、編集して無関係な詳細を取り除き、完全なスクレイピングエンジンで実行することをお勧めします。サイトの表現方法と再生方法は、これらのテストに必要な忠実度によって異なります。例えば。サイトが複数のドメインにAjaxリクエストを行うことが予想される場合、これは非常に困難な場合があります。
たとえば、スクレイピングするページのHTMLを保存するだけで済む場合があります。極端なケースでは、サイトが行うすべてのHTTPリクエストをログに記録して再生する必要があります。つまり、サイトがリクエストを作成し、ライブサイトから記録したレスポンスを再生します。
すべての場合において、あなたが主張することは、あなたのスクレーパーがページから正しいデータを抽出したということです。そこに到達する方法は二次的なものになるでしょう。
これらの高度なテスト方法の利点は、
不利な点は、これらのテストがやや遅い–ライブサイトへの実際のリクエストを実行するよりもはるかに高速ですが、スクレイパーのターゲットを絞った単体テストよりも低速です。
時間の経過とともに、現実的なテストケースのコーパスを成長させることができます。テストケースが役に立たなくなった場合(ライブサイトが変更されたためなど)、いつでも破棄できます。
ここでスクレーパーの意味がわかりません。 Selenium/Javaを使用してUIオートメーションを開発するとき-単体テストを定義します。 Webアプリケーションがあり、Seleniumテストを作成して、ログインの成功、無効なログインなどを確認したとします。次に、実行中の既存のWebアプリケーションを実際にテストして、何かがダウンしたり壊れたりしたことを警告し、予想と同期しなくなりました。
一方、私はそれが必ずしもSeleniumベースであるとは限らないことをスクレーパーで書いていました。私は基本的なHttp呼び出しを使用して、ページにアクセスし、HTMLを取得し、正規表現を使用してデータを抽出し、csv/jsonにデータを保存してから、ホテルやショップの価格を収集するなどの処理を行いました。
Javaのモックは、単体テストを個別に実行するための依存関係をシミュレートするためのものです。ATM操作があり、実際のカードを挿入して実際の残高を表示する代わりに、bankServiceのモックオブジェクトを作成して、定義済みの模擬残高を返します。 、「モック」カードを事前に定義されたデータとともにATMに挿入します。モックの目的は、遅延なくユニットテストを行うことです。スクレイパーとサイトのモックの意味がわかりません。サイトは構築されますが、配置されませんか?次にSeleniumテストを記述し、適切な要素名を定義して、サイトの稼働中にそれらを有効にします。
通常、開発者は開発用にサーバーのローカルインスタンスを実行するため、モックサイトの目的がわかりません。開発、品質、本番環境があります。
ええと、QAチームでの作業は、基本的にはそこにあるものをカバーするため、事前に定義されたシナリオをチェックし、何かがダウンしたり、開発者によって破損した場合に警告します。または、テスト駆動開発に使用します。一連のビジネスルールを定義すると、多くのことを実装している間に、環境に配慮してテストに合格します。
Seleniumでは、UIパーツをテストするだけだと思います。これは、手動テスターが行う自動バージョンです。
サーバー側は、単体テスト、統合テストでカバーされており、バックエンドコードの動作を検証する単体テストのモックがありますが、Seleniumとは関係ありません。 SeleniumはUIテスト用です。