Ruby 黄瓜硒网

Ruby 黄瓜硒网,ruby,cucumber,watir-webdriver,selenium-grid,Ruby,Cucumber,Watir Webdriver,Selenium Grid,我正在尝试设置selenium网格以实现测试的并行执行。首先,我将解释我当前的场景 我用cucumber和watir webdriver编写了全功能测试套件 我需要在多个环境中执行所有测试 我为selenium集线器和节点创建了一个设置 我可以通过hub在单个节点上运行测试 我的目标是同时在多个vm上运行测试。 我缺少一个需要配置测试以并行运行的部分。这里有一些关于web中网格设置的示例,因为我使用的是与我的场景不相关的不同框架 提前感谢看看MBUnit,因为它可以并行运行测试,这应该会有所帮助

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

  • 我用cucumber和watir webdriver编写了全功能测试套件
  • 我需要在多个环境中执行所有测试
  • 我为selenium集线器和节点创建了一个设置
  • 我可以通过hub在单个节点上运行测试
  • 我的目标是同时在多个vm上运行测试。 我缺少一个需要配置测试以并行运行的部分。这里有一些关于web中网格设置的示例,因为我使用的是与我的场景不相关的不同框架


    提前感谢

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

    我利用Jenkins和Selenium Grid实现了这一点。。。为什么是詹金斯?a) Jenkins是一个构建工具,默认情况下用于运行并行作业。我利用这种能力并行地将测试发送到Selenium网格,网格从此点开始管理流。b) Jenkins是许多开发构建过程的一部分。开发人员可以在提交/构建测试时致电QA jenkins启动测试。c) Jenkins提供了一个很好的UI来查看测试的通过/失败(以及发送失败的电子邮件通知),并且d)Jenkins有一个很棒的Cumber报告插件

    您可以避免使用Jenkins,但需要将cucumber特性与网格并行发送。如果您只运行cucumber,它会将作业农场到网格,但它们将按顺序运行。您需要一些东西来异步启动每个功能

    下面是我的全部设置。Jenkins基本上被用于启动多个/同时的黄瓜作业。详情如下:

    网格设置 我有10个虚拟机。我把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 server任务在VM重新启动时自动运行该批处理文件

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

    黄瓜架 在Cucumber中,我在features/support文件夹中设置了一个env.rb文件。这允许我在测试运行之前指定命令行参数,以及在测试停止时会发生什么。我添加了一个begin语句,该语句为使用浏览器和网格设置a值

    浏览器和环境配置 在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
    
    现在您可以传递一个参数,比如:cumber-feature/login.feature-BROWSER=firefox-ENV=int,它会将所有工作分配给Grid HUB,而Grid HUB应该通过浏览器支持将其传递给它所连接的网格节点(例如,将login.feature测试发送到与firefox兼容的节点-可能不是所有节点都有firefox,如果所有节点都有firefox,那么它将发送到其中任何一个节点。)

    在这一点上,您一次只能完成一个作业。那么如何运行多个作业呢

    您将拥有一个脚本,该脚本通过同一浏览器配置文件启动所有功能文件(或测试),以使用网格中心。如果使用脚本,则需要异步进行这些调用,因此所有功能/测试将同时发送到网格,网格将管理作业

    我是如何做到这一点的

    詹金斯 Jenkins用于构建/部署代码,但在我的例子中,我使用它来触发QA作业。Jenkins是一个Java JAR,您只需运行它…即Java Jenkins.JAR它在某个端口上启动一个本地UI,您可以开始添加作业

    从高层 我构建了Jenkins作业,并有一个运行所有作业的父作业-将它们发送到网格。然后,Selenium网格中心将管理作业流

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

    细节 在Jenkins中,我创建了“一个新作业”,并选择“自由风格软件组件”,然后用“[我的功能名称][浏览器名称]”填写说明,即通过IE进行登录测试

    在Jenkins作业的构建部分,我选择使用批处理命令。由于它是一个windows框,我选择了windows批处理命令并输入如下内容:

    bundle exec cucumber BROWSER=ie ENVI=int features/login.feature --format json -o login-results/login.json
    
    从格式开始,所有这些都是利用Jenkins的Cucumber reports插件。它在通过/失败的功能测试上生成这些漂亮的图形驱动报告。你不需要它,它是可选的

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

    • 开始工作
    • 运行cucumber命令以使用特定浏览器(即在本例中)
    • 运行该功能文件的所有测试(即login.feature可能有20个测试)
    • 所有测试都在网格中运行,网格将这些测试分为多个节点
    不过,它还没有并行运行作业

    并行运行作业 现在Jenkins可以通过网格通过功能和浏览器启动测试-我们现在终于可以并行运行作业了,我们只需要更多的作业。所以再创建一些作业…比如: 用于registration.feature的Jenkins作业和用于subscription.feature的Jenkins作业。每个作业都有自己的windows批处理命令,如:

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

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

    现在,您可以单击您的第一份Jenkins工作: 通过IE进行登录测试 然后单击“构建”

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

    同样的f
    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