2

Selenium webdriver (Python で記述) を使用した一連のテストに取り組んでいます。テスト対象のページには、選択ボックスの 1 つで選択された値に基づいて表示されるフィールドを変更するフォームが含まれています。この選択ボックスには、約 250 のオプションがあります。選択ボックス内のすべてのオプションを反復処理し、選択した各オプションに対してフォームに正しいフィールドが表示されていることを確認するテストがあります (鼻を介して実行されますが、おそらく関係ありません)。

問題は、オプションごとにセレンを介して呼び出すことです。

  • クリックしてオプションを選択します
  • 7 つのフィールドの find_element と is_displayed
  • 選択ボックス内の項目の find_elements
  • 選択ボックスの各オプションの get_attribute とテキスト

したがって、(およそ) 250 * (7 * 2 + 1 + 2 * 250)、またはテストが実行されている webdriver サーバーへの 128,750 の個別の要求がすべて約 10 または 15 分以内に発生します。これにより、テストを実行しているマシンでクライアント ポートが枯渇する場合があります。これはすべて、選択ボックスがどのように解析されるか、新しいページ オブジェクトがいつ作成されるかなどを抽象化するテスト フレームワークを介して実行されるため、テスト コードの最適化は、すべてをハッキングするか、または破棄することを意味します。このテストのためのフレームワークであり、すべてを手動で実行します (テスト コードの保守性を考えると、これは悪い考えです)。

解決策について私が持っていたいくつかのアイデアは次のとおりです。

  • 何らかの方法で webdriver サーバーへの接続をプールまたは再利用しようとしています
  • セレンのタイムアウトによって接続が開かれたり、より迅速に強制終了されるように、urllib2または実行時に何らかの方法で構成を微調整するhttplib
  • セレンによって開かれているポートをアクティブに追跡して閉じるための、システムに依存しない (または少なくとも OS スイッチなどを備えたすべてのシステムに実装可能な) メカニズム

上で述べたように、ページの解析方法や処理方法を微調整することはあまりできませんが、サブクラス化/微調整WebDriverまたはRemoteConnection任意の方法を制御できます。上記のアイデアのいずれかにアプローチする方法、または私が思い付いていないアイデアについて誰か提案はありますか?

4

3 に答える 3

2

少量のプラスチック爆薬があなたの家の鍵を忘れるという問題を解決するのと同じくらい、私は解決策を実行しました。リソースのリストとリソースが追加された時間を追跡し、制限に達したときにブロックし、タイムスタンプがタイムアウト値を超えたときにエントリを削除するクラスを作成しました。webdriver.execute()次に、32768リソースの制限と240秒のタイムアウトで、このクラスセットアップのインスタンスを作成し、テストフレームワークに、呼び出されるたびに、または他のいくつかのアクション(dbクエリ、REST呼び出し)が呼び出されるたびにリストにエントリを追加させました。実行されます。これは特にエレガントではなく、かなり恣意的ですが、少なくともこれまでのところ、以前はポートの枯渇を引き起こしていなかったテストを著しく遅くすることなく、テストがポートの枯渇を引き起こさないようにしています。

于 2012-10-17T18:33:07.653 に答える