2017-08-23 9 views
1

私は店頭のカスタマイズオプションをテストするためにPythonとSeleniumを使用しており、時間の経過とともにテストが大幅に遅くなることに気づきました。選択組み合わせを実行中にテストが遅くなる

具体的には、ページには<select>の数のタグがあり、それぞれのタグの子は<option>です。 Ajaxの各変更は、Seleniumが最初に表示されるアニメーションのロードを明示的に待ってから待機し、次のオプションに変更する前に消える新しい価格を照会します。

3つのオプションがそれぞれ5つの選択フィールドがあるので、全体のテストには時間がかかります。しかし、以前の組み合わせは通常1秒未満でロードされますが、最後のものは価格を変更する前に最大20秒間ロードアニメーションを表示できますが、以前の組み合わせと後のものでは大きな違いがあるようです。

この問題は、CPUとメモリの両方の使用が中程度であるため、テストが実行されているマシンには表示されません。私は非常に不思議なことに、このパフォーマンスの低下を時間の経過と共に引き起こしている可能性があります。誰かがアイディアを持っていれば非常に感謝しています。前もって感謝します!

+0

セレンで制御しているブラウザまたはドライバのバイナリはどれですか? waitよりもバイナリのバイナリをインスタンス化する時間が短い場合は、各バイナリのバイナリドライババイナリを再作成するスクリプトを作成することを検討することをお勧めします。 Cookieおよびその他のデータは、ドライババイナリの新しいインスタンスに渡すことができます。 – user14218

+0

PhantomJSが問題を悪化させたように見えるため、Chrome Webdriverを使用しています。あなたはドライバを再インスタンス化することで何を意味するのか詳しく説明できますか?インスタンスからの関連データはログインセッションとなり、選択の現在の状態になります – Peter

+0

基本的に終了するスクリプトを作成し、各組み合わせに新しいChromedriverを作成します。 driver.quit():driver = webdriver.Chrome( '/ path/to/chromedriver')。 – user14218

答えて

0

多くのセレンユーザーは、アニメーションによって影響を受けたテストを受けました。変化する価格だけをテストするには、アニメーションを無効にすることが最善の方法です。アニメーションをテストする予定がある場合でも、セレンによるより複雑なエクスペリエンス/結果が階層化され、テストから1つずつ変数を削除すると、より大きなコントロールが提供され、各レイヤーを個別にテストする機会が与えられます。

http://marcgg.com/blog/2015/01/05/css-animations-failing-capybara-specs/

また、私は私のテスト環境に局在していたほとんどの理由のために遅くなるために、ドライバのバイナリのいくつかのバージョンを経験しています。各テストの新しいドライババイナリをインスタンス化し、テストが完了したときにドライバを破棄するデザインパターンを使用すると役立ちます。そうすることで、コードを実行するときに追加のオーバーヘッドが追加されます。しかし、それは予測可能な時間であり、期待に含めることができます。

関連する問題