ruby-on-rails - 使用 capybara 运行并行 Selenium 测试

标签 ruby-on-rails ruby selenium rspec capybara

背景:

我有一组针对我的 Rails 3 应用程序运行的 Capybara 集成测试。对于测试套件的其他部分,我使用的是 Rspec

我的 Mac OSX 开发机器上有一个 selenium 2.6.0 独立服务器集线器。

java -jar selenium-server-standalone-2.6.0.jar -role hub

我正在运行多个虚拟机,每个虚拟机都通过一个 selenium 节点连接到集线器:

java -jar selenium-server-standalone-2.6.0.jar -role webdriver -hub http://0.0.1.12:4444/grid/register port 5555 -browser browserName="internet explorer",version=8,platform=WINDOWS

这工作正常,在这个屏幕截图中,控制台显示我有一个 IE7 和一个 IE8 浏览器连接到集线器:

The hub console showing connected nodes

我已将 capybara 设置为针对 selenium hub(将测试委托(delegate)给节点)运行。

Capybara.app_host = "myapp.dev"
Capybara.default_driver = :selenium
Capybara.register_driver :selenium do |app|
  Capybara::Selenium::Driver.new(app,
    :browser => :remote,
    :url => "http://localhost:4444/wd/hub",
    :desired_capabilities => :internet_explorer)
end

它可以工作,但是它只会在单个 internet_explorer 节点上运行测试。它似乎是“排在第一位”的那个;如果我关闭它,测试将在另一个节点上成功运行。

我一直在试用 parallel_tests项目,按照建议配置 capybara ,但这仍然只会启动一个集成测试。

如何同时在所有 internet_explorer 节点上运行我的集成?

奖励问题:如果我想在所有连接的节点上运行我的集成测试,无论浏览器功能如何,我该怎么做?

最佳答案

在这里你必须为不同的浏览器触发相同的测试,所以可以尝试启动两个测试过程,即运行相同的命令两次。

当您启动节点时,网格将处理不同节点上的执行。

在您的情况下,您正在执行测试,并且仅在套件/进程上启动了关于网格的测试。仅出于测试目的尝试一次又一次地触发这些测试两次。如果您无法通过此实现,请使用 Ant 或类似的东西来控制您的测试执行。

关于ruby-on-rails - 使用 capybara 运行并行 Selenium 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565844/

相关文章:

javascript - Rails 应用程序中的 jQuery Tablesorter 文件大小

ruby-on-rails - Rails - 嵌入式多态评论列表 + 添加评论表单 - 示例?

ruby - Chef 的 deploy_revision/before_symlink 什么时候运行?

ruby - 即使是简单的页面也需要 Rails 中的路由吗?

java - 如何使用 GhostDriver 和 PhantomJS 减少从 Web 获取 URL 页面的时间

c# - 如何使用 Phantomjs、selenium 和 c# 连接到 Tor 网络

ruby-on-rails - 在多个页面上使用相同表单的 Rails 最佳实践

ruby-on-rails - Rails 引擎 : Namespaced Polymorphic URLs

ruby-on-rails - 使用WebMock Rails模拟证书

java - 如何验证 url 是否正确