Windows下Ruby+Watir自动化测试的环境搭建及数据读取

 更新时间:2016年03月12日 11:59:27   作者:像风一样的自由  
这篇文章主要介绍了Windows下Ruby+Watir自动化测试的环境搭建及数据读取,Watir是一个使用Ruby实现的开源Web自动化测试框架,需要的朋友可以参考下

Watir的使用环境搭建

1、watir环境工具安装包:

1) ruby186-26.exe下载地址:http://files.rubyforge.vm.bytemark.co.uk/rubyinstaller/
2) watir-1.5.2.gem下载地址:http://rubyforge.org/frs/?group_id=104&release_id=28016
3)rubygems-update-1.3.7.gem下载地址:http://rubyforge.org/frs/?group_id=126

2、firewatir环境工具安装包:

1)步骤1中的软件包
2)Firefox2.0下载地址:http://www.hacker.cn/Get/gjrj/06102608545293311.shtml
3)firefox插件:firbug1.05,JSSh。Jssh下载地址:地址
4)Firewatir-1.1下载地址:http://rubyforge.org/frs/?group_id=104&release_id=28017

3、watir安装
1)安装ruby186-26.exe;
2)升级gem,把gem包拷贝到ruby安装目录,在命令行输入命令:gem install rubygems-update 1.3.7.gem(gem包名)。提醒:安装完后进入ruby目录:lib\ruby\gems\1.8\gems\rubygems-update-1.3.4,点击这个文件夹中的文件:setup.rb,升级gem即可
3) 安装watir包,把watir包拷贝到ruby安装目录,使用命令行进入ruby安装的目录,输入命令:gem install watir-1.5.2.gem。
4)使用命令gem list查看是否安装成功。

4、安装firewatir

1)安装firefox和firebug,Jssh插件,安装方法:打开firefox浏览器,点击“文件”/“打开”,选择插件文件名,安装即可。

2)安装firewatir,使用命令行进入ruby安装的目录,输入命令:gem install firewatir-1.1.gem

5、测试firewatir是否安装成功?

使用命令行进入firewatir安装路径下(\ruby\lib\ruby\gems\1.8\gems\firewatir-1.1),进入unittests文件夹,输入命令:ruby mozilla_all_tests.rb,如果可以正确执行程序,说明安装正确没有问题,到此可以开始自动化测试开发的旅程了。

6、在安装watir过程出现'nmake' 不是内部或外部命令,也不是可运行的程序或批处理文件。

使用命令

gem install --local watir-1.5.2.gem 

就安装成功了!


读取各种数据源中的测试参数化数据
自动化测试时常用到的技术就是参数化,不支持参数化的测试框架是痛苦的。QTP自身本来就有,但是类似ruby的watir,以及selenium等都不是天然支持的,因为这些个框架只提供了最基础的自动化驱动类库,而驱动以外的执行管理、数据管理等又是一个课题。大部分的selenium和watir类似项目用的执行框架都是单元测试的框架,天然也不支持参数化。现在只有junit4版本支持参数化,以及testNG默认支持多种参数化。如果你开始项目的话可以优先考虑兼容这些类似框架的语言来做自动化。
watir虽然本身不支持参数化,ruby的单元测试也不支持,但是参数化也要做啊,没办法只能想想变通的法子。所以单独写了一个参数化的类,来补充一下参数化功能的不足。其工作方式是提供统一的测试数据源的数据读取,在单元测试中调用这个接口,但是不指定具体的参数行,这个参数行在单独的配置文件里配置。这个就可以统一的管理每次测试执行时所取用的参数行内容了。下面的代码是用来取用各种数据源里面的测试数据的。

#encoding: utf-8 
require 'DBI' 
require 'odbc_utf8' 
 
def generate_sql(table, what=nil, where=nil) 
 what="*" unless what 
 where="1=1" unless where 
 "select %s from %s where %s" % [what, table, where] 
end 
 
def generate_hash(header, all_data) 
 t_arr = [] 
 all_data.each do | row | 
 t_hash = {} 
 for i in 0..header.size-1 do 
  t_hash[header[i]] = row[i] 
 end 
 t_arr << t_hash 
 end 
 t_arr 
end 
 
def select_hash_db(dsn,user,password,db,sql) 
 begin 
 dbh = DBI.connect(dsn, user, password) 
 dbh.do("use #{db}") 
 dbh.do("SET NAMES UTF8") if dsn.split(':')[1] == "Mysql" 
 sth = dbh.execute(sql) 
 arr = Array.new 
 sth.fetch_hash do | row | 
  arr << row 
 end 
 sth.finish 
 arr 
 rescue DBI::DatabaseError => e 
 puts "An error occurred" 
 puts "Error code: #{e.err}" 
 puts "Error message: #{e.errstr}" 
 ensure 
 dbh.disconnect if dbh 
 end 
end 
 
class Text_Adapter 
 
 def initialize(file_path, sep=" ", col_num=nil, row_num=nil) 
 
 end 
 
 def get_pars(row=nil) 
 
 end 
 
end 
 
class Mysql_Adapter 
 def initialize(ds_connector, table_name, what=nil, where=nil) 
 @sql_str = generate_sql(table_name, what, where) 
 @ds_connector = ds_connector 
 end 
 
 def get_pars(row=nil) 
 dsc_arr = @ds_connector.split("#") 
 all_data = select_hash_db(dsc_arr[0],dsc_arr[1],dsc_arr[2],dsc_arr[3],@sql_str) 
 if row.class==Fixnum 
  all_data[row] 
 else 
  all_data 
 end 
 end 
end 
 
class Excel_Adapter 
 
 def initialize(ds_connector, table_name, what=nil, where=nil) 
 @connection = WIN32OLE.new('ADODB.Connection') 
 @record_set = WIN32OLE.new('ADODB.Recordset') 
 @ds_connector = ds_connector 
 @sql_str = generate_sql(table_name, what, where) 
 end 
 
 def get_pars(row=nil) 
 t_arr = [] 
 @connection.Open(@ds_connector) 
 @record_set.Open(@sql_str, @connection) 
 @record_set.Fields.count.times do | i | 
  t_arr << @record_set.Fields.Item(i).name 
 end 
 all_data = @record_set.GetRows.transpose 
 all_data = generate_hash(t_arr, all_data) 
 if row.class==Fixnum 
  all_data[row] 
 else 
  all_data 
 end 
 end 
end 
 
 
class Parameter 
 def initialize(ds_connector, table_name, what=nil, where=nil) 
 dsc_arr = ds_connector.split("#", 2) 
 eval("@adp = #{dsc_arr[0]}.new dsc_arr[1], table_name, what, where") 
 end 
 
 def get_pars(row=nil) 
 @adp.get_pars(row) 
 end 
end 

调用方法:

par = Parameter.new(Ds_mysql_connector, 'demo') 
p par.get_pars(0) 

配置文件配置:

##链接excel中数据库的串 
EXCEL_DSN = %{Excel_Adapter#Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties=Excel 5.0;} 
EXCEL_FILE = %{D:\\1.xlsx} 
##链接mysql的串 
Ds_mysql_connector = %{Mysql_Adapter#DBI:Mysql:shoppingcart:127.0.0.1#root#password#shoppingcart} 
##指定当次运行侧事故参数的行号,从0开始 
PAR_ROW = 1 

相应的文件指向路径、ip地址、数据库名、用户名、密码等需要修改

相关文章

  • 使用ruby部署工具mina快速部署nodejs应用教程

    使用ruby部署工具mina快速部署nodejs应用教程

    这篇文章主要介绍了使用ruby部署工具mina快速部署nodejs应用教程,包含mina的配置、运行以及发布示例,需要的朋友可以参考下
    2014-09-09
  • ruby on rails中Model的关联详解

    ruby on rails中Model的关联详解

    本文给大家详细讲解了ruby on rails中model关联的几种形式,包括一对多,一对一,多对多。并给出了详细的示例,有需要的小伙伴可以参考下
    2017-07-07
  • Ruby基础知识之方法、代码段

    Ruby基础知识之方法、代码段

    这篇文章主要介绍了Ruby基础知识之方法、代码段,本文讲解了定义方法、取消方法、方法参数、代码块和闭包等知识,需要的朋友可以参考下
    2015-04-04
  • Ruby实现插入排序算法及进阶的二路插入排序代码示例

    Ruby实现插入排序算法及进阶的二路插入排序代码示例

    插入排序即是把已有的有序序列从后向前扫描插入元素,数值大的向后移动,这里我们就来看一下使用Ruby实现插入排序算法及进阶的二路插入排序代码示例
    2016-06-06
  • ruby实现修改ubuntu下的hosts

    ruby实现修改ubuntu下的hosts

    本文给大家分享的是通过ruby获取github上的hosts文件内容,修改到本地Ubuntu中,十分的实用,具体你懂得,有需要的小伙伴可以参考下。
    2015-06-06
  • Ruby操作CSV格式数据方法详解

    Ruby操作CSV格式数据方法详解

    这篇文章主要介绍了Ruby操作CSV格式数据方法,包括CSV格式文件读写,类型转换等操作,需要的朋友可以参考下
    2022-04-04
  • Ruby实现的图片滤镜算法代码

    Ruby实现的图片滤镜算法代码

    本文给大家分享的是使用ruby实现的几种图片滤镜的算法,包括灰度、二值、底片、浮雕。非常的简单实用,有需要的小伙伴可以参考下
    2017-01-01
  • Ruby的面向对象编程的基础教程

    Ruby的面向对象编程的基础教程

    这篇文章主要介绍了Ruby的面向对象编程的基础教程,包括Ruby中各种有关类和对象的基础知识,需要的朋友可以参考下
    2015-04-04
  • Ruby中区分运行来源的方法

    Ruby中区分运行来源的方法

    这篇文章主要介绍了Ruby中区分运行来源的方法,本文讲解的是类似Python中的if __name__ == '__main__':效果,其实Ruby中也有类似语法,需要的朋友可以参考下
    2015-01-01
  • Ruby入门介绍

    Ruby入门介绍

    Ruby入门介绍...
    2007-10-10

最新评论