QTP参数化.docx
- 文档编号:5911123
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:6
- 大小:18.18KB
QTP参数化.docx
《QTP参数化.docx》由会员分享,可在线阅读,更多相关《QTP参数化.docx(6页珍藏版)》请在冰豆网上搜索。
QTP参数化
QTP参数化
方法一、DataTable方法
这是QTP提供的一种方法,也是最容易实现参数化的一种方式。
QTP针对DataTable对象提供了很多方法,可以对DataTable进行灵活的操作。
DataTable分为Global和Local两种,Global所有的Action都可以用,而Local就是只能Action自己用。
通过DataTable做参数化最直接的方法就是在Keyword
View视图下通过选项进行,这样即方便又减少出错的几率。
单击要参数化项目的value列,选择出现的箭头弹出Value
ConfigurationOption对话框,在这里可以很方便的进行参数化。
Parameters选择数据来源类型。
下拉列表选择DataTable后,选择所要使用的数据表Global还是local,最后选择name参数取自哪列,点击确定后即可完成参数化过程。
代码如下:
Dialog("Login").WinEdit("AgentName:
").Set
DataTable("user",dtGlobalSheet)
这是最简单最直接的方式。
用这种方式需要注意,在File---Seting---Run需要做相应设置,否则运行结果很容易出错,使实际取到的参数值和预期的不一样或是循环不正确的错误。
最好的方式是通过写语句来控制迭代过程中的取值。
在脚本开发过程中,这种方式是最常用的。
类似如下代码:
Fori=0toDataTable.GetCurrentRow Dialog("Login").WinEdit("AgentName:
").SetDataTable("user",dtGlobalSheet) DataTable.SetNextRowNext
关于DataTableiterations的问题:
a、file-->settings-->run下data
table
iterations中设置控制的是数据表中global里数据的运行方式;global是全局的!
当运行方式设置为运行全部或多行时,运行几行数据“程序”就要回放几次!
!
不能重新设置!
!
b、edit-->action-->actioncall
properties-->run下datatable
iterations中设置控制的是数据表中该action里数据的运行方式;local
是局部的!
当运行方式设置为运行全部或多行时,运行几行数据“该action”就要回放几次!
!
进一步说明:
当global有多行数据file-->settings-->run
OnallRows;action有多行数据actioncallproperty->RunOn
allRows程序每次运行时,action中的每行都要执行一次
当global
有多行数据file-->settings-->runOnall
Rows;action有多条数据,actioncall
property->Runoneiterationonly
而且global的行数>action的行数,当action执行到最后一行后,不管此时global
的行数为几,下次回放时action都执行最后一行!
如果global的行数<action的行数,action就执行不到最后一行
actioncallproperty->Runfromrowsto
rows,就结合上面所说可以理解
当同一个action中有多个参数时,且actioncallproperty->RunOn
allRows,这个时候每个参数的数据个数需要相等
方法二、环境变量实现参数化
Environment
对象提供对环境变量的访问。
环境变量的来源有两种方式:
内部环境变量和用户定义的环境变量,其中后者支持从外部导入,格式为XML文件。
用环境变量做参数化有一定的局限性,因为环境变量对数据的操作没有方法一灵活,所以环境变量用的最多还是数据的共享。
在此暂作为一种方式来学习,灵活运用就好。
首先说用户定义的环境变量,需要自己定义变量名和值。
定义好后就可以用这些变量去参数化脚本中的常量。
Dialog("Login").WinEdit("AgentName:
").Set
Environment("test3")
这样做参数时,每个参数值都需要指定,而且不能批量的生成。
所以它有一定的应用场景:
当一个Test中的不同Action需要同样一个参数,用环境变量去参数化常量是很好的一种方式;其次就是不同的Test需要用到同样的参数时,用环境变量可以很好的解决这个问题。
其次说内部环境变量。
它是QTP默认定义的一组变量,包括一些系统信息、项目信息等。
目前用到最多的是TestDir,利用这个可以实现一个相对目录的目的。
具体应用,在做一个数据驱动的脚本时,将数据文件放到脚本文件夹中,然后利用Environment("TestDir")+FileName导入数据文件。
这样可以很方便的移植,而不需要考虑将数据文件放到具体目录下。
方法三、外部数据源实现参数化
利用外部数据驱动脚本的运行,这是经常用到的方法,这样可以很方便的组织测试数据。
相对前两种方法,这种方式数据的读取、控制稍有些麻烦。
下面以常见的几种方式进行说明。
1.数据文件以Excel组织
用Excel组织测试数据是最常用的了。
此种驱动可以采用两种方式,将数据Import到DataTab中或是利用com来操纵Excel文件。
方式1、导入到DataTable中
DataStr=Environment("TestDir")&"\Login.xls"DataTable.AddSheet("Login")
DataTable.ImportSheetDataStr,"Sheet1","Login"rowCount1=DataTable.GetSheet("Login").GetRowCount
Fori=1torowCount1
datatable.SetCurrentRow(i)
user=DataTable.Value("user","Login")
pwd=DataTable.Value("pwd","Login")
Dialog("Login").WinEdit("AgentName:
").Setuser
Dialog("Login").WinEdit("Password:
").SetSecurepwd
Next
Dialog("Login").WinButton("OK").Click
Window("FlightReservation").WinMenu("Menu").Select"File;Exit"
注意:
QTP支持xls后缀的excel文档,不支持xlsx后缀的
方式2、利用com操纵Excel
setexcel=createobject("excel.application")
excel.Visible=true
excel.DisplayAlerts=false'VBA如果宏运行时micresoftexcel显示特定的警告和消息,则该值为true,bool类型,可读写。
Setbook=excel.Workbooks.Open(DataStr)
Setsheet=book.Worksheets("Sheet1")count1=sheet.usedrange.rows.count'VBAVBofApplications是VB的一种宏语言
Fori=2tocount1
user=excel.Worksheets("Sheet1").Cells(i,1)'获取excel单元格中的内容
pwd=excel.Worksheets("Sheet1").Cells(i,2)
Dialog("Login").WinEdit("AgentName:
").Setuser
Dialog("Login").WinEdit("Password:
").SetSecurepwdNext
excel.Quit
Setexcel=nothing
2.数据文件以txt组织
ConstForReading=1'以只读方式打开文件
TFilePath=Environment("TestDir")&"\Login.txt"SetFso=CreateObject("Scripting.FileSystemObject")
SetDataFile=Fso.OpenTextFile(TFilePath,ForReading,False)DataFile.SkipLine'在读取TextStream文件时跳过下一行。
如果读的文件没有打开,则产生一个错误。
DowhileDataFile.AtEndOfLine<>trueReadString=DataFile.ReadLine'从TextStream文件中读取一整行字符,并以字符串返回结果。
DataStr=split(ReadString,",")'用于把一个ReadString用逗号分割成字符串数组。
Dialog("Login").WinEdit("AgentName:
").SetDataStr(0)'访问字符串数组的第一个字符
Dialog("Login").WinEdit("Password:
").SetSecureDataStr
(1)loopDataFile.closeSetFso=Nothing
3.数据文件以数据库组织
用access创建数据库Login,并创建表Login,字段分别为user,pwd,表创建时自动产生主键ID
strDB="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:
\ProgramFiles\HP\QuickTestProfessional\Tests\Flight\FlightLogin\Login.mdb;"_
&"PersistSecurityInfo=False"
strTableName="Login"
SetConn=createobject("adodb.connection")
SetRst=createobject("adodb.recordset")Conn.openstrDB
Rst.open"select*from"+strTableName,Conn,2,2DimstrTest
(1)'声明一个长度为2的数组
Rst.MoveFirst
DowhilenotRst.eofstrTest(0)=trim(cstr(Rst.fields
(1)))'cstr把括号中的内容转换为字符串
strTest
(1)=trim(cstr(Rst.fields
(2)))
Dialog("Login").WinEdit("AgentName:
").SetstrTest(0)
Dialog("Login").WinEdit("Password:
").SetSecurestrTest
(1)Rst.MoveNext
LoopRst.close
SetConn=nothing
4.数据文件以XML组织
DimxmlDoc'AsDOMDocument需要引用xml对象setxmldoc=CreateObject("microsoft.xmldom")
xmldoc.load(Environment("TestDir")&"\Login.xml")SetRoot=xmldoc.documentElement'返回文档的根节点。
Fori=0ToRoot.childNodes.Length-1'检索根节点下方的子节点数
SetTestCases=Root.childNodes.Item(i)
Forj=0ToTestCases.childNodes.Length-1'检索testcase下的节点数
SetTestCase=TestCases.childNodes.Item(j)
Ifcstr(TestCase.nodeName)="user"Then
Dialog("Login").WinEdit("AgentName:
").SetTestCase.text
endif
Ifcstr(TestCase.nodeName)="pwd"Then
Dialog("Login").WinEdit("Password:
").SetSecureTestCase.text
EndIf
Next
NextSetroot=nothing
Setxml=nothing
方法四、随机数
随机数参数化相对调用外部数据实现参数化来说,简单好多,我们直接看例子吧。
。
参数的变化范围已知的情况下,脚本切换到Keyword
View视图下,点击要参数化项目的value列,Parameter选项选择RandomNumber,输入参数的取值范围,点击ok。
Window("FlightReservation").Dialog("Open
Order").WinEdit("Edit").SetRandomNumber(0,100)
以下拉框为例,随机选择下拉框中的值:
flyFrom=Window("FlightReservation").WinComboBox("FlyFrom:
").GetItemsCount
Window("FlightReservation").WinComboBox("FlyFrom:
").SelectRandomNumber(0,flyFrom-1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- QTP 参数