qtp 导入excel文件 读取excel文件参数化
时间:2011-05-21 来源:爱测试的猫咪
参数化种类:数据表、环境变量、随机数、外部数据参数化
1.数据表(data table)方式参数化
a、 file-->settings-->run下data table iterations中设置控制的是数据表中global里数据的运行方式;global是全局的!当运行方式设置为运行全部或多行时,运行几行数据“程 序”就要回放几次!!不能重新设置!!
b、edit-->action-->action call properties-->run下data table iterations中设置控制的是数据表中该action里数据的运行方式;local 是局部的!当运行方式设置为运行全部或多行时,运行几行数据“该action”就要回放几次!!
进一步说明:
a、 当global有多行数据file-->settings-->run On all Rows ;action有多行数据action call property->Run On all Rows 程序每次运行时,action中的每行都要执行一次
b、 当global 有多行数据file-->settings-->run On all Rows ;action有多条数据,action call property->Run one iteration only 而且global的行数>action的行数,当action执行到最后一行后,不管此时global 的行数为几,下次回放时action都执行最后一行! 如果global的行数<action的行数,action就执行不到最后一行
c、action call property->Run from rows to rows,就结合上面所说可以理解
d、当同一个action中有多个参数时,且action call property->Run On all Rows, 这个时候每个参数的数据个数需要相等
2.随机数(random)参数化
a、可以指定随机数的范围
b、可以为该随机数指定名称,同时需要指定该随机参数产生新随机数的方式。这种情况下该随机数可以在别处使用。
产生新随机数的方式:
a、for each action iteration 迭代运行相同的action随机数不变化,运行不同action才重新产生一次随机数
在一个action保持不变
b、for each test iteration 在每一个测试运行的完整过程,随机数保持不变。重复执行该测试的时候随机数变化,例如在data table设置的global参数执行循环情况下。
在一次系统迭代保存不变
c、once per entire test run在整个测试中随机数保持不变,相当于只产生一次随机数
在整个测试中保持不变
3.环境变量(environment)参数化
a、环境变量的来源有两种:内部环境变量和用户自定义环境变量。内部环境变量是QTP默认定义的一组变量,包括一些系统信息、项目信息等,例如:testdir、OS等信息。用户定义的环境变量需要用户自己定义变量名和值,支持从外部导入,格式为XML文件。
b、环境变量做参数有一定局限性,它对数据操作没有数据表灵活,环境变量用的最多的还是数据的共享
c、环境变量做参数时,每个参数值都需要指定,而且不能批量生成,所以它有一定的应用场景:当一个test中的不同action需要同样一个参数,用环境变量去参数化常量是个很好的方法;其次就是不同的test需要用到同样的参数时,用环境变量可以很好解决这个问题
4.外部数据源实现参数化
利用外部数据驱动脚本的运行,这是经常用到的方法,这样可以很方便的组织测试数据。相对前三种方法,这种方式数据的读取、控制稍有些麻烦。下面以常见的几种方式进行说明。
a、数据文件以excel格式组织
用Excel组织测试数据是最常用的了。此种驱动可以采用两种方式,将数据Import到DataTab中或是利用com来操纵Excel文件。下面给出这两种方式的示例代码。(输入flight用户名和密码)
方式一、导入到DataTable中
'获得数据文件路径,并将数据文件导入到DataTable运行表中
DataStr= "d:\data.xls"
DataTable.AddSheet("TestData")
DataTable.ImportSheet DataStr,"Sheet1","TestData"
wait 1
'输入用户名和密码
For i=1 to DataTable.GetSheet("TestData").GetRowCount
systemutil.Run "D:\Program Files\QuickTest Professional\samples\flight\app\flight4b.exe"
DataTable.SetCurrentRow i '把i设置为当前执行行
UserName=DataTable.Value("UserName","TestData")
PassWord=DataTable.Value("PassWord","TestData")
Dialog("Login").WinEdit("Agent Name:").Set UserName
Dialog("Login").WinEdit("Password:").SetSecure PassWord
wait 1
Dialog("Login").WinButton("Cancel").Click
Next
方式二、利用com操纵Excel
DataStr= "d:\data.xls"
Set ExlObj=CreateObject("Excel.Application")
ExlObj.Visible = false' 设置为true的情况,文档会打开
ExlObj.DisplayAlerts = false
Set book=ExlObj.Workbooks.Open(DataStr)
Set sheet=book.Worksheets("Sheet1")
For i=2 to sheet.usedrange.rows.count
systemutil.Run "D:\Program Files\QuickTest Professional\samples\flight\app\flight4b.exe"
UserName=ExlObj.WorkSheets("Sheet1").Cells(i,1) '或者UserName=sheet.Cells(i,1)
PassWord=ExlObj.WorkSheets("Sheet1").Cells(i,2) '或者PassWord=sheet.Cells(i,2)
Dialog("Login").WinEdit("Agent Name:").Set UserName
Dialog("Login").WinEdit("Password:").SetSecure PassWord
wait 2
Dialog("Login").WinButton("Cancel").Click
Next
ExlObj.Quit
Set ExlObj = nothing
b、数据文件以txt格式组织
Const ForReading=1TFilePath= "d:\data.txt"
Set Fso3 = CreateObject("Scripting.FileSystemObject")
Set DataFile= Fso3.OpenTextFile(TFilePath,ForReading,False)
DataFile.SkipLine
Do while DataFile.AtEndOfLine<>true
systemutil.Run "D:\Program Files\QuickTest Professional\samples\flight\app\flight4b.exe"
ReadString = DataFile.ReadLine
DataStr=split(ReadString,",")
Dialog("Login").WinEdit("Agent Name:").Set DataStr(0)
Dialog("Login").WinEdit("Password:").SetSecure DataStr(0)
wait 2
Dialog("Login").WinButton("Cancel").Click
loop
DataFile.close
Set Fso3=Nothing
c、数据文件以数据库组织,下面代码是用Access做的,其他类型数据库类似
strDB="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\data.mdb;Persist Security Info=False"
strTableName="data"
Set Conn=createobject("adodb.connection")
Set Rst=createobject("adodb.recordset")
Conn.open strDB
Rst.open "select * from "+strTableName,Conn,2,2
Dim strTest(1)
Rst.MoveFirst
Do while not Rst.eof
systemutil.Run "D:\Program Files\QuickTest Professional\samples\flight\app\flight4b.exe"
strTest(0)=trim(cstr(Rst.fields(1)))
strTest(1)=trim(cstr(Rst.fields(2)))
Dialog("Login").WinEdit("Agent Name:").Set strTest(0)
Dialog("Login").WinEdit("Password:").SetSecure strTest(1)
Rst.MoveNext
wait 2
Dialog("Login").WinButton("Cancel").Click
Loop
Rst.close
Set Conn=nothing
d、数据文件以xml格式组织
Dim xmlDoc 'As DOMDocument需要引用xml对象
set xmlDoc=CreateObject("microsoft.xmldom")
xmlDoc.load("d:\testdata.xml")
Set Root=xmlDoc.documentElement
For i = 0 To Root.childNodes.Length-1
systemutil.Run "D:\Program Files\QuickTest Professional\samples\flight\app\flight4b.exe"
Set TestCases = Root.childNodes.Item(i)
For j = 0 To TestCases.childNodes.Length-1
Set TestCase = TestCases.childNodes.Item(j)
If cstr(TestCase.nodeName)="UserName" Then
Dialog("Login").WinEdit("Agent Name:").Set TestCase.text
end if
If cstr(TestCase.nodeName)="PassWord" Then
Dialog("Login").WinEdit("Password:").SetSecure TestCase.text
End If
Next
wait 2
Dialog("Login").WinButton("Cancel").Click
Next
Set root=nothing
Set xml=nothing