黄瓜硒网格

sir*_*kvg 2 ruby selenium-grid cucumber watir-webdriver

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

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

我的目标是同时在多个虚拟机上运行测试。我缺少需要配置测试以并行运行的部分。网络上有一些有关网格设置的示例,因为我使用的框架与我的场景无关。

提前致谢

con*_*sqa 6

我能够通过将Jenkins与Selenium Grid结合使用来实现...为什么选择Jenkins?a)Jenkins是一个构建工具,默认情况下被构建为运行并行作业。我利用这种能力将测试并行发送到Selenium Grid,从那时起Grid便开始管理流程。b)Jenkins是许多开发构建过程的一部分。开发人员可以致电您的QA专家,以在他们提交/构建时启动测试。c)Jenkins提供了一个不错的UI,可以查看测试的通过/失败(以及发送失败的电子邮件通知),并且d)Jenkins有一个很棒的Cucumber报告插件。

您可以避免使用詹金斯(Jenkins),但需要将黄瓜特征与网格并行发送。如果您只是运行黄瓜,它将把作业种到网格中,但是它们将按顺序运行。您将需要一些东西来启动每个异步功能。

以下是我的完整设置。詹金斯(Jenkins)在这里基本上用于启动多个/同时黄瓜工作。详细信息如下:

网格设置

我有10个虚拟机。我以VM1为主要对象。这是一个Windows服务器盒,因此我将硒网格独立放置在上面,并写了一个批处理文件,如下所示:

@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
Run Code Online (Sandbox Code Playgroud)

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

在每个其他VM上,我通过向VM1(hub)注册它们使它们成为网格的一部分:

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
Run Code Online (Sandbox Code Playgroud)

黄瓜设置

在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
Run Code Online (Sandbox Code Playgroud)

网格配置

然后我添加:

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
Run Code Online (Sandbox Code Playgroud)

现在,您可以传递一个参数,例如:Cucumber Feature / login.feature BROWSER = firefox ENV = int ,它将把所有工作都移植到Grid HUB中-它将通过浏览器支持将它传递给它所连接的Grid NODES。将login.feature的测试发送到与Firefox兼容的节点-可能不是您的所有节点都具有Firefox,如果它们都这样做,则它将去往任何一个。

此时,您一次只能获得一份工作。那么如何运行更多呢?

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

我是怎么做到的...

詹金斯

Jenkins用于构建/部署代码-但就我而言,我使用它来触发质量检查作业。Jenkins是一个Java JAR,您可以运行...即java jenkins.jar它在某个端口上启动本地UI,您可以开始添加作业。

从高层次

我建立了詹金斯(Jenkins)职位,并有一个父职位负责所有工作-将它们发送到Grid。然后,Selenium Grid Hub将管理作业的流程。

我希望能够启动单个功能测试,浏览器的单个功能测试以及浏览器的所有测试。为此,我从浏览器开始为每个功能进行单独的工作。

细节

在Jenkins中,我创建了“ A New Job ”并选择“ Free style software component ”,然后用“ [我的功能名称] [浏览器名称]”填写说明,即通过IE登录测试

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

bundle exec cucumber BROWSER=ie ENVI=int features/login.feature --format json -o login-results/login.json
Run Code Online (Sandbox Code Playgroud)

从--format开始的东西,都利用了Jenkins的Cucumber Reports插件。它使这些外观漂亮的图形驱动报告能够通过/失败的功能测试。您不需要它,它是可选的。

如果您“构建” Jenkins作业,它将执行该Windows批处理文件,并执行以下操作:

  • 开始工作
  • 运行Cucumber命令以使用特定的浏览器(在这种情况下为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
Run Code Online (Sandbox Code Playgroud)

要么

bundle exec cucumber BROWSER=ff ENVI=int features/registration.feature --format json -o registration/registrationff.json
Run Code Online (Sandbox Code Playgroud)

最后一个是注册测试的副本,只是调用了另一个浏览器。
默认情况下,Jenkins限制了您可以同时运行的作业数量。我认为是10。您可以在Jenkins配置中更改它。我将我的年龄改为40。

因此,现在,您可以单击您的第一个Jenkins作业: 通过IE登录测试 ,然后单击BUILD

开始时,在第二项工作上单击“构建”: 通过IE进行注册测试

和其他工作一样...

Jenkins将并行启动每个作业,将它们种植到Grid HUB,后者将作业发送到您的相应节点!全部并行。 默认情况下,Jenkins将作业限制为5或10个并行作业。您可以更改它。根据我的需要,我将我的值修改为25到40。

詹金斯还将使用通过/失败来更新用户界面,并在每个作业的日志中提供失败的详细信息。您可以看到失败的历史记录...并且另一个Jenkins存储库(即开发存储库)可以对您的存储库进行剩余调用,以在构建它们时自动触发这些测试。

从一项工作启动所有测试

而不是手动运行您的单个作业,您可以构建父作业。在Jenkins中,父作业将是一个相同类型的“ 自由样式软件组件 ”的“ 作业” 您会走到最底端,并且应该有一个名为“ Build Other Projects ”的字段。在该字段中,您可以放置​​每个部署项目:登录,注册等。

现在,当您“构建”此父作业时,您会看到Jenkins同时启动所有作业/项目。基本上,整个测试集可以一键开始-所有测试都发送到Selenium Grid,然后由Selenium Grid管理流程。

小组测试

在Jenkins中,我为测试创建选项卡... IE测试,FF测试,Chrome测试等。在每个选项卡中,我都放置了适当的功能。

然后,我创建一个新的上级工作以启动所有类型的工作,例如:所有IE测试,所有FF测试等。

结论

如果愿意,您可以避免使用黄瓜。您只需要一些可以并行启动的工作,对我来说,我就是使用詹金斯来完成的。您可以使用运行异步作业的脚本(开始测试)。

希望张贴的内容对您的需求有用。

我已经在我的站点上记录了此文件,以及一些詹金斯流的图片...

网址

我的有关设置黄瓜和硒网格的教程:http : //sdet.us/selenium-grid-with-watir-and-cucumber-browser-automation/

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