金鳞

目标->软件测试架构师

 文章比较长,一共三部分:

第一部分

1
、连接数据库查询例子,无参数化
//
查询收文操作,通过数据库查询记录数是否正确
//1
、输出记录数值,例如78  2、获取输出的记录数值 3、连接数据库,查询记录数
4
、输出记录数值和从数据库中查询记录数值,相比较,相等则成功,不等则失败
Browser("
湛江信息化测试登录").Page("湛江东兴石油企业有限公司办公自动化系统").Frame("mainFrame").Output CheckPoint("78")
Dim mm
'mm=DataTable.GlobalSheet.GetParameter("mainFrameOutput_Text_out").Value  
//
注释,获取datatable值与DataTable("mainFrameOutput_Text_out", dtGlobalSheet)一致
mm=DataTable("mainFrameOutput_Text_out", dtGlobalSheet)
MsgBox mm
Dim res,cmd,sql
Set res=createobject("adodb.recordset")
Set cmd=createobject("adodb.command")
Cmd.activec
Cmd.CommandType = 1
sql="select count(*) from oa_receivebumf  where BUMFNAME
like '%收文测试%'"
'sql="select  count(*)  from oa_receivebumf  where BUMFNAME='"&nn&"'"
//
注释,sql语句,等于时sql语句
// sql="select  count(*)  from oa_receivebumf  where BUMFNAME like '%nn%'" //like
sql语句
Cmd.CommandText = sql
Set res = Cmd.Execute()
//msgbox res("name")

MsgBox res(0)
If   Cstr(res(0)) = Cstr(mm)Then
      Reporter.ReportEvent micPass, "test\",   "
查询成功"     
  else
Reporter.ReportEvent micfail, "test",   "
查询失败"
End If
Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing
2
、登记用户,查看是否登记成功
   //
登记用户,查询用户是否存在在数据库中
     1
参数化 2、取参数化值  3、查询语句中,赋值给查询条件
     4
、从数据库中查询出用户名,与参数化中值做比较
   
脚本如下:
Browser("
测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").Set DataTable("p_Text", dtGlobalSheet)
Dim xname
xname=DataTable("p_Text", dtGlobalSheet)
MsgBox  xname


Dim res,cmd,sql
Set res=createobject("adodb.recordset")
Set cmd=createobject("adodb.command")
Cmd.activec
Cmd.CommandType = 1
sql="select  name from address_list t where name ='
"&xname&"'"
Cmd.CommandText = sql
Set res = Cmd.Execute()
'msgbox res("name")
MsgBox res(0)
Set res = nothing
Set cmd.ActiveConnection = nothing
Set Cmd= nothing

 

 

第二部分

1Datatable方法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.1  DataTable("p_Text", dtLocalSheet)  //
取得datatable中参数名称为:p_Text的值
   4.2  DataTable.GlobalSheet.GetParameter("p_Text").Value   //
获取参数值方法和DataTable("p_Text", dtLocalSheet)一样
   
例如:xname为变量,dim xname
   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
   dim mm
   Cstr(mm)

7
、获取对象属性名称用法:
GetRoProperty----
从应用程序界面上获取对象属性(即,是脚本运行时,获取的对象动态属性值)
           
例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是
      QTP为识别该对象创立的描述属性;
GetToproperty----
从对象库中描述对象的属性,静态值
GetToProperties----
获取用于标识对象的属性集;对于这个集合,有count等属性方法

8
、如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
if browser("web_name").dialog("dialog_name").exist(1) then'
如果不出现=false
     error_message=browser("web_name").dialog("diaglog_name").static("
用户密码错误!".getRoproperty("text")
   if error_message<>(datatable.value("error_info"))then
         msgbox(error_message)
      end if
     browser("web_name").dialog("diaglog_name").close
  end if
这里总结了两点技巧:
  一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是该用户不存在,不用更改会自动识别,我想主要是录制第一遍时,用户密码错误只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
   
二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理

9
、数据库检查点模块:
sub database_check
set con=createobject("adodb.connection")
con.open "Descrīption=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_
                 "PWD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
'access
方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb"
'Orocle
方式:con.open "DRIVER={Oracle in OraHome92};SERVER=CESHI;UID=CND_TEST;PWD=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=F;PFC=10;TLO=O;"
set record=createobject("adodb.recordset")
sql="select*from ibm_one_table"
record.open sql,con
DO
if(record("ibm_table_column")="kai")then'//
查找表格中有多少kai
num=num+1;
end if
record.movenext
loop until record.eof=true
record.close
set record=nothing
con.close
set con=nothing
end sub

10
"is+*"类型function
isarray'
是否是数组
isconnected'
判断QTP是否连接到TD
isdate'
是否是合法的日期类型
isempty'
判断是否初始化
isNull'
判断是否为空值
isNumeric'
判断是否是数字型
isobject'
判断是否一个功能对象
isready'
判断设备是否准备就绪
isRootFolder'
是否是根目录

11
for方法1,参数化时选择:dtLocalSheet
Dim CountNum
CountNum=DataTable.GetSheet("Action1").GetRowCount
For i=0 to CountNum-1
----xunhuanti------
DataTable.GetSheet("Action1").SetNextRow    //
使用SetNextRow方法
Next

12
for方法2,参数化时选择:dtLocalSheet
dim countNum
countNum = DataTable.GetSheet("Action1").GetRowCount
For i=1 to countNum
DataTable.GetSheet("Action1").SetCurrentRow(i)  //
使用SetCurrentRow(i)方法
―――ddd―――
next
13
while方法1,参数化时选择:dtLocalSheet
Dim CountNum,i
i=1
CountNum=DataTable.GetSheet("Action1").GetRowCount
While i<=CountNum
------xuhuanti---
DataTable.GetSheet("Action1").SetNextRow
i = i+1
Wend

14
while方法2,参数化时选择:dtLocalSheet
Dim CountNum,i
i=1
CountNum=DataTable.GetSheet("Action1").GetRowCount
While i<=CountNum

DataTable.GetSheet("Action1").SetCurrentRow(i)
----xuhuanti---
i = i+1
Wend

 

 

第三部分

15Do while方法
Dim i,RowCount '
定义两个变量
i=0
RowCount=DataTable.GetSheet("Action1").GetRowCount '
设置RowCount等于Action1中的行数。
msgbox RowCount
Do while i<rowcount
i=i+1 '
第一次进入循环,执行这句后,i=1
'DataTable.GetSheet("Action1").SetCurrentRow(i)  
这句话被我注释掉了,正确的写法应该是下面这样,分开写。

datatable.getsheet("Action1")
datatable.setcurrentrow(i)

----xunhuanti----
loop

16
、取对象属性(Property)值

Dim usname
usname =Browser("
测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").GetRoProperty("Value")   '获取对象属性(Property)值,如PropertyValue
MsgBox usname

17
、取得要删除的id,并删除
'url
在查看该新增记录的信息页面对象中取得,所以录制的时候,登记,查看(修改),删除

Dim strUserid,id,strId

     id=Browser("
测试登录").Page("办公自动化系统").Frame("mainFrame_4").GetROProperty("url") 'url这个属性值中存在我需要删除记录的ID信息
  strId=Mid (id,instr(60,id,"=")+1)  '
这一步是把需要的id值取了出来,例如:strId=Mid (id,instr(1,id,"=")+1)
     strUserid =strId  'strUserid
是我要删除的记录前的复选框属性值当中的ID信息
Browser("
测试登录").Page("办公自动化系统").Frame("mainFrame").WebCheckBox("value:="&strUserid).Set "ON" 这样就把想删除的记录选中了。
Browser("
测试登录").Page("办公自动化系统").Frame("mainFrame").WebButton(" ").Click '这样就删除掉啦,呵呵

17.2
通过数据库取得id值,并赋值进行删除

Browser("
测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.name").Set DataTable("p_Text", dtGlobalSheet)
Browser("
测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.address").Set DataTable("p_Text1", dtGlobalSheet)

Browser("
测试登录").Page("办公自动化系统").Frame("mainFrame_2").WebEdit("addressVO.unitTel").Set DataTable("p_Text2", dtGlobalSheet)

Dim xname,address,unitTel
xname=DataTable("p_Text", dtGlobalSheet)   '
datatable中取值
address=DataTable("p_Text1", dtGlobalSheet)
unitTel=DataTable("p_Text2",dtGlobalSheet)

posted on 2008-06-17 10:41 金鳞 阅读(422) 评论(0)  编辑 收藏 引用 所属分类: QTP
只有注册用户登录后才能发表评论。