Windows下Ruby+Watir自动化测试的环境搭建及数据读取
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地址、数据库名、用户名、密码等需要修改
上一篇: Java自学-类和对象 传参