在Windows环境下并行执行Cucumber/Watir场景

3
有没有想法可以在Windows上并行运行cucumber场景?到目前为止,我已经尝试过以下方法(并发现以下问题):
WatirGrid:
必须使用Ruby线程才能实际并行运行。这迫使我们将浏览器对象包装在一个线程中,因此在线程块关闭后无法访问。(无法将Browser对象传递给cucumber环境)
Hydra:
需要SSH(和公钥)访问远程框(即没有Windows)
Selenium Grid:
超级重,无法找到清晰的Cucumber测试路径
TestJour:
需要Bonjour(在Windows上不可用)

我可以问一下并行运行场景的目的吗? - Chuck van der Linden
1个回答

1

关于 Watirgrid ...

我已经添加了一个迭代方法,可以传递一个watir代码块来执行远程浏览器对象。因此,浏览器对象在步骤之间变得可重用。这里有一个更新的详细的cucumber示例:

https://github.com/90kts/watirgrid/blob/master/examples/cucumber/step_definitions/example_steps.rb

你的cuke步骤最终看起来像这样:

Given /^navigate to the portal$/ do
  @grid.iterate {|browser| browser.goto "http://gridinit.com/examples/logon.html" }
end

When /^they enter their credentials$/ do
  @grid.iterate do |browser|
    browser.text_field(:name => "email").set "tim@mahenterprize.com"
    browser.text_field(:name => "password").set "mahsecretz"
    browser.button(:type => "submit").click
  end
end

Then /^they should see their account settings$/ do
  @grid.iterate do |browser|
    browser.text.should =~ /Maybe I should get a real Gridinit account/
  end
end

如果您有任何问题,请随时联系我。我们还在EC2上提供了watirgrid的商业实现,可供beta测试,链接为http://gridinit.com/public/examples,请关注更多使用不同测试框架的更新!

顺便说一下,控制/迭代助手已经包含在最新版本的watirgrid v1.1.2中。

或者,为了在每个提供商上使用不同的场景并行执行,我只需拥有一个类似于以下内容的support/env.rb文件:

require 'watirgrid'
require 'rspec/expectations';

ENV["GRID"] = 'true'
ENV["controller_uri"] = "druby://10.0.1.3:11235"

if ENV["GRID"] then
  params = {}
  params[:controller_uri]   = ENV["controller_uri"]
  params[:browser]          = 'chrome' # type of webdriver browser to spawn
  grid ||= Watir::Grid.new(params)
  grid.start(:initiate => true, :quantity => 1, :take_all => true)
else
  @browser ||= Watir::Browser.new :chrome
end

Before do |scenario|
  @browser = grid.providers.first
end

at_exit do
  grid.iterate do |browser|
    browser.close
  end
  grid.release_tuples
end

注意,我正在使用:take_all => true来获取对提供程序的独占访问权,并在at_exit时将其释放回网格...然后,我会使用CLI从单独的测试运行器调用我的场景,可能包装在一个bash或DOS脚本中。
cucumber features --name "Name of scenario 1"
cucumber features --name "Name of scenario 2"
cucumber features --name "Name of scenario 3"
...
etc

哇,开源太棒了。谢谢Tim,我今天会调查一下并回报的。 :) - Matt Darby
也许我漏掉了什么?如果我启动三个提供者并发出一个@grid.iterate块以转到cnn.com,那么所有三个浏览器都会依次进入该网站。我想要做的是在三个独立的浏览器上并行运行三个不同的黄瓜场景。这可能吗? - Matt Darby
在同时处理三种不同的场景吗?我想我们可以这样做,使用自定义钩子或随cukes一起提供的CLI...首先,我需要获取功能/场景的数组,然后按提供程序数量将它们分割并拆分为单个提供程序...你是这样想的吗? - Tim Koopmans
是的,这就是我们的想法。我们有大量的黄瓜场景,并且我们正试图找出如何以并行方式运行它们(以节省时间等)。 - Matt Darby
请查看上面的编辑...或在此处查看源代码 https://github.com/90kts/watirgrid/tree/master/examples/parallel/cucumber - Tim Koopmans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接