QTP非典型操作集.docx
《QTP非典型操作集.docx》由会员分享,可在线阅读,更多相关《QTP非典型操作集.docx(59页珍藏版)》请在冰豆网上搜索。
QTP非典型操作集
关键字驱动原理及特点
1.关键字驱动测试是数据驱动测试的一种改进类型
2.主要关键字包括三类:
被操作对象(Item)、操作(Operation)和值(value),用面向对象形式可将其表现为Item.Operation(Value)
3.将测试逻辑按照这些关键字进行分解,形成数据文件。
4.用关键字的形式将测试逻辑封装在数据文件中,测试工具只要能够解释这些关键字即可对其应用自动化
关于onerrorgoto0
OnErrorGoTo0
表示禁止当前过程中任何已启动的错误处理程序。
OnErrorResumeNext
说明当一个运行时错误发生时,控件转到紧接着发生错误的语句之后的语句,并在此继续运行。
访问对象时要使用这种形式而不使用OnErrorGoTo。
OnErrorGoToline
启动错误处理程序,且该例程从必要的line参数中指定的line开始。
line参数可以是任何行标签或行号。
如果发生一个运行时错误,则控件会跳到line,激活错误处理程序。
指定的line必须在一个过程中,这个过程与OnError语句相同;否则会发生编译时间错误。
以上MSDN上的解释
一般情况下,如果在对我们创建的对象或控件进行错误捕捉,需要使用OnErrorResumeNext,然后在判断它的Err.Number,根据错误类型来做相应的处理。
操作数据库
为了更精确地跟踪数据,要用RecordSet组件创建包含数据的游标,游标就是储存在内存中的数据。
rs=Server.CreateObject("ADODB.RecordSet")
rs.Open(sqlStr,conn,1,A)
注:
A=1读取
A=3新增、修改、删除
在RecordSet组件中,常用的属性和方法有:
rs.Fields.Count:
RecordSet对象的字段数。
rs(i).Name:
第i个字段的名称,i为0至rs.Fields.Count-1
rs(i):
第i个字段的数据,i为0至rs.Fields.Count-1
rs("字段名"):
指定字段的数据。
rs.Record.Count:
游标中的数据记录总数。
rs.EOF:
是否最后一条记录。
rs.MoveFirst:
指向第一条记录。
rs.MoveLast:
指向最后一条记录。
rs.MovePrev:
指向上一条记录。
rs.MoveNext:
指向下一条记录。
rs.GetRows:
将数据放入数组中。
rs.Properties.Count:
ADO的ResultSet或Connection的属性个数。
rs.Properties(item).Name:
ADO的ResultSet或Connection的名称。
rs.Properties:
ADO的ResultSet或Connection的值。
rs.close():
关闭连接。
关于动态数组的定义
做了一个试验
ReDimX(2,2)
b=1
a=3
ReDimX(a,b)
当有preserve时,只能更改最后一维的大小
当没有preserve时,a,b的值都可以更改!
QTP操作数据库方法
1.Qtp连接Sql2003
SetConn=CreateObject("ADODB.Connection")
str="DRIVER=SQLServer;SERVER=192.168.1.109;UID=wangshaoping;PWD=wsp;APP=MicrosoftOffice2003;WSID=wangshaoping;DATABASE=test_data"
Conn.openstr
SetRs=CreateObject("ADODB.Recordset")
'Setcomm=createobject("ADODB.Command")
sql="select*fromabnormity_datawherename_yc='yejian(00003)'"
Rs.opensql,conn,1,3
i=rs.RecordCount
'
'comm.CommandText=sql
'comm.ActiveConnection=Conn
'SetRs=comm.Execute
'
msgboxrs.Fields.Count
arrTemp=Rs.GetRows()
forj=0toi-1
msgboxarrTemp(0,j)&arrTemp(1,j)&arrTemp(2,j)&arrTemp(3,j)
next
Rs.Close
SetRs=Nothing
Conn.Close
SetConn=Nothing
2.QTP插入数据库检查点,手动指定SQL语句的写法。
一、SQLServer格式
(本地无需安装SQLServer)
connectionstring(连接字符串):
1.本地没有创建数据源的方式
DRIVER=SQLServer;SERVER=数据库IP地址;UID=用户名;PWD=密码;APP=MicrosoftOffice2003;WSID=本地主机名;DATABASE=数据库名
实例:
DRIVER=SQLServer;SERVER=10.160.11.10;UID=sa;PWD=sa;APP=MicrosoftOffice2003;WSID=RJHLJUN;DATABASE=dcwork
2.本地已创建数据源的方式
DSN=数据源名称;UID=用户名;PWD=密码;APP=MicrosoftOffice2003;WSID=数据库的主机名;DATABASE=数据库名
实例:
DSN=LocalServer;UID=sa;PWD=sa;APP=MicrosoftOffice2003;WSID=RJDCWORKTEST;DATABASE=dcwork
3.SQL语句实例(从数据库表HR_LANGUAGE_TYPE中,查询字段语言名称LANGUAGE_NAME,条件语言名称=中文,按语言名称升序排序结果)
source(SQL语句):
SELECTHR_LANGUAGE_TYPE.LANGUAGE_NAMEFROMdcwork.dbo.HR_LANGUAGE_TYPEHR_LANGUAGE_TYPEWHERE(HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')ORDERBYHR_LANGUAGE_TYPE.LANGUAGE_NAME
二、DB2格式
(本地至少安装DB2Run-TimeClientLite)
connectionstring(连接字符串):
1.本地没有创建数据源的方式
DRIVER={IBMDB2ODBCDRIVER};UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=数据库名;
实例:
DRIVER={IBMDB2ODBCDRIVER};UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;
2.本地已创建数据源的方式
DSN=数据源名称;UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=DCWORK;
实例:
DSN=DWCORKDB2;UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;
3.SQL语句实例
source:
SQL语句
SELECTHR_LANGUAGE_TYPE.LANGUAGE_NAMEFROMDB2ADMIN.HR_LANGUAGE_TYPEHR_LANGUAGE_TYPEWHERE(HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')ORDERBYHR_LANGUAGE_TYPE.LANGUAGE_NAME
三、Oracle格式
(本地需要安装OracleODBCDRIVER)
connectionstring(连接字符串):
1.本地没有创建数据源的方式
DRIVER={OracleinOraHome92};SERVER=数据库服务名;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;
实例:
DRIVER={OracleinOraHome92};SERVER=DCWORK;UID=DCWORK;PWD=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;
2.本地已创建数据源的方式
DSN=数据源名称;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;
实例:
DSN=dcworkoracle;UID=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;
3.SQL语句实例
source:
SQL语句
SELECTHR_LANGUAGE_TYPE.LANGUAGE_NAMEFROMDCWORK.HR_LANGUAGE_TYPEHR_LANGUAGE_TYPEWHERE(HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')ORDERBYHR_LANGUAGE_TYPE.LANGUAGE_NAME
四,mysql
SetConn=CreateObject("ADODB.Connection")
str="DRIVER={MySQLODBC3.51Driver};SERVER=192.168.1.100;DATABASE=wp_blog;userid=zzz;password=123456"
Conn.openstr
SetRs=CreateObject("ADODB.Recordset")
sql="select*from`wp_blog`.`blg_webcategory`limit0,5000;"'(分页查询)
Rs.opensql,conn,1,3
If(notRs.eof)then
Rs.MoveFirst
MsgBoxRs(0)
MsgBoxRs
(1)
MsgBoxRs
(2)
MsgBoxRs(3)
endif
Rs.Close
SetRs=Nothing
Conn.Close
SetConn=Nothing
用vbs取Mysql中文出现乱码
sConnection="DRIVER={MySQLODBC3.51Driver};SERVER=localhost;DATABASE=code52_lib;UID=root;PASSWORD=123456;OPTION=3;Stmt=SetNames'GBK'"
五,Access
SetConn=CreateObject("ADODB.Connection")
str="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:
/db1.mdb"
Conn.openstr
SetRs=CreateObject("ADODB.Recordset")
56.*.xml
Environment.LoadFromFile"D:
\新建文件夹\a.xml"
Browser("XX一下,你就知道").Page("XX一下,你就知道").WebEdit("wd").SetEnvironment("HuiYuanB")
用childItem获取单元格中的链接对象
WebTable对象中的ChildItem方法用于获取单元格中的测试对象,例如下面的脚本首先获取WebTable对象,然后通过ChildItem获取指定单元格中的链接对象,并单击该链接:
''获取WebTable对象
SetobjTable=Browser("WebSite").Page("WebSite").WebTable("WebSite")
intRow=2
intCol=2
''通过ChildItem获取单元格中的链接对象
SetobjLink=objTable.ChildItem(intRow,intCol,"Link",0)'introw:
所在行,intcol:
所在列,“link”所要找的类型,0:
index号
''单击链接
objLink.click
'如果想确定一个单元格类有多少个相同有类型的
msgboxobjTable.ChildItemCount(intRow,intCol,"Link")
随机选取webtable里checkbox
这里只写几句重要的,首先读取webtable的行数,然后,随机产生一个数,从这个数一直到webtable的行数为止.
Randomize
LoopCounter=int(webNum*Rnd)
Fori=1toLoopCounter'loopcounter是webtable的行数.
setchkbox=Browser("Browser").Page("***").WebTable("收集").ChildItem(i,1,"WebCheckBox",0)
chkbox.set"ON"'勾选上checkbox
Next
获取文档的当前路径
利用wsh获取文档的当前路径
DimWshShell
SetWshShell=WScript.CreateObject("WScript.Shell")
s=WshShell.CurrentDirectory
MsgBoxs
用vbs获取文档的当前路径
SetobjFSO=CreateObject("Scripting.FileSystemObject")
SetobjFile=objFSO.GetFile(wscript.scriptfullname)
s=objFSO.GetParentFolderName(objFile)
关于cscript与Wscript之间的区别
WSH提供了两个用于执行脚本的接口,一个用于命令行,一个用于Windows环境。
这两个接口各使用不同的宿主程序作为VBScript引擎:
●cscript.exe:
用于在命令行中运行脚本
●wscript.exe:
用于在Windows环境中运行脚本
之所以有两个宿主程序,是因为cscript.exe被设计为从控制台窗口启动(一般来说是Windows中的MS-DOS窗口),而wscript.exe则用于直接与WindowsGUI进行交互。
这两者就功能来讲几乎没有区别。
判断一个目录中有没有所要的目录,如果没有就创建一个
dimfs,s
setfs=WScript.CreateObject("Scripting.FileSystemObject")
if(fs.FolderExists("C:
\temp"))then
s="isavailable"
MsgBoxs
else
s="notexist"
MsgBoxs
setfoldr=fs.createfolder("c:
\temp")
endif
关于vbs的数据类型
Vbs中唯一的数据类型---variant
variant是vbs中所有函数的返回值的数据类型!
variant分为数字字符串
Variant包含的子数据类型
empty未初始化的variant,对数值变量,值为'0',对字符串变量,值为0长度字符串('').
Null不包含任何数据的viariant.
boolean值只能是true或false
byte包含0~255之间的整数
integer包含-32768~32767之间的整数
currency包含-922337203685477~922377203685477.5807之间的数字
long包含-2147483648~2147483647之间的整数
single包含单精度浮点数,负数范围从-3.402823E38~-1.401298E~45,正数范围从1.401298E~45~3.402823E38.
double包含双精度浮点数,负数范围从-1.79769313486232E308~-4.94065645841247E~324,正数范围从4.94065645841247W~324~1.79769313486232E308
date包含表示日期的数字,日期范围为公元100年1月1日~公元9999年12月31日
string字符串,最大字符串长度为20亿个字符
object对象子变量
error包含错误编号
您可以使用转换函数来转换数据的子类型。
另外,可使用VarType函数返回数据的Variant子类型。
TypeName函数返回数据类型名,如:
integer()
varType返回值对应表
vbEmpty0Empty(未初始化)
vbNull1Null(无有效数据)
vbInteger2整数
vbLong3长整数
vbSingle4单精度浮点数
vbDouble5双精度浮点数
vbCurrency6货币
vbDate7日期
vbString8字符串
vbObject9Automation对象
vbError10错误
vbBoolean11Boolean
vbVariant12Variant(只和变量数组一起使用)
vbDataObject13数据访问对象
vbDecimal14十进制值
vbByte17字节
vbUserDefinedType36包含用户定义的类型的变量
vbArray8192数组
获取当前日期时间
2009年4月21日星期二14:
17
GetCurrentDate=FormatDateTime(Date,1)&FormatDateTime(time,4)
2009-4-2114:
17:
51
GetCurrentDate=FormatDateTime(Date)&FormatDateTime(time,3)与FormatDateTime(Date,0)&FormatDateTime(time)是相同的结果
对数字进行处理
formatNumber,formatPercent
猜随机数
DimGuess,RndNum
RndNum=Int((100)*Rnd
(1)+1)
Guess=CInt(InputBox("Enteryourguess:
",,0))
Do
IfEval("Guess=RndNum")Then
MsgBox"Congratulations!
Youguessedit!
"
Else
Guess=CInt(InputBox("Sorry!
Tryagain.",,0))
EndIf
LoopUntilGuess=0
Print的用法
1.在测试中我们使用QTP调试脚本的时候一般就是DEBUG或者MSGBOX察看一些信息,其实有时候也可以使用print来实现批量的察看信息但是不影响程序运行.
运行脚本:
a="100"
printa
取datatable特定行的数据可以这样使用
运行脚本:
DataTable.GetSheet("Action1").GetParameter("test").ValueByRow(4)
Wait精确到毫秒
WaitSeconds[,Milliseconds]可以精确到毫秒.
数组作为返回值的操作
4.在自定义的function里面数组作为返回值.
运行脚本:
circuit="399937"
FunctiontrimString(circuit)
DimholdArray(5)
holdArray(0)=Left(circuit,2)
holdArray
(1)=Right(circuit,2)
msgboxholdArray(0)'showed39
trimString=holdArray'Igetanoutofrangeerrorhere
EndFunction
dimmyArray
'hereIwanttoassignthereturnarraytoanotherarray
myArray=trimString(circuit)
'andthencalloneelementfromit
msgboxmyArray
(1)
计算一个操作的时间.
运行脚本:
Browser("Browser").Page("Page").Image("getRates").Click
var_StartTime=Timer
Browser("Browser").Page("Page").Sync
Browser("Browser").Page("Page").CheckCheckPoint("Check1")
var_EndTime=Timer
intRespTime=round((var_EndTime-var_StartTime),2)
msgbox(intRespTime)
取得指定sheet(datatable)的行数和列数(也可以理解为参数个数)
paramcount=DataTable.GetSheet("Action1").GetParameterCount
msgbox"Thereare"¶mcount&"columnsinthedatasheet."
rowcount=DataTable.GetSheet("Action1").GetRowCount
msgbox"Thereare"&rowcount&"rowsinthedatasheet."