QTP参数化

本文详细介绍了QTP参数化的四种主要方式:数据表、随机数、环境变量和外部数据源,并通过代码示例展示了如何使用Excel、TXT、数据库和XML格式的数据文件驱动脚本运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QTP参数化

参数化种类:数据表、环境变量、随机数、外部数据参数化
1.
数据表(data table)方式参数化
a
file-->settings-->rundata table iterations中设置控制的是数据表中global里数据的运行方式;global是全局的!当运行方式设置为运行全部或多行时,运行几行数据程序就要回放几次!!不能重新设置!!
b
edit-->action-->action call properties-->rundata 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默认定义的一组变量,包括一些系统信息、项目信息等,例如:testdirOS等信息。用户定义的环境变量需要用户自己定义变量名和值,支持从外部导入,格式为XML文件。
b
、环境变量做参数有一定局限性,它对数据操作没有数据表灵活,环境变量用的最多的还是数据的共享
c
、环境变量做参数时,每个参数值都需要指定,而且不能批量生成,所以它有一定的应用场景:当一个test中的不同action需要同样一个参数,用环境变量去参数化常量是个很好的方法;其次就是不同的test需要用到同样的参数时,用环境变量可以很好解决这个问题

4.外部数据源实现参数化
利用外部数据驱动脚本的运行,这是经常用到的方法,这样可以很方便的组织测试数据。相对前三种方法,这种方式数据的读取、控制稍有些麻烦。下面以常见的几种方式进行说明。
a
、数据文件以excel格式组织
Excel组织测试数据是最常用的了。此种驱动可以采用两种方式,将数据ImportDataTab中或是利用com来操纵Excel文件。下面给出这两种方式的示例代码。(输入flight用户名和密码)

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="图片_x0020_1" o:spid="_x0000_i1028" type="#_x0000_t75" alt="QTP参数化 - 杰哥 - 杰哥在线" style='width:270.75pt;height:273pt;visibility:visible; mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.jpg" o:title="QTP参数化 - 杰哥 - 杰哥在线" /> </v:shape><![endif]-->

方式一、导入到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格式组织

<!--[if gte vml 1]><v:shape id="图片_x0020_2" o:spid="_x0000_i1027" type="#_x0000_t75" alt="QTP参数化 - 杰哥 - 杰哥在线" style='width:300pt;height:301.5pt;visibility:visible; mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image002.jpg" o:title="QTP参数化 - 杰哥 - 杰哥在线" /> </v:shape><![endif]-->

Const ForReading=1
TFilePath= "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做的,其他类型数据库类似

<!--[if gte vml 1]><v:shape id="图片_x0020_3" o:spid="_x0000_i1026" type="#_x0000_t75" alt="QTP参数化 - 杰哥 - 杰哥在线" style='width:234pt;height:188.25pt;visibility:visible; mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image003.jpg" o:title="QTP参数化 - 杰哥 - 杰哥在线" /> </v:shape><![endif]-->

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格式组织

<!--[if gte vml 1]><v:shape id="图片_x0020_4" o:spid="_x0000_i1025" type="#_x0000_t75" alt="QTP参数化 - 杰哥 - 杰哥在线" style='width:276pt; height:225pt;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image004.jpg" o:title="QTP参数化 - 杰哥 - 杰哥在线" /> </v:shape><![endif]-->



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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值