• Selenium WebDriver + Grid2 + RSpec之旅(六) ----多浏览器的并行执行


    Selenium WebDriver + Grid2 + RSpec之旅(六)

                                                 ----多浏览器的并行执行

    由于浏览器的发展,浏览器种类繁多。为了保证系统能在各种浏览器上叱咤风云,减少测试人员的测试工作量,就要保证测试脚本支持多浏览器,但是一条测试用例逐个对浏览器进行执行的话又会消耗太多的时间,下面就介绍一下多浏览器并行执行的方法。

    再回头看一下前面介绍过的测试用例脚本,会发现测试用例中的浏览器是指定的firefox,如果要测试IE,CHROME浏览器,去修改测试用例脚本?还是把脚本复制几份?方法都不是太好。我们可以将浏览器名称用一个变量来表示,通过循环来执行用例,每次循环,采用不同的浏览器就OK了,那么还有一个问题就是,这样循环的话还是串行执行,同样会消耗很多的时间,怎么解决呢? 我们通过创建多个进程来执行的话就可以实现浏览器的并行执行,并且只需要一份测试脚本,而且测试脚本中的变量不会在多个进程中出现冲突。OK,下面就让我们开始吧。还是上节讲的用例作为例子(只是做了一些修改)。

    1、在工作目录下创建一个main.rb,和Login_Page同级目录,用来作为启动用例的主文件

    2、在工作目录下创建一个public目录,和Login_Page同级目录,在public中创建文件public.rb,用来存放执行用例的公共数据(之前提到的yaml文件,用来存放测试用例的数据)

    测试代码设计

    其他文件保持不变,一下文件作了修改

    1、在main.rb中的代码如下

     1 #encoding:utf-8
     2 
     3 require 'childprocess'
     4 
     5 test_cases = Dir.glob('**/*spec')
     6 
     7 caps_flags = ['ie','firefox','chrome']
     8 
     9 process_arr = []
    10 test_cases.each do | test_file |
    11   caps_flags.each do | flag |
    12     process = ChildProcess.build("rspec.bat","-f","doc","#{test_file}")
    13     process.environment["flag"] = flag
    14     process.start
    15     process_arr << process
    16   end
    17 
    18   process_arr.each do |p|
    19     begin
    20       p.poll_for_exit(6000)
    21     rescue ChildProcess::TimeoutError
    22       p.stop
    23     end
    24   end
    25 end

    2、在public.rb中的代码如下

     1 #encoding:utf-8
     2 require 'childprocess'
     3 
     4 $huburl = 'http://localhost:4444/wd/hub'
     5 
     6 $browser_driver = ENV['flag']
     7 case $browser_driver
     8   when "firefox" then
     9     $caps = Selenium::WebDriver::Remote::Capabilities.firefox
    10   when "chrome" then
    11     $caps = Selenium::WebDriver::Remote::Capabilities.chrome
    12   else
    13     $caps = Selenium::WebDriver::Remote::Capabilities.ie
    14 end

    3、login_cnblogs_spec.rb的代码做了一些修改

     1 #encoding:utf-8
     2 require 'selenium-webdriver'
     3 require 'rspec'
     4 require 'yaml'
     5 
     6 require File.dirname(__FILE__)+'/../../public/public'
     7 require File.dirname(__FILE__)+'/../tool/login_dialog'
     8 require File.dirname(__FILE__)+'/../action/login_page'
     9 
    10 describe 'cnblogs main login page' do
    11     include Login_Dialog
    12     
    13     before (:all) do
    14         @data = YAML.load (File.open(File.dirname(__FILE__)+'/../config/login_data.yml'))
    15     end
    16     
    17     before (:each) do
    18         @dr = Selenium::WebDriver.for(:remote,:url => $huburl,:desired_capabilities => $caps)
    19         @dr.navigate.to @data["data"]["mainpage"]["url"]
    20         @dr.manage.window.maximize()
    21         @driver = Login_Page.new(@dr)
    22     end
    23     
    24     after (:each) do
    25         @dr.quit
    26     end
    27     context 'input the wrong passwd' do
    28         it 'login failed,and return "用户名或密码错误"' do
    29             @driver.login(@data["data"]["logindata"]["wrong"]["username"],@data["data"]["logindata"]["wrong"]["password"])
    30             expect(@driver.message).to eql (@data["data"]["logindata"]["wrong"]["message"])
    31         end
    32     end
    33 end

    4、同时测试数据文件login_data.yml也有了小改动

    1 data:
    2     mainpage:
    3         url: http://passport.cnblogs.com/login.aspx
    4         title: 用户登录 - 博客园用户中心
    5     logindata:
    6         wrong:
    7             username: gqou
    8             password: 123456
    9             message: 用户名或密码错误

    OK,现在通过DOS窗口执行一下主文件 ruby main.rb就可以看到运行结果了(记得要启动hub和node服务哦!)。祝你顺利!

    由上图可以看出,用例是在并行执行。

    本章节涉及到一些技术细节,由于个人能力有限,恐怕误导大家,请见谅!如果深入了解请访问https://github.com/jarib/childprocess

    到此为止,Selenium WebDriver + Grid2 + RSpec之旅告一个小段落了。在这里非常感谢我的同组同事庞大师(Genvia)的悉心指导!谢谢大家阅读!

  • 相关阅读:
    Xcode7中你一定要知道的炸裂调试神技【转载】
    让Category支持添加属性与成员变量【转载】
    KVC与KVO
    时间与日期处理【转载】
    iOS 字符属性NSAttributedString描述【转载】
    搜索引擎-倒排索引基础知识
    sql server命令行
    复习索引
    【藏】使用Entity Framework时要注意的一些性能问题
    windows 8.1 安装 .Net Framework 3.5
  • 原文地址:https://www.cnblogs.com/ouguangqian/p/Grid_6.html
Copyright © 2020-2023  润新知