【问题标题】:Selenium RC is ignoring my timeoutSelenium RC 忽略了我的超时
【发布时间】:2011-03-22 12:42:51
【问题描述】:

我有一个针对远程 Selenium 服务器实例运行的简单 Selenium 测试。

我正在尝试测试页面性能,有些页面可能会超过最大执行时间,我正在努力解决这个问题。

无论我在 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,但在页面加载或网络服务器终止请求之前,上述示例不会到达断言行。

我真正想要的是确认“页面在 1 秒内加载”的测试,无需等待 30 秒(或任何 PHP 超时设置)。

【问题讨论】:

    标签: selenium automated-tests


    【解决方案1】:

    无论您是否愿意,Open 方法都会隐式调用等待。此等待默认为 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 秒内没有加载。在这种情况下,如果您还想检查页面加载时间,则可以使用异常处理和时间计算来查找页面加载时间。

    【讨论】:

    • 那么在我的测试中没有办法限制这可能导致的延迟吗?唯一的解决方案似乎是在测试期间将我的 PHP max_execution_time 设置为较短的时间,否则我的测试可能需要很长时间才能失败。
    • 我不了解 PHP,但它向我表明 max_execution_time 会让您的测试仅在指定时间内执行。它如何保证该页面实际上是?我想在控制超出 open 方法之前,可能没有任何方法可以观察到页面是否真正完全加载。但又是我的猜测......
    • 如果页面运行时间超过 max_execution_time,它会被终止并返回 500 服务器错误。但是考虑一下,我认为您的方式很好-毕竟如果出现问题,所有页面都应该只花那么长时间,在这种情况下,缓慢的测试运行并不重要。我被测试第一的事情分心了,因为我的页面很慢,所以我的测试需要很长时间才能失败。实际上,它们只有在出现问题时才会变慢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2011-12-22
    • 2017-12-09
    • 2018-09-08
    相关资源
    最近更新 更多