硒网格与黄瓜

时间:2014-07-10 20:43:10

标签: ruby cucumber watir-webdriver selenium-grid

我正在尝试设置selenium网格以实现我的测试的并行执行。首先,我将解释我目前的情况。

  1. 我有一个用黄瓜写的功能齐全的测试套件,带有watir webdriver
  2. 我需要在多个环境中执行所有测试。
  3. 我为selenium hub和node
  4. 创建了一个设置
  5. 我可以通过集线器
  6. 在单个节点上运行我的测试

    我的目标是同时在多个vm上运行我的测试。 我错过了一个我需要配置我的测试并行运行的部分。有一些关于网络中网格设置的例子,因为我使用的是不同的框架,我无法与我的场景相关联。

    提前致谢

2 个答案:

答案 0 :(得分:5)

我能够通过利用Jenkins和Selenium Grid来实现这一目标......为什么Jenkins? a)Jenkins是一个构建工具,默认情况下用于运行并行作业。我利用这种能力并行发送测试到Selenium Grid,Grid从那时起管理流程。 b)Jenkins是许多开发构建过程的一部分。 Dev可以调用你的QA jenkins在他们提交/构建时启动测试。 c)Jenkins提供了一个很好的UI来查看测试的通过/失败(以及发送失败的电子邮件通知)和d)Jenkins有一个很棒的Cucumber报告插件。

你可以避开Jenkins,但是你需要将你的黄瓜特征与网格并行发送。如果您只运行黄瓜,它会将作业转移到网格,但它们将按顺序运行。你需要一些东西来启动每个功能异步。

以下是我的完整设置。詹金斯基本上被用来开始多个/同时的黄瓜工作。详情如下:

网格设置

我有10个VM。我把VM1作为我的主要。它是一个Windows服务器盒,所以我把selenium网格独立放在它上面并写了一个批处理文件,如下所示:

@echo off
“C:\[Add your Java Path Here]\java.exe” -jar “C:\[Add your Selenium Grid Jar Path]\selenium-server-standalone-2.31.0.jar” -role hub

然后使用Windows服务器任务在VM重启时自动运行该批处理文件。

在其他每个虚拟机上,我通过向VM1(集线器)注册它们使它们成为网格的一部分:

java -jar selenium-server-standalone-2.31.0.jar -role node -hub http://[the server name of your Selenium Hub]:4444/grid/register -browser browserName=chrome,maxInstances=5

黄瓜设置

在Cucumber中,我在features / support文件夹中设置了一个env.rb文件。这允许我在测试运行之前指定命令行参数,以及当它们停止时会发生什么。我添加了一个begin语句,用于设置使用浏览器的值,以及使用Grid ...

浏览器&环境配置

在env.rb文件中我添加:

def browser_name
  (ENV['BROWSER'] ||= ‘firefox’).downcase.to_sym
end

def environment
  (ENV['ENVI'] ||= ‘int’).downcase.to_sym
end

网格配置

然后我补充说:

Before do  |scenario|
  p "Starting #{scenario}"
  if environment == :int
    @browser = Watir::Browser.new(:remote, :url=>"http://[Your Selenium Grid Hub]:4444/wd/hub", :desired_capabilities=> browser_name)
   #Optional: in the case of setting your default start page @browser.goto "http://[your start page of your test site]:8080"
  elsif environment == :local
    @browser = Watir::Browser.new browser_name
    @browser.goto "http://[some other environment]:8080"
  end
end

现在你可以传递一个参数,如: cucumber feature / login.feature BROWSER = firefox ENV = int ,它会把所有工作都归咎于Grid HUB - 它应该把它传递给Grid NODES它与浏览器支持连接(即将login.feature的测试发送到firefox兼容节点 - 可能并非所有节点都有firefox,如果它们都有,那么它将转到它们中的任何一个。 )

此时,您一次只能找到一份工作。那么如何运行多一个呢?

你会有一个脚本通过相同的浏览器配置文件启动所有功能文件(或sans-Cucumber,你的测试)以使用Grid HUB。如果您使用脚本,则需要异步进行这些调用 - 因此所有功能/测试将同时发送到网格,并且网格管理作业。

我是怎么做到的......

詹金斯

Jenkins用于构建/部署代码 - 但在我的情况下,我使用它来触发QA作业。 Jenkins是一个Java JAR,你刚刚运行...即java jenkins.jar它在某个端口上启动本地UI,你可以开始添加作业。

从高层

我建立了Jenkins工作,并有一个运行所有工作的父工作 - 将它们发送到网格。然后,Selenium Grid Hub将管理作业流程。

我希望能够启动单个功能测试,浏览器的单个功能测试以及浏览器的所有测试。为此,我开始使用浏览器为每个功能创建单独的作业。

详细

在詹金斯,我创造了" 新工作"并选择" 自由风格的软件组件"然后使用" [我的功能名称] [浏览器名称]"填写说明。即通过IE 登录测试

在这个Jenkins作业的Build部分中,我选择使用BATCH命令。由于它是一个Windows框,我选择了Windows Batch命令并输入如下内容:

bundle exec cucumber BROWSER=ie ENVI=int features/login.feature --format json -o login-results/login.json

来自--format的那些东西,它们都在使用Jenkins的Cucumber报告插件。它使得通过/失败的功能测试的这些漂亮的图形驱动报告。你不需要它,它是可选的。

如果你"建立"在Jenkins作业中,它将执行该Windows批处理文件并执行以下操作:

  • 开始工作
  • 运行黄瓜命令以使用特定浏览器(在本例中为IE)
  • 运行该功能文件的所有测试(即login.feature可能有20个测试)
  • 所有测试都通过网格运行,将网格关闭到节点

但它还没有并行运行。

并行运行作业

现在Jenkins可以通过功能和浏览器,通过网格开始测试 - 我们现在可以最终并行运行作业,我们只需要更多的工作。所以创造一些工作......比如: Jenkins为registration.feature工作,jenkins为subscription.feature工作。每个人都有自己的Windows批处理命令,如:

bundle exec cucumber BROWSER=ie ENVI=int features/registration.feature --format json -o registration/registration.json

bundle exec cucumber BROWSER=ff ENVI=int features/registration.feature --format json -o registration/registrationff.json

最后一个是注册测试的副本,只是调用另一个浏览器 詹金斯默认限制你可以运行的同时作业数量。我认为它是10.你可以在Jenkins配置中更改它。我把我变成了40岁。

现在,您可以点击您的第一个Jenkins工作: 通过IE登录测试 并单击构建

开始时,点击" BUILD"在你的第二份工作: 通过IE进行注册测试

和你的其他工作一样......

Jenkins将并行开始每项工作,将它们培养到Grid HUB,Grid HUB将作业发送到相应的节点!全部并行。 默认情况下,Jenkins将作业限制为5或10个并行作业。你可以改变它。根据我的需要,我将我的修改为25到40。

Jenkins还将使用pass / fail更新UI,并在每个作业的日志中详细说明失败。您可以看到失败的历史......另一个Jenkins回购(即开发回购)可以对您的仓库进行休息调用,以便在构建时自动触发这些测试。

从一项工作中启动所有测试

而不是手动运行单个作业,您可以构建父作业。在Jenkins中,父作业将是 NEW 作业,类型相同," 自由样式软件组件。"你走到最底层,它应该有一个名为" 建立其他项目"在该字段中,您可以将每个项目用于部署:登录,注册等。

现在,当你" Build"这个父母的工作,你会看到Jenkins同时启动所有工作/项目。基本上,您可以通过一次单击开始整个测试集 - 所有测试都将发送到Selenium Grid,然后管理流程。

小组测试

在Jenkins中,我为我的测试创建标签... IE测试,FF测试,Chrome测试等。 在每个标签中我都放了相应的功能。

然后我创建一个新的父作业来启动所有类型的作业: 所有的IE测试 所有FF测试 等

结论

如果你愿意,你可以避免吃黄瓜。你需要一些东西来并行开始工作,对我来说,我用詹金斯来做这件事。您可以使用运行异步作业的脚本(开始测试。)

希望帖子中的内容对您的需求有用。

我在我的网站上记录了这些,以及Jenkins流程的一些图片......

网址

我的设置Cucumber和Selenium Grid的教程: http://sdet.us/selenium-grid-with-watir-and-cucumber-browser-automation/

我使用Jenkins设置黄瓜报告的教程: http://sdet.us/jenkins-and-cucumber-reports/

答案 1 :(得分:0)

查看MBUnit,因为它可以并行运行测试,这应该有所帮助。它只会在一个程序集中并行运行测试,并且不会跨多个程序集进行协调。