2011-03-22 49 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