-
QTP中RO与TO的区别1(转)
2010-12-09 10:58:50
[QTP中RO与TO的区别1]概念
TO是Test Object的简称,RO是Runtime Object简称,既用来区分仓库对象和实际对象,又用来区分对象的封装接口和自身接口。
从实际作用上来看,应该说TO就是是仓库文件里定义的仓库对象,RO是被测试软件的实际对象。
QTP为用户提供了两种操作对象的接口,一种就是对象的封装接口,另一种是对象的自身接口。对象的自身接口是对象控件本身的接口,对象的封装接口是QTP为对象封装的另一层接口,它是QTP通过调用对象的自身接口来实现的。
两种接口的脚本书写格式的差别在于:自身接口需要在对象名后面加object再加属性名或方法名,封装接口就不用在对象名后面加object.
比如操作JavaEdit对象,通过QTP封装的封装接口,脚本如下:
设置JavaEdit的内容:
JavaDialog("Add NE").JavaEdit("NE Name").Set "NE1"
读取JavaEdit的内容:
msgbox JavaDialog("Add NE").JavaEdit("NE Name").GetROProperty("value")
如果通过JavaEdit的自身接口,脚本如下:
设置JavaEdit的内容:
JavaDialog("Add NE").JavaEdit("NE Name").object.setText("NE1")
读取JavaEdit的内容:
Msgbox JavaDialog("Add NE").JavaEdit("NE Name").object.getText()
QTP执行JavaEdit().Set语句时,是通过执行JavaEdit().object.setText()来实现的。
QTP执行JavaEdit().GetROProperty("value"),是通过执行JavaEdit().object.getText()来实现的。 另外:通过GetTOProperty可以获取TO的对象属性,同时也可以通过SetTOProperty来更改TO的对象属性;通过GetROProperty获取RO的对象属性,一般不建议对RO的对象进行更改。
-
qtp自动化测试范例(转)3
2010-09-03 15:23:43
4、’验证loginCase文档中login_004至login_009
For i=2 to 7
‘读取data中,login的数据
Dim username,password,expected
username=ReadExcelCell(dataPath, "login", i, 1)
password=ReadExcelCell(dataPath, "login", i, 2)
expected=ReadExcelCell(dataPath,"login",i,3)
‘执行登录操作,将读取到的username参数化给下面的数据
Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("username").Set username
Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("pwd").Set password
Browser("Browser").Page("在线考试系统").Frame("main").WebButton("登 录").Click
‘判断登录是否成功的文本字符
popok=Browser("Browser").Page("在线考试系统").Frame("left").WebElement("考生姓名:123状 态:已登录").Exist(3)
popno=Browser("Browser").Page("在线考试系统").Frame("main_2").WebElement("操作失败").Exist(3)
‘依据期望结果进行判断
If expected="ok" Then
If popok Then
'将数据源中的期待结果写为pass
Write_Excel dataPath,"login",i,"D","Pass"
'将此结果在测试用例中进行体现
Write_Excel casePath,"login",i+3,"D","Pass"
'返回登录界面,执行下一轮数据的操作
Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click
Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click
else
'如果出现错误,则截图并保存到指定文件夹中
QTP_Capture capturePath,"login_"&i+3
'将数据源中的期待结果写为fail
Write_Excel dataPath,"login",i,"D","Fail"
Write_Excel dataPath,"login",i,"E","正确用户名和密码登录失败"
'将此结果在测试用例中进行体现
Write_Excel casePath,"login",i+3,"D","Fail"
Write_Excel casePath,"login",i+3,"E","正确用户名和密码登录失败"
'出错后,重新进入登录界面
Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click
End If
else
If popno Then
'msgbox "no"
'将数据源中的期待结果写为pass
Write_Excel dataPath,"login",i,"D","Pass"
'将此结果在测试用例中进行体现
Write_Excel casePath,"login",i+3,"D","Pass"
‘pass后返回登录界面,继续执行下一轮操作
Browser("Browser").Page("在线考试系统").Frame("main_2").WebButton("返回上一页").Click
elseif popok then
'如果出现错误,则截图并保存到指定文件夹中
QTP_Capture capturePath,"login_"&i+3
'将数据源中的期待结果写为fail
Write_Excel dataPath,"login",i,"E","错误用户名或密码,登录成功"
' '将此结果在测试用例中进行体现
Write_Excel casePath,"login",i+3,"E","错误用户名或密码,登录成功"
'返回登录界面,继续验证相关数据
Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click
Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click
else
'如果出现错误,则截图并保存到指定文件夹中
QTP_Capture capturePath,"login_"&i+3
'将数据源中的期待结果写为fail
Write_Excel dataPath,"login",i,"D","Fail"
Write_Excel dataPath,"login",i,"E","错误数据,但提示语不正确"
'将此结果在测试用例中进行体现
Write_Excel casePath,"login",i+3,"D","Fail"
Write_Excel casePath,"login",i+3,"E","错误数据,但提示语不正确"
'出错后,重新进入登录界面
Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click
End If
End If
Next
D、执行脚本后,关闭网页和发送相关文档到相关人员的邮箱之中
'执行完之后,关闭网页
Browser("Browser").Close
'执行完此模块的测试后,将测试结果发送到指定的邮件之中
Dim Body '邮件的内容
Dim sendto'收件人的地址
Dim subject '邮件主题
Body="Hi:"&vbCrLf&"此文件为本次自动化测试的Case结果。请查收!谢谢!"&vbCrLf&vbCrLf&"from qwen"&vbCrLf&Now()
sendto="wen.qingshan@byd.com"
subject=now()&"自动化测试的结果"
SendMail sendto,subject, Body, casePath
一直以来不清楚大家是怎么去使用QTP测试的,甚至也不太清楚我这么去做是否能称得上算一个QTP的框架,不过我就是这样使用QTP去做测试的。最后,十分感谢您能够有耐心地看到这里,谢谢。
另外,不知道是不是因为51这个发表日志框将回车后剩余的空格也认成字符了, 一次发表所有内容老被截断,这点挺另人晕的.
作者:文青山
2010-8-30
-
qtp自动化测试范例(转)2
2010-09-03 15:22:30
作者:文青山
时间:2010-8-30
注意:请尊重版权!
上接:http://www.51testing.com/index.php?uid-287227-action-viewspace-itemid-219449
B、主体脚本过程,此处可使用描述性编程来书写,如使用描述性编程,需从common文件中调用相关的对象库(描述性编程)
确定录制的主体过程,此过程我是通过录制实现的,此处代码为测试脚本的主体部分提供基础代码,即为C部分(下方)的扩展操作提供基础代码。
如:
‘起动浏览器,进入系统登录界面
'打开IE wqs592452,在不同的机器上需要更改一下
SystemUtil.Run "C:\Program Files\Internet Explorer\iexplore.exe","","C:\Documents and Settings\wqs592452","open"
Browser("Browser").Navigatehttp://10.9.146.182:8080/index.asp
‘点击登录链接
Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click
‘执行登录操作
Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("uname").Set “123”
Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("pwd").Set “123456”
Browser("Browser").Page("在线考试系统").Frame("main").WebButton("登 录").Click
'返回登录界面,执行下一轮数据的操作
Browser("Browser").Page("在线考试系统").Frame("top").Link("【注销登录】").Click
Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click
C、按照case修改脚本,主要调用库函数中的写入Excel单元格的函数Write_Excel(pathway,sheetname,x,y,content)读取单元格的函数ReadExcelCell(file,sheet,x,y)以及截图函数Qtp_Capture,注意Qtp_Capture应在Write_Excel之前,否则截图时可能为读取Excel的界面
‘点击登录链接
1、 '验证loginCase文档中login_001
Browser("Browser").Page("在线考试系统").Frame("top").Link("【登录系统】").Click
‘如果登录后某对象存在,则case文件login_001 Pass,否则Fail,并截图
If Browser("Browser").Page("在线考试系统").Frame("main").WebButton("登 录").Exist Then
'如果存在此对象,则将case中的actualresults置为pass
Write_Excel casePath,"login",2,"D","Pass"
Else
'如果出现错误,则截图并保存到指定文件夹中
QTP_Capture capturePath,"login_001"
'如果不存在此对象,则将case中的actualresults置为fail
Write_Excel casePath,"login",2,"D","Fail"
‘出现错误后,说明错误的原因
Write_Excel casePath,"login",2,"E","登录系统链接失效"
End If
2、'验证loginCase文档中login_002
‘利用描述性编程,查看width in characters对象是否存在,并且为30
If Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("name:=uname","width in characters:=30").Exist then
'如果存在此对象,则将case中的actualresults置为pass
Write_Excel casePath,"login",3,"D","Pass"
else
'如果出现错误,则截图并保存到指定文件夹中
QTP_Capture capturePath,"login_002"
'如果存在此对象,则将case中的actualresults置为fail
Write_Excel casePath,"login",3,"D","Fail"
‘出现错误后,说明错误的原因
Write_Excel casePath,"login",3,"E","用户名输入框未设置为30位"
end if
3、’验证loginCase文档中login_003
‘利用描述性编程,查看width in characters对象是否存在,并且为30
If Browser("Browser").Page("在线考试系统").Frame("main").WebEdit("name:=pwd","width in characters:=30").Exist then
'如果存在此对象,则将case中的actualresults置为pass
Write_Excel casePath,"login",3,"D","Pass"
else
'如果出现错误,则截图并保存到指定文件夹中
QTP_Capture capturePath,"login_002"
'如果存在此对象,则将case中的actualresults置为fail
Write_Excel casePath,"login",3,"D","Fail"
‘出现错误后,说明错误的原因
Write_Excel casePath,"login",3,"E","用户名输入框未设置为30位"
end if
-
qtp自动化测试范例(转)1
2010-09-03 15:18:45
作者:文青山
时间:2010-8-30
注意:请尊重版权!
废话不说了,上主要内容!
一、文件目录位置分开
不同目录放置不同内容:
case目录:放置测试用例。
Fucation目录:放置经常调用的库函数。
common目录:放置所测试系统的主函数,和利用描述述编程生成的对象库。
001login目录:放置QTP脚本自动生成的相关文件
data目录:放置测试数据,该数据与测试用例中需要数据驱动的项进行对照
capture目录:放置当系统出现错误时的截图
二、测试用例
将用例进行一定的整理,把数据驱动部分归纳为一个连续,并把实际结果做一个excel的数据有效性判断,即pass为绿色,fail为红色,具体用例如:
ID
validate
expected
actualresults
Failreason
login_001
登录链接
正常链接
login_002
用户名输入框的maxlength
30
login_003
密码输入框的maxlength
30
login_004
正常登录
登录成功,显示已登录
login_005
异常登录
登录失败,用户名或密码错误
login_006
异常登录
登录失败,用户名或密码错误
login_007
异常登录
登录失败,用户名或密码错误
login_008
异常登录
登录失败,用户名或密码错误
login_009
异常登录
登录失败,用户名或密码错误
三、用例对应数据
对照数据驱动部分用例生成相关数据,增加期望值用于判断,并把实际结果做一个excel的数据有效性判断,即pass为绿色,fail为红色,具体示例如:
userName
passWord
expected
实际结果
123
123456
ok
<script>alert('')</script>
123456
no
no
123
no
123
no
123
<script>alert('')</script>
no
四、脚本过程
A、初始操作,可把这一部分写进common中
调用外部组件:
如:fucationPath="F:\qtptest\fucation\fucations.vbs" '函数组件
ExecuteFile fucationPath
定义case、data、capture位于系统的位置:
如:casePath="F:\qtptest\case\loginCase.xls" '用例位置
dataPath="F:\qtptest\data\001login.xls" '数据放置的位置
capturePath="F:\qtptest\Capture\" '截图放置的位置
调用初始函数:
如:
CloseIE() '调用组件中的CloseIE(),结束IE进程
CloseExcel() '调用组件中的CloseExcel(),结束Excel进程
QTP_Small() '让QTP最小化运行
-
在QTP中随机取下拉菜单的值(转)
2008-09-03 11:08:04
摘要:产生期望的随机数来选取到动态的下拉菜单的值。
关键字:随机数;GetROProperty
有网友在论坛上提出问题,在使用QTP中如何随机选取动态的下拉菜单。在此笔者总结了一些测试经验,利用51testing的登录界面(http://bbs.51testing.com/logging.php?action=login)作为测试页面进行讲解。
首先我们拿登录页面中的 安全提问 这个下拉菜单作为测试对象。
我们可以先录制一段选取下拉菜单的脚本。
Browser("51Testing软件测试论坛 测试 | 软件测试\").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").Select "您个人计算机的型号"。
备注:无这边有个技术处理就是使用#加数字来选择我们的下拉菜单。
Browser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").Select "#2"
备注:这个方法在论坛上也出现过,比较适合这个例子。下面我们要取得下拉菜单中选项的个数。
Browser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").GetROProperty ("items count")
备注:这边使用GetROProperty,应该算比较常见的,所以不多做解释。接下来是要个随机函数,参考帮助。
Randomize
x=RandomNumber (0,2)
备注:这边是随机生成0-2之间的三个数字中的一个。我们可以把随机函数写成function,方便以后使用。
Function Get_Ran(i)
Randomize
Get_Ran=RandomNumber (0,i)
End Function
备注:这边需要注意的就是使用了函数返回值最后我们把脚本整合起来
Function Get_Ran(i)
Randomize
Get_Ran=RandomNumber (0,i)
End Function
Get_Count=Browser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").GetROProperty ("items count")
Ran_Number=Get_Ran(Get_Count-1)
Browser ("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").Select "#"&Ran_NumberBrowser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").GetROProperty ("items count")
Browser("51Testing软件测试论坛 测试 | 软件测试").Page("51Testing软件测试论坛 测试 | 软件测试").WebList("questionid").GetROProperty ("items count")
备注:需要注意的就是在下拉菜单选择的时候从#0开始计算的,所以随机数字从0开始,传入的值也需要减去1。题外话:这边主要是使用QTP自带的随机数字函数这个方法来实现随机选择下拉菜单的内容,其实这个随机数字可以开展到随机字符串。因为我们经常会有一些输入域的测试,有的就需255个字节,多的就更可怕,使用随机函数能大大减少我们的工作量。而下面这个例子是实现在abc这三个字母中随机取出来拼成字符串。
Function makestring(inputlength)
If IsNumeric(inputlength) Then
For I = 1 To inputlength
'you may add a random function here
A = Array("a","b","c")
Randomize
x=RandomNumber (0,2)
B = A(x)
makestring =makestring +B
Next
msgbox ("output the string:"&makestring )
else
msgbox ("error format:"&inputlength)
End If
End Function
Call makestring("8") -
qtp常见对象
2008-09-03 10:47:14
常见的对象名:
y__+C `/yZN130702Dialog:对话框,括号里面的参数表示对话框标题栏上的名字51Testing软件测试网hD6c&};Ad3{i+Y0i
WinEdit:Windows窗体中的文本框
VjFB | K4A130702WinButton: Windows窗体中的命令按钮
sZxoA#Bw130702ActiveX: ActiveX控件
[I-Gp+|Y.|@6y130702WinComboBox: Windows窗体中列表框
|%B9OvA+y13070251Testing软件测试网8Thsc Y*HRe|#s}Bc
&216;
qtW\)|"o$s8f"`130702常见的事件名:
b QW9}-R1|PQ130702Set:当在文本框中输入信息时会触发该事件51Testing软件测试网!zW5o'XI3}-|
Click:当点击命令按钮时会触发该事件
TZ#U'CQ_f130702Select:当选择列表框或是单选按钮时会触发该事件
(e:Gwwd ~nG130702Close:当关闭一个标准窗口或对话框时会触发该事件 -
qtp(z)基础代码
2008-09-03 10:43:55
1. 生产随机数列
第一种方法:
randomize'更新反回的数据
funcation rand(k,n)
n="int((k-1)*rnd+1)
rand=n
end funcation
第二种方法:
n="randomnumber.value(1,255)
2. 当运行到表中的某一行,自动导出表中的所有数据
row="datatable.getcurrentrow
if row="5" then
datatable.export("d:\data.xml")
end if
3. webedit("txtpass").setsecure"sdsdf...."
如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set
4. 如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
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)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理。
5. 在运行时,向某一个单元格赋值: datatable.value("kai",dtlocalsheet)="nanjing"
datatable.value("num")只在global形式下的一种省略形式;完整形式是datatable.value("num",dtlocalsheet)
––取得某一具体行的值:
datatable.setcurrentrow(n);
msgbox(datatable.getsheet("global").getparameter("kai").Rawvalue)
或者
kk="datatable.Rawvalue(""kai","action1")
-------------
for i="1" to 3
DataTable.SetCurrentRow(i)
DataTable.Value("A","Global")="I " //DataTable.SetNextRow
next
-------------
––在run-time期间,添加一个action和参数
kk="datatable.addsheet(""name").addparameter("kai","ddd"). name'/value
6.
with dialog("name") //可以省好多代码,看着也简洁
content=".wintreeview
end with
7.
wintreeview.select(item) (根是0,列表第一个也是0)
wintreeview.getcontent
wintreeview.getitem(整行)+";"+
winlistview.getitem(行中的第一个字符段)
wincheckbox("").set"off"'/on
8. 数据库检查点:
sub getdata
set con="createobject(""adodb.connection")
con.open("descrīption=mod;driver=sqlserver;server=hp\sqlserver;uid=sa;"&_
"pwd="11111;APP=qtp;WSID=hp;database=MOD31""
//用sqlserver方式
Con.open "DRIVER = {Microsoft Access Driver (*.mdb)};DBQ="D:\Testdb.mdb""
//用access方式
set record="createobject(""adodb.recordset")
sql="select * from m3_program"
//选择具体满足一条件的:sql="select* from m3_program where "
record.open sql,con
if(record("p_name")="kai") then
num="num+1;
end if
if(not record.eof) then
record.movenext
msgbox("p_name")
end if
record.close
set record="nothing
con.close
set con="nothing
end sub //如果没有查到内容,在结果中不会报错,也不会弹出窗口
9.
vbcr----chr(13)回车符
vblf----chr(10)换行符
vbcrlf----chr(13)+chr(10)结合
10. 从stel run has two ways
11. 对于时间,日期等的格式检查(一种是正则表达式,另一种是输出对比,如果不好对比,用mid截取一部分对比)
12. 对于一些列表框或树结构,如果发生结点名称发生变化,此时如果报没有彼配的对象,此时可以把更改后面的名称如_2
13. 对于动态变化的对象,要分清是对像还是属性;对于属性可以用gettoproperty("ddd");得到,而对于由于动态无法识别对像可以用描述性脚本,如:
Set ōbject= Descrīption.Create()
Object("regexpwndclass").Value="HtmlButton"
Object("regexpwndtitle").Value="登陆"
browser("ss").page("a").button(Object).click
14. 对于属性是变化的,有时可以把该属性从识别对象里删除
15. 从系统的文件中获取信息及删除文件get_file_infor("c:\she.mpg")
function get_file_infor(url)
dim fso,f
set fso="createobject(""scrīpting.filesystemobject")
set f="fso.getfile(url)
msgbox(f.datecreated)
f.name:f.size:f.type
fso.deletefile(url)'/////删除文件
end function
--------获取文件夹里所有文件信息get_folder_infor("c:\kai")
function get_folder_infor(folder)
dim fso,f,f1,n
set fso="createobject(""scrīpting,filesystemobject")
set f="fso.getfolder(folder)
set fc="f.files
for each f1 in fc
select case f1.name
case"kai.mpg","she.mpg","dd.mp3"
end select
next
end function
16. 四舍五入可以在后面+0.5,进行自动解决
17. y="-------waitproperty(""visible",true,10000)
18.
on error resume next
on error goto o
19. window("").wintreeview("systreeview32").type micctrldown+"p"+micctrlup
20. 定义数组name="array(1,2,""aa","bb");name(0)=1
21. 进行日期YYYY-MM-DD的格式检查:
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches //Create variable.
Set regEx = New RegExp //Create a regular expression.
regEx.Pattern = patrn //Set pattern.
regEx.IgnoreCase = True //Set case insensitivity.
regEx.Global = True //Set global applicability.
Set Matches = regEx.Execute(strng) //Execute search.
For Each Match in Matches //Iterate Matches collection.
RetStr = RetStr & "Match found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
RetStr = RetStr & Match.Value & "'." & vbCRLF
Next
RegExpTest = RetStr
End Function
date_pattern="^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((01,3-9])|(1[0-2]))-(29|30)))))$"
result_message=RegExpTest(date_pattern, inputbox("请你输入要检查的时间:"))
Select case result_message
case ""
MsgBox("你输入的日期格式与标准不匹配")
case else
MsgBox(result_message)
end select
22. 返回一个字符串在另一字符串中的位置instr(string1,string2)
23. 有时回放出现找不到对象时,可能不是由于你的代码问题,而是由于你的操作系统等设置问题。比如:你录制一个选择磁盘中的文件动作,会录制为:
.winlistview("").drap 46,99
.winlistview("").draponitem "she.mp3"
下次录制的时候,如果你的系统文件改为不显示扩展名,下次执行的时候,QTP就找不到she.mp3,只能找到she
-
QTP数据表数据库操作(z)
2008-09-03 10:42:53
1、Datatable方法GetRowCount
DataTable.GetSheet("Action1").GetRowCount //获取总行数
使用如:
CountNum=DataTable.GetSheet("Action1").GetRowCount2、Datatable方法SetNextRow
DataTable.GetSheet("Action1").SetNextRow //取得下一行
datatable.setcurrentrow(n) //取得某一行
3、Datatable方法getcurrentrow //获得当前行数
例如:datatable.getcurrentrow4、获取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").Value5、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 sub10、"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方法
Next12、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
Wend14、while方法2,参数化时选择:dtLocalSheet
Dim CountNum,i
i=1
CountNum=DataTable.GetSheet("Action1").GetRowCount
While i<=CountNumDataTable.GetSheet("Action1").SetCurrentRow(i)
----xuhuanti---
i = i+1
Wend -
(qtp)Reporter对象的ReportEvent方法
2008-09-03 10:41:35
描述
在test result中报告测试结果。
语法
Reporter.ReportEvent EventStatus, ReportStepName, Details [, in]
Argument Type Descrīption EventStatus Number or pre-defined constant 状态值:
0 或 micPass:将本步骤的运行结果状态设置为“Pass”,并向Result中产生报告信息。
如果想在报告中生成“通过”报告,用本状态值。
1 或 micFail: 将本步骤的运行结果状态设置为“Fail”,并向Result中产生报告信息。当脚本中运行本语句时,整个测试的结果状态是“fails”。
如果想在报告中生成“失败”报告,用本状态值。如果运行了本语句,则整个测试的状态为“Fail”。
2 或 micDone:仅向Result中产生报告信息,但不影响整个测试的结果状态。
如果想在报告中生成“完成”报告,用本状态值。
3 或 micWarning: S向Result中产生报告信息,但是不会中断测试的运行,也不影响测试的 pass/fail status。
如果想在报告中生成“警告”报告,用本状态值。运行这个语句后,整个测试结果状态为“Warning”。
ReportStepName String 将在报告中显示的步骤名称(object name). Details String 报告的详细信息。这些信息是本条报告的“Details”信息。 in N/A Not in use 举例: 下面的例子使用ReprotEvent方法来报告一个失败信息。
Reporter.ReportEvent 1, "Custom Step", "The user-defined step failed."
或
Reporter.ReportEvent micFail, "Custom Step", "The user-defined step failed."
在追求完美的过程中,享受着快乐与痛苦!
标题搜索
我的存档
数据统计
- 访问量: 37755
- 日志数: 85
- 建立时间: 2008-03-13
- 更新时间: 2011-08-17