2011-12-29 76 views
4

所以我在这里工作在一个网站上,我想一次运行多个浏览器测试。我的意思是它应该同时在ie,firefox和chrome上执行我的烟雾测试并报告每个浏览器的结果。我目前只用ie和rpsec和watir-webdriver进行测试,但是想为其他2个浏览器自动化。是否有任何现有的宝石(我还没有找到),如果不是,什么是解决这个问题的最好方法?通过不同的浏览器与watir-webdriver进行多个并发浏览器测试

回答

3

您应该尝试WatirGrid

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

2

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

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

它工作正常,如果你想顺序运行你的测试.. – 2011-12-29 21:11:00

+0

那么,“在同一时间”是不可能的。无论如何,“同时”意味着什么?在同一秒?毫秒?您可以打开所有浏览器,在一个浏览器中执行某些操作,在另一个浏览器中执行相同的操作。当您完成所有浏览器时,请在第一浏览器,第二个浏览器中执行其他操作...重复冲洗。 – 2011-12-30 08:22:12

+0

当人们给出的负载测试标准过于宽松时,大声笑对我来说是一个常见的重构框架。尤其是考虑到大多数网络连续发送数据,在服务器实际上可以同时获取多个请求的情况下进行设置,在开始时非常困难切分时间真的很好。但在这种情况下,我想也许他意味着让脚本并行运行,也许在多个系统或虚拟机上减少构建准备就绪之间的时间,并且可以知道测试结果。 – 2011-12-30 17:39:42

1

如果你想运行,您将需要外部化的浏览器类型测试完全相同的测试代码,无论是作为一个环境变量,或YAML文件或诸如此类。

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

在我testconfig.yml YAML文件我有:

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

注意到我目前没有测试对歌剧(细分市场太小)或者这将是可能的值的列表。评论只是为了让任何可能需要编辑该文件的人都能轻松完成。

我有这样

require 'yaml' 

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

readconfig.rb文件看起来(部分)定义的read_config方法和在我的测试顶部有这样

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

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

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

这对于任何已完成的ruby开发者来说可能都是简单的东西,但它对于我们任何人来说都很新奇,尤其是对于将硬编码的值从我的脚本中取出并放到一个可以控制和改变它们。

+0

这似乎是一个好主意,我将等待您的博客文章。 – cody 2011-12-30 16:02:59

+0

这可能是一段时间。与此同时,如果这些答案中的任何一个对你很有帮助,你都可能想要接受它。否则让我们知道我们还能做些什么来给你更好的答案。 – 2012-01-10 17:07:30

2

如果您有多台机器或虚拟机可以使用,Jenkins中的答案。我的方法与Chuck的方法类似,但是我不让Jenkins通过下拉菜单提示这些值.Jenkins很容易设置,并且可以自动将测试作业分配给任何可用的测试机器。

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

我也会写更多关于这个,但我仍然在度假!

这里是一个配置文件的例子(如果没有使用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选项的下拉菜单来设置。用户没有空间将脚本与自由文本混淆,并且他们可以随时运行自定义测试。我的开发人员/ PMs /用户爱我:D。

+0

你如何照顾让詹金斯告诉脚本使用哪种浏览器类型?它是一个命令行参数吗?或者你有不同的浏览器的脚本的多个版本,它运行适当的? – 2011-12-30 17:41:37

+0

当用户通过菜单选择一个选项或写入文本时,Jenkins会自动将其存储到一个环境变量中,该变量神奇地提供给脚本。所以,我有一个像你的平面文件,如果它是零(如果我们本地运行而不是通过Jenkins运行),则为该变量赋予一个默认值。我会将剪辑添加到我的答案中。 – 2011-12-30 18:31:34

+1

啊,是的,环境变量的魔力。这是将脚本中的这些价值观外化出来的另一种好方法,我可能最终转而采用这种方式。例如,我甚至可以更新readconfig方法来检查ENV变量,如果找到则使用该变量,否则从配置文件中获取值。那么你基本上可以选择以哪种方式来控制事物,而一个“高手”又是另一个。并感谢您在度假期间花时间与我们分享。 – 2011-12-30 19:10:22