ruby读取各种数据源中的测试参数化数据
来源:互联网 发布:js手机页面跳转 编辑:程序博客网 时间:2024/06/05 14:33
自动化测试时常用到的技术就是参数化,不支持参数化的测试框架是痛苦的。QTP自身本来就有,但是类似ruby的watir,以及selenium等都不是天然支持的,因为这些个框架只提供了最基础的自动化驱动类库,而驱动以外的执行管理、数据管理等又是一个课题。大部分的selenium和watir类似项目用的执行框架都是单元测试的框架,天然也不支持参数化。现在只有junit4版本支持参数化,以及testNG默认支持多种参数化。如果你开始项目的话可以优先考虑兼容这些类似框架的语言来做自动化。
watir虽然本身不支持参数化,ruby的单元测试也不支持,但是参数化也要做啊,没办法只能想想变通的法子。所以单独写了一个参数化的类,来补充一下参数化功能的不足。其工作方式是提供统一的测试数据源的数据读取,在单元测试中调用这个接口,但是不指定具体的参数行,这个参数行在单独的配置文件里配置。这个就可以统一的管理每次测试执行时所取用的参数行内容了。下面的代码是用来取用各种数据源里面的测试数据的。
#encoding: utf-8require '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]enddef 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_arrenddef 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 endendclass Text_Adapter def initialize(file_path, sep=" ", col_num=nil, row_num=nil) end def get_pars(row=nil) endendclass 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 endendclass 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 endendclass 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) endend
调用方法:
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读取各种数据源中的测试参数化数据
- TestNG参数化测试之Excel读取数据
- TestNG参数化测试之Excel读取数据
- 显示数据源中的数据
- 显示数据源中的数据
- 各种数据库及其数据源配置参数
- 各种数据库及其数据源配置参数
- selenium自动化测试中,采用jxl实现参数化(从Excel中读取数据)
- 第4章 处理用户输入与显示数据------------(读取参数、读取程序名称、测试参数)
- junit4中的参数化测试
- Ruby中的TestUnit测试框架
- 使用JDBC的CachedRowSet实现将数据源中的数据读取到内存中进行离线操作
- testNG参数化之excel读取数据
- repositoryItemSearchLookUpEdit绑定数据源以及读取其中数据
- Ajax 读取 XML 文件中的数据源代码
- Druid、DBCP、C3P0、JBoss、Weblogic各种数据源配置参数对比
- Jmeter性能测试-----数据参数化方法
- TestNg参数化测试之读取csv文件
- C++中子类调用父类的有参构造函数
- bat的大数据
- WinForm开发知识汇总
- IOS单例模式(Singleton)
- POP3和SMTP的C++实现代码
- ruby读取各种数据源中的测试参数化数据
- 是否应该使用ARC
- poj 1007 DNA sorting
- Linux下如何知道文件被那个进程写
- [协议] ftp协议 RFC0959
- jquery中html()和text()方法区别
- struct sk_buff与struct socket及struct sock 结构体分析
- 学习编程的5点忌讳
- HreoWinGauge2.0组件集应用示例----旋钮指针(1)