通过不同的浏览器使用watir-webdriver进行多个并发浏览器测试

时间:2011-12-29 14:32:58

标签: ruby concurrency watir watir-webdriver

所以我在这里的网站上工作,我想一次运行多个浏览器测试。我的意思是它应该同时执行我的冒烟测试,即firefox和chrome,并报告每个浏览器的结果。我目前只使用rpsec和watir-webdriver进行测试,但希望自动化其他2个浏览器。那里有没有现有的宝石(我一直找不到),如果不是最好的方法来解决这个问题呢?

4 个答案:

答案 0 :(得分:3)

您应该尝试 WatirGrid

它不会为您完成所有工作,但它会为您提供一次启动多个测试的平台。您只需启动相同的测试3次更改目标浏览器,网格将处理它们将被执行的位置。

答案 1 :(得分:2)

除了watir-webdriver之外,为什么不需要在同一台机器上运行多个浏览器。

ie = Watir::Browser.new :ie
firefox = Watir::Browser.new :firefox
chrome = Watir::Browser.new :chrome
opera = Watir::Browser.new :opera

答案 2 :(得分:2)

如果您有多台计算机或虚拟机可供使用,答案中为Jenkins。我的方法类似于Chuck,但是我没有使用平面配置文件,而是让Jenkins通过下拉菜单提示这些值.Jenkins易于设置,可以自动将测试作业分发到任何可用的机器进行测试。

所以,我点击“谷歌搜索测试”并选择“Internet Explorer”...然后我做同样的事情并选择一个不同的浏览器。各种浏览器中的并发测试,具有HTML /电子邮件输出和良好的日志历史记录。

我也会写更多关于此的内容,但我还在度假!

以下是配置文件的示例(如果不使用Jenkins启动它们,则会分配默认值)。注意:“|| =”表示“如果为nil,则使用此值。如果不为nil,则使用当前值”。如果Jenkins还没有,我只会设置值。

ENV['BROWSER'] ||= "firefox"

ENV['ENVIRONMENT'] ||= "qa"

ENV['LIMIT'] ||= "10"

ENV['DISTRICT'] ||= "any"

ENV['TYPE'] ||= "pkg-new"

# Not necessary, but added for sanity/cleanliness:
$type = ENV['TYPE'].downcase
$browser = ENV['BROWSER'].downcase
$env = ENV['ENVIRONMENT'].downcase
$district = ENV['DISTRICT'].downcase

puts "\t** Testing #{$env.upcase} using #{$browser.upcase}... **"

詹金斯的部分非常容易 - 我觉得很容易就设置好了。您为脚本创建一个变量,无论您命名该变量,变为ENV [“VariableName”] - 并立即可用于您的脚本。

所以我有一个名为“BROWSER”的变量,它是通过下载Firefox,IE和Chrome选项设置的。用户没有空间将脚本与自由文本混淆,他们可以随时运行自定义测试。我的开发/ PM /用户爱我:D。

答案 3 :(得分:1)

如果要为测试运行完全相同的测试代码,则需要将浏览器类型外部化为环境变量或YAML文件或其他类似内容。

Ruby有一些东西可以让处理yaml文件变得非常简单(我需要写一篇关于此的博客文章),所以你可以在脚本的顶部放一些东西来调用一个方法来获取配置信息,然后设置相应的浏览器类型。

在我的testconfig.yml YAML文件中,我有:

global:
    browser: ie               #possible values: ie, ff, chrome

注意我目前没有对Opera进行测试(市场细分太小)或者它会在可能的值列表中。评论只是为了让那些可能需要编辑该文件的人生活轻松。

我在read_config文件中定义了readconfig.rb方法,该文件看起来(部分)像这样

require 'yaml'

def read_config
  config = YAML.load_file('testconfig.yml')
  $browser_type = config['global']['browser']
end

在我的测试中,有像这样的代码

require 'rubygems'
require 'readconfig'
require 'watir-webdriver'
read_config

$browser = Watir::Browser.new $browser_type.to_sym

这样我就可以在每个系统上有一个不同的配置文件(它还设置了很多其他的东西,比如当前的密码(定期更改),要使用的测试环境,以及每个环境的设置比如测试服务器的URL,数据库服务器和名称等。在开发测试时,对配置文件的简单更改让我可以运行面向给定浏览器的所有测试。或者如果我想并行运行,我可以使用他们的系统设置拥有自定义的配置文件,让他们从源代码控制中提取当前脚本,然后针对配置文件中配置的任何浏览器,服务器等运行它们。

对于任何有成就的ruby开发者来说,这可能是一件非常简单的事情,但对于我们任何一个对ruby来说都很新的人来说,尤其是从我的脚本中获取硬编码值并进入我可以控制和更改的单个地方他们。

相关问题