51Testing软件测试论坛

标题: QTP使用总结(转帖) [打印本页]

作者: qiqin    时间: 2010-9-15 09:41
标题: QTP使用总结(转帖)
觉得总结得挺好的,转过来留着!
 文章比较长,一共三部分:
  1、连接数据库查询例子,无参数化

  //查询收文操作,通过数据库查询记录数是否正确

  //1、输出记录数值,例如78条2、获取输出的记录数值3、连接数据库,查询记录数

  4、输出记录数值和从数据库中查询记录数值,相比较,相等则成功,不等则失败

Browser("湛江信息化测试登录").Page("湛江东兴石油企业有限公司办公自动化系统").Frame("mainFrame").OutputCheckPoint("78")
Dimmm
'mm=DataTable.GlobalSheet.GetParameter("mainFrameOutput_Text_out").Value
//注释,获取datatable值与DataTable("mainFrameOutput_Text_out",dtGlobalSheet)一致
mm=DataTable("mainFrameOutput_Text_out",dtGlobalSheet)
MsgBoxmm
Dimres,cmd,sql
Setres=createobject("adodb.recordset")
Setcmd=createobject("adodb.command")
Cmd.activec
Cmd.CommandType=1
sql="selectcount(*)fromoa_receivebumfwhereBUMFNAMElike'%收文测试%'"
'sql="selectcount(*)fromoa_receivebumfwhereBUMFNAME='"&nn&"'"
//注释,sql语句,等于时sql语句
//sql="selectcount(*)fromoa_receivebumfwhereBUMFNAMElike'%nn%'"//like时sql语句
Cmd.CommandText=sql
Setres=Cmd.Execute()
//msgboxres("name")
MsgBoxres(0)
IfCstr(res(0))=Cstr(mm)Then
Reporter.ReportEventmicPass,"test","查询成功"
else
Reporter.ReportEventmicfail,"test","查询失败"
EndIf
Setres=nothing
Setcmd.ActiveConnection=nothing
SetCmd=nothing



  2、登记用户,查看是否登记成功

  //登记用户,查询用户是否存在在数据库中

  1、参数化2、取参数化值3、查询语句中,赋值给查询条件

  4、从数据库中查询出用户名,与参数化中值做比较

  脚本如下:

Browser("测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").SetDataTable("p_Text",dtGlobalSheet)
Dimxname
xname=DataTable("p_Text",dtGlobalSheet)
MsgBoxxname

Dimres,cmd,sql
Setres=createobject("adodb.recordset")
Setcmd=createobject("adodb.command")
Cmd.activec
Cmd.CommandType=1
sql="selectnamefromaddress_listtwherename='"&xname&"'"
Cmd.CommandText=sql
Setres=Cmd.Execute()
'msgboxres("name")
MsgBoxres(0)
Setres=nothing
Setcmd.ActiveConnection=nothing
SetCmd=nothing





第二部分

  1、Datatable方法GetRowCount

  DataTable.GetSheet("Action1").GetRowCount//获取总行数

  使用如:

  CountNum=DataTable.GetSheet("Action1").GetRowCount

  2、Datatable方法SetNextRow

  DataTable.GetSheet("Action1").SetNextRow//取得下一行

  datatable.setcurrentrow(n)//取得某一行

  3、Datatable方法getcurrentrow//获得当前行数

  例如:datatable.getcurrentrow

  4、获取datatable值

  4.1DataTable("p_Text",dtLocalSheet)//取得datatable中参数名称为:p_Text的值

  4.2DataTable.GlobalSheet.GetParameter("p_Text").Value//获取参数值方法和DataTable("p_Text",dtLocalSheet)一样

  例如:xname为变量,dimxname

  xname=DataTable("p_Text",dtLocalSheet)

  xname=DataTable.GlobalSheet.GetParameter("p_Text").Value

  5、datatable.value("num")只在global形式下的一种省略形式;完整形式是:

  datatable.value("num",dtlocalsheet)

  -----向某一列的单元格赋值:

  datatable.value("column_name",dtlocalsheet)="nanjing"

  6、字符转换Cstr

  dimmm

  Cstr(mm)

  7、获取对象属性名称用法:

  GetRoProperty----从应用程序界面上获取对象属性(即,是脚本运行时,获取的对象动态属性值)

  例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是

  QTP为识别该对象创立的描述属性;

  GetToproperty----从对象库中描述对象的属性,静态值

  GetToProperties----获取用于标识对象的属性集;对于这个集合,有count等属性方法

  8、如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证

ifbrowser("web_name").dialog("dialog_name").exist(1)then'如果不出现=false
error_message=browser("web_name").dialog("diaglog_name").static("用户密码错误!".getRoproperty("text")
iferror_message<>(datatable.value("error_info"))then
msgbox(error_message)
endif
browser("web_name").dialog("diaglog_name").close
endif





这里总结了两点技巧:

  一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性

  二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理

  9、数据库检查点模块:

subdatabase_check
setcon=createobject("adodb.connection")
con.open"Description=IBM_ODBC;DRIVER=SQLServer;SERVER=IBM;UID=sa;"&_
"WD=123456;APP=QuickTestPro;WSID=IBM;DATABASE=IBM_table"
'access方式:con.open"DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ=d:\test.mdb"
'Orocle方式:con.open"DRIVER={OracleinOraHome92};SERVER=CESHI;UID=CND_TESTWD=CND;DBQ=CESHI;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=FFC=10;TLO=O;"
setrecord=createobject("adodb.recordset")
sql="select*fromibm_one_table"
record.opensql,con
DO
if(record("ibm_table_column")="kai")then'//查找表格中有多少kai
num=num+1;
endif
record.movenext
loopuntilrecord.eof=true
record.close
setrecord=nothing
con.close
setcon=nothing
endsub




10、"is+*"类型function

  isarray'是否是数组

  isconnected'判断QTP是否连接到TD

  isdate'是否是合法的日期类型

  isempty'判断是否初始化

  isNull'判断是否为空值

  isNumeric'判断是否是数字型

  isobject'判断是否一个功能对象

  isready'判断设备是否准备就绪

  isRootFolder'是否是根目录

  11、for方法1,参数化时选择:dtLocalSheet

DimCountNum
CountNum=DataTable.GetSheet("Action1").GetRowCount
Fori=0toCountNum-1
----xunhuanti------
DataTable.GetSheet("Action1").SetNextRow//使用SetNextRow方法
Next


  12、for方法2,参数化时选择:dtLocalSheet

dimcountNum
countNum=DataTable.GetSheet("Action1").GetRowCount
Fori=1tocountNum
DataTable.GetSheet("Action1").SetCurrentRow(i)//使用SetCurrentRow(i)方法
―――ddd―――
next


  13、while方法1,参数化时选择:dtLocalSheet

DimCountNum,i
i=1
CountNum=DataTable.GetSheet("Action1").GetRowCount
Whilei<=CountNum
------xuhuanti---
DataTable.GetSheet("Action1").SetNextRow
i=i+1
Wend


  14、while方法2,参数化时选择:dtLocalSheet

DimCountNum,i
i=1
CountNum=DataTable.GetSheet("Action1").GetRowCount
Whilei<=CountNum
DataTable.GetSheet("Action1").SetCurrentRow(i)
----xuhuanti---
i=i+1
Wend
作者: 张雅芯    时间: 2010-11-28 00:01
几好啊




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2