2011-03-22 56 views
0

我有一個簡單的Selenium測試,它針對遠程Selenium Server實例運行。Selenium RC忽略我的超時

我想測試頁面性能,有些頁面可能會超過最大執行時間,我試圖去捕捉它。

不管我放在setTimeout()中,它總是等待整個頁面加載或服務器超時。

public static $browsers = array(
    array(
     'name' => 'Firefox on Ubuntu', 
     'browser' => '*firefox', 
     'host' => 'dev-ubuntudesktop', 
     'port' => 4444, 
     'timeout' => '1000', 
    ), 
) 

public function testSlowPage() { 
    $this->setTimeout(1000); 
    $this->open('myslowaddress'); 
    $this->assertTextNotPresent('Internal Server Error'); 
} 

即使我不使用openAndWait,上面的例子中沒有達到斷言線的頁面加載或web服務器終止請求之後,直到。

我真的很喜歡的是一個測試,確認「頁面加載在1秒以內」,無需等待30秒(或任何PHP超時恰好設置爲)。

回答

0

無論您是否希望,Open方法都會隱式調用wait。此等待時間默認爲30秒。當你的頁面在30秒內不加載時使用setTimeOut。因此,如果你的頁面在30秒內沒有加載,那麼你可以使用setTimeOut,否則你測試會失敗,所以它會是 -

selenium.Open(appURL); selenium.setTimeOt(timeOut);

現在來到您的測試目標。你可以做斷言檢查需要頁多長時間來加載,我曾與1秒到過這裏 -

(這是在Java,但你應該能夠找到PHP當量)

int testStartTime = Calendar.getInstance().get(13); 
selenium.open(appURL);  
int testEndTime = Calendar.getInstance().get(13); 
Assert.assertTrue((testEndTime-testStartTime)>1, "Fail"); 

請注意,我有這裏沒有使用setTimeOut方法,因此如果頁面在30秒內沒有加載,那麼測試將以任何方式失敗,並且您會知道該頁面在30秒內無法加載。在這種情況下,如果您還想檢查頁面加載時間,則可以使用異常處理以及時間計算來查找頁面加載時間。

+0

所以沒有辦法限制這可能會導致我的測試中的延遲?唯一的解決方案似乎是在測試期間將我的PHP max_execution_time設置爲短時間,否則我的測試可能需要很長時間才能失敗。 – Cylindric 2011-03-23 18:00:06

+0

我不知道PHP,但它向我表明,max_execution_time將讓您的測試僅在指定時間內執行。它如何保證頁面實際上是?我想直到控制超出開放的方法,可能沒有任何觀察頁面的方式實際上完全加載。但是,這又是我的猜測...... – Tarun 2011-03-24 06:57:50

+0

如果頁面運行時間超過max_execution_time,則會終止並返回500服務器錯誤。但考慮一下,我認爲你的方式沒有問題 - 如果出現問題,所有的頁面應該只花這麼長時間,在這種情況下,慢速的測試運行應該沒有什麼關係。我被測試優先分散注意力,因爲我的頁面速度很慢,所以我的測試花費了很長時間才失敗。事實上,如果出現問題,它們只會很慢。 – Cylindric 2011-03-24 09:42:54