3

Selenium スクリプトの大規模なスイートがあり、一部のテストは「不安定」です。CI ビルドでは失敗しますが、開発マシンでは問題ありません。

その理由はパフォーマンスにあると考えています。CI ビルドは開発マシンよりも遅く、アプリケーションはアクションの直後にサーバーの応答が返ってくるまで Web アプリとのやり取りをブロックします。

これは私に質問をもたらします:

クライアントは、サーバーにかかる時間をどのように知ることができますか?

クリックするたびに長時間待つことができますが、これはテスト スイートの速度を大幅に低下させます。

十分に待つためのトリックはありますか?

私たちのスイートは非常に大きいので、これをすべてのテストケースで維持/処理したくはありませんが、テストフレームワークまたはサーバー側で一般的に扱います。

セレンの技術的な経験はあまりありませんが、これは概念的な問題のように思えます。

4

2 に答える 2

-1

クラスでは、フィールドを持つことができます

public int startTime;
public int stopTime;
public int averageResponseTime = 2000; 

ここでaverageResponseTimeは、応答を待機する最大時間 (この例では 2000 ミリ秒) に設定します。

@Before/testSetup メソッドで:

// set the startime for the test    
startTime = new Date();

@After/tearDown メソッドで:

// set the stopTime
stopTime = new Date();

// calculate how long it took
int duration = stopTime - startTime;

// average out the response time
averageResponseTime  = (averageResponseTime + duration)/2;

テストで、新しい待機をインスタンス化しaverageResponseTime 、waitTimeout として渡します。

WebDriverWait wait = new WebDriverWait(driver, averageResponseTime); wait.until(expectedCondition); 

最初のテスト (またはその程度) の後、タイムアウトは、サーバーが実際に応答するのにかかる平均時間にどんどん近づきます。

于 2013-05-21T18:30:11.780 に答える