TeamCity - 黄瓜验收测试在白天失败,但过夜过夜

时间:2013-06-11 08:48:33

标签: cucumber teamcity selenium-webdriver watir-webdriver page-object-gem

我们正在使用Cucumber和PageObject gem测试Web应用程序,在TeamCity上运行CI。我们遇到了一个我们都无法解决的问题。

我们正在访问两个下拉列表,其组合内容会生成一个无线电选择字段。当我从本地计算机运行它时,它会通过,但是当从集成服务器运行到相同的环境时,它大部分时间都会失败...

......除了晚上。我配置了一些预定的构建,这样我就可以在一个稳定的环境中观察它,并且它会一直过夜。

它抛出的错误是国家/地区下拉(第二个字段,取决于'客户',这是第一个)不包含选择值。我手动检查了它,看起来客户端框是空的。

产生错误的自动化代码如下。请注意,我已经尝试了几种方法来访问它,包括下载到Watir Webdriver但没有任何区别。

您认为这只是一个简单的性能问题吗?我不知道它是怎么回事,因为测试代理一次只运行一个项目,所以理论上他们应该执行相同的操作而不管构建负载。

def safe_select_client(value, attempts = 10)

  count_attempts_to(attempts)do
    self.client_code = value
    if self.client_code_element.selected? value
      next
    else
      $stdout.puts attempts-1
      safe_select_client(value, attempts-1)
    end
  end
end

def safe_select_country(value, attempts = 10)
  count_attempts_to(attempts) do
    self.client_country = value
    if self.client_country_element.selected? value
      next
    else
      safe_select_country(value, attempts-1) unless self.client_country_element.selected? value
    end
  end
end


def safe_select_proposition(value, attempts = 10)
  count_attempts_to(attempts) do
    self.select_default_proposition
    safe_select_proposition(value, attempts-1) unless default_proposition_selected?
  end
end

2 个答案:

答案 0 :(得分:1)

我有一个解决方案。

应用程序开发人员对此进行了调查,发现该错误与应用程序健壮性有关,而不是测试代码:客户端正在缓存下拉列表的值。这是一个永远不会被发现的错误 - 或者如果不是自动验收测试,那么它将在生产中被发现,而且修复成本更高 -

谢谢大家。

答案 1 :(得分:0)

这似乎是一个性能问题,因为脚本在完成加载之前尝试设置国家/地区下拉列表。

在不知道count_attempts_to方法的作用的情况下,您的代码似乎尝试设置下拉值并重新尝试多次。但是,如果该值不存在,则重试可能不会运行,因为已经抛出了异常。即使重试部分工作,重试也会立即显示,因此下拉列表可能仍未加载。

您应该使用内置等待方法 - 请参阅http://watirwebdriver.com/waiting/

假设count_attempts_to只是重试机制的一部分,我认为你可以重写country方法(和其他方法),如:

def safe_select_country(value)
  self.client_country_element.option(:value => value).when_present.set
end

这表示等待选项最多30秒。找到后,选择它。

相关问题