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
任意の方法を制御できます。上記のアイデアのいずれかにアプローチする方法、または私が思い付いていないアイデアについて誰か提案はありますか?