自動化測試時常用到的技術就是引數化,不支援引數化的測試框架是痛苦的。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]
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]
endt_arr << t_hash
endt_arr
enddef select_hash_db(dsn,user,password,db,sql)
begin
dbh = dbi.connect(dsn, user, password)
dbh.do("use #")
dbh.do("set names utf8") if dsn.split(':')[1] == "mysql"
sth = dbh.execute(sql)
arr = array.new
sth.fetch_hash do | row |
arr << row
endsth.finish
arrrescue dbi::databaseerror => e
puts "an error occurred"
puts "error code: #"
puts "error message: #"
ensure
dbh.disconnect if dbh
endendclass text_adapter
def initialize(file_path, sep=" ", col_num=nil, row_num=nil)
enddef 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
enddef 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
endend
endclass 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)
enddef 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
endall_data = @record_set.getrows.transpose
all_data = generate_hash(t_arr, all_data)
if row.class==fixnum
all_data[row]
else
all_data
endend
endclass parameter
def initialize(ds_connector, table_name, what=nil, where=nil)
dsc_arr = ds_connector.split("#", 2)
eval("@adp = #.new dsc_arr[1], table_name, what, where")
enddef 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_file = %
##鏈結mysql的串
ds_mysql_connector = %
##指定當次執行側事故引數的行號,從0開始
par_row = 1
相應的檔案指向路徑、ip位址、資料庫名、使用者名稱、密碼等需要修改
WPF 繫結各種資料來源之Datatable
一 binding是wpf的核心,wpf的資料來源有以下幾種 1 ado.net中的datatable 2 xml資料來源 3 object資料來源 4 元素控制項屬性 二 wpf繫結各種資料來源索引 wpf 繫結各種資料來源之 datatable wpf 繫結各種資料來源之 object 資料來源...
使用FDO API連線到各種資料來源
map 3d可以通過fdo技術連線到各種資料來源,包括shp檔案,sdf檔案,mysql,sql server spatial,oracle等等。當然了,連線到不同資料來源肯定有不同的引數,或者理解成連線字串的組成部分。那這些引數都是什麼呢?我們可以通過下面一段 來深入理解這個引數 閒話不多少,直接...
使用FDO API連線到各種資料來源
map 3d可以通過fdo技術連線到各種資料來源,包括shp檔案,sdf檔案,mysql,sql server spatial,oracle等等。當然了,連線到不同資料來源肯定有不同的引數,或者理解成連線字串的組成部分。那這些引數都是什麼呢?我們可以通過下面一段 來深入理解這個引數 閒話不多少,直接...