QTP
软件功能自动测试工具。
1)QTP是一个侧重于功能的回归自动化测试工具
2)QTP支持的脚本语言是VBScript
3)QTP支持录制和回放的功能。
4)一个有用的工具:ObjectSpy,可以用来查看Run-time object和Test object属性和方法。
5)QTP通过三类属性来识别对象:a)Mandatory; b)Assitive; c)Ordinalidentifiers。
6)Object Repository(OR)是QTP存储对象的地方。
7)Action是QTP组织测试用例的具体形式,拥有自己的DataTable和Object Repository,支持Input和output参数。
8)如3)所述,一个test中,多个action的流程组织,只有通过Keyword视图查看和删除,在Expert视图中没有办法看到。
9)调用Action可以通过菜单Insert->Callto *** 来实现。
10)QTP提供excel 形式的数据表格DataTable,可以用来存放测试数据或参数。
11)环境变(EnvironmentVariables)。
12)QTP可以引用外部的VBS代码库
13)QTP默认为每个test提供一个测试结果,包括Passed,Failed,Done,Warning和information几种状态类型
VBScript:
单引号设置备注,双引号进行使用
1 设置脚本间的间隔时间
Wait(2),单位:秒
2 循环语句while
i=0
do while(i<10)
Window("Opera").Restore
Window("Opera").WinObject("OperaWindowClass").Click 446,232
Window("Opera").WinObject("OperaWindowClass").Click 461,278
i=i+1
loop
3 循环语句for
For i=1 to 3
Window("Opera").Restore
Window("Opera").WinObject("OperaWindowClass").Click 446,232
Window("Opera").WinObject("OperaWindowClass").Click 461,278
Next
4 判断语句
Do while(i<20)
Browser("XX项目").Page("XX项目").Frame("wap").Link("啤酒").Click
wait(2)
Browser("XX项目").Page("XX项目").Frame("wap_2").Link("商铺详情").Click
wait(2)
i=i+1
If i=5 Then
Exit do
End If
Loop
5 With语句
Do while(i<20)
With Browser("XX项目")
.Page("XX项目").Frame("wap").Link("生活家居").Click
.Page("XX项目").Frame("wap_5").Link("出租(火爆招租中)").Click
.Page("XX项目").Sync
With .Page("XX项目")
.Frame("wap_6").Image("image").Check CheckPoint("image")'检查点
.Frame("wap_6").Link("返回XX首页").Click
.Sync
.Frame("wap").Check CheckPoint("生活家居")'检查点
End with
End with
i=i+1
If i=3 Then
i=21
End If
Loop
6 检查点
Browser("XX项目").Page("XX项目").Frame("wap").Link("生活家居").Click
Browser("XX项目").Page("XX项目").Frame("wap_5").Link("出租(火爆招租中)").Click
Browser("XX项目").Page("XX项目").Sync
Browser("XX项目").Page("XX项目").Frame("wap_6").Image("image").Check CheckPoint("image")'检查点
Browser("XX项目").Page("XX项目").Frame("wap_6").Link("返回XX首页").Click
Browser("XX项目").Page("XX项目").Sync
Browser("XX项目").Page("XX项目").Frame("wap").Check CheckPoint("生活家居")'检查点
7
引用函数
Function hjq(i)
msgbox("hjq")
End Function
Do while(i<20)
'开始
Browser("XX项目").Page("XX项目").Frame("wap").Link("啤酒").Click
wait(2)
Browser("XX项目").Page("XX项目").Frame("wap_2").Link("商铺详情").Click
'详情
i=i+1
If i=3 Then
i=21
End If
Call hjq(i)
Loop
8
引用action
录制action1,在step->action properties中设置该action为reuseable action
录制action2,在inser->call to exiting action,选择action1
OK
9
参数化
在keyword view中设置对象的value为参数,并设置值
With Browser("XX项目_2").Page("XX项目")
With .Frame("wap_2")
.WebEdit("key").Set "1"
.WebButton("搜").Click
End With
.Frame("wap_3").Link("重新搜索").Click
With .Frame("wap")
.WebEdit("key").Set DataTable("p_Text", dtGlobalSheet)
.WebButton("搜").Click
End With
.Sync
End With
10
Vbs随机读取一行文本内容
'随机读取文件中的一行
randomize
set fso=createobject("scrīpting.filesystemobject") '创建文件系统对象
set a=createobject("scrīpting.dictionary") '类似于二维数组
set file=fso.opentextfile("D:\hjq.txt") '打开文件
do while file.atendofstream<>true
m=m+1 'm记录文件中文本行数
a.add m,file.readline 'file.readline读取某行记录
loop
file.close '关闭文件
h=int(rnd*m)
msgbox "第" & h & "行: " & a(h) ,4096,"随机内容"
msgbox "第1行: " & a(1) ,4096,"内容"
msgbox "第2行: " & a(2) ,4096,"内容"
msgbox "第3行: " & a(3) ,4096,"内容"
11
二维数组的使用
set a=createobject("scrīpting.dictionary") '类似于二维数组
a.add 0,"返回XX首页"
a.add 1,"返回XX首页"
a.add 2,"返回XX首页"
a.add 3,"返回XX首页"
For i=0 to 3
With Browser("XX项目").Page("XX项目")
With .Frame("wap")
.WebEdit("key").Set "1"
.WebButton("搜").Click
End With
.Frame("wap_2").Link(a(i)).Click
.Sync
End With
Next
12
从文件读取文本,并赋予参数
set fso=createobject("scrīpting.filesystemobject") '创建文件系统对象
set a=createobject("scrīpting.dictionary") '类似于二维数组
set file=fso.opentextfile("D:\hjq.txt") '打开文件
wait(2)
do while file.atendofstream<>true
With Browser("XX项目").Page("XX项目")
With .Frame("wap")
.WebEdit("key").Set file.readline
.WebButton("搜").Click
End With
.Frame("wap_2").Link("返回XX首页").Click
.Sync
End With
loop
file.close '关闭文件
13
读取csv文件并分割字符串
Dim aasplit
set fso=createobject("scrīpting.filesystemobject") '创建文件系统对象
set file=fso.opentextfile("D:\hjq.csv") '打开csv文件
wait(2)
Do while file.atendofstream<>true
aasplit=split(file.readline,",")'用,分割字符串
For i=0 to UBound(aasplit)
With Browser("XX项目").Page("XX项目")
With .Frame("wap")
.WebEdit("key").Set aasplit(i)
.WebButton("搜").Click
End With
.Frame("wap_2").Link("返回XX首页").Click
.Sync
End With
Next
loop
file.close '关闭文件
14
怎样识别弹出的web窗口和对象
1,
进入object identification
2,
在enviroment中选择web
3,
选择某个test object
class,如browser
4,
添加mandatory properties
5,
确定
6,
重新录制脚本
7,
OK
15
Vbs写文件
set fs =createobject("scrīpting.filesystemobject")
if (fs.fileexists("c:\hjq.txt")) then
set f =fs.opentextfile("c:\hjq.txt",8)
f.write chr(13)+chr(10)
f.write "hello"
f.write chr(13)+chr(10)
f.writeline "beijing"
f.close
else
set f=fs.opentextfile("c:\hjq.txt",2, true)
f.writeblanklines 2 '写入2个空行
f.write "china"
f.close
end if
16
基本函数
QTP的基本使用函数:
1, 获取对话框相应的文字:
GetVisible Text
2, 查找相应的字符串: instr (1,查找目标字符串,所查找的字符串)
3, 随机数的获取: Randomnumber.Value() 或cstr(int(Rnd*10)+1)
4, 等待函数: Wait(秒数)
5, 获取数组下标: UBound (数组名)
6, 拆分数组: Split(MyString, ",", -1, 1)
7, 可执行步骤: OptionalStep
8, 报告信息: Reporter.ReportEvent 3, "Save Step", "Out of cycle!"
9, 判断对话框是否存在: .exist
10,事件过滤函数:
Reporter.Filter=过滤条件(0,1,2,3),
0代表显示所有的error和warning,
1,显示error,
2,显示waining
3,任何error和warning都不显示。
11,循环函数:do … loop until,for…to… then next,while.
12,数据表格:DataTable,向外赋值,Dim aa = DataTable.value(“CellingName”,”ActionName”).
13,获得对象属性的三种方法GetTOProperty获得程序中对象当前的属性,GetTOProperties获得当前属性所有集合,GetROProperty获得的是录制时对象所获得的属性。
14,检查点方法check和输出指定属性值output。
15,函数Description,可以获得某页面同标签的属性进行操作。
16,函数nagative可以随便跳转页面到指定的URL。
17,函数Object可以获得当前页面同属性的控件。
18,函数Focus可以让控件获得焦点,函数Blur则是失去焦点,click单击,dbclick双击。
19,函数setAttribute可以设置控件属性,getAttribute可以获得属性。
四种参数类型:
1.测试、操作或组件参数
2.数据表参数
3.环境变量参数
4.随机数字参数
环境变量:
1.用户定义的内部环境变量
2.用户定义的外部环境变量
3.内置环境变量
输出值类型:
1.标准输出值
2.文本和文本区输出值
3.数据库输出值
4.XML输出值
存储输出值:
1.测试、操作或组件参数
2.运行时数据表
3.环境变量
用例:
SystemUtil.Run "C:\Program Files\HP\QuickTest Professional\samples\flight\app\flight4b.exe" '运行程序 '
If dialog("Login").Exist(2) Then '登陆类2秒钟不存在'
dialog("Login").Activate
'WinEdit("Agent Name:").Set("test") '对象之间是存在父子关系的
dialog("Login").WinEdit("Agent Name:").Set("aaas")
dialog("Login").WinEdit("Password:").SetSecure ("4cdf736a021f3e5c2cc8d24f64840eb2035000ec")
dialog("Login").WinButton("OK").Click
If window("Flight Reservation").Exist(8) then
isok=window("Flight Reservation").CheckProperty("text", "Flight Reservation",2000)
msgbox "运行时对象值为" & window("Flight Reservation").GetROProperty("text")
msgbox "测试时对象值为" & window("Flight Reservation").GetTOProperty("text")
If isok Then
Reporter.ReportEvent micPass,"存在用户名和正确密码登录测试","测试通过"
print "存在用户名和正确密码登录测试,测试通过"
Else
Reporter.ReportEvent micFail,"存在用户名和正确密码登录测试","测试未通过"
end if
window("Flight Reservation").Close
else
reporter.ReportEvent micFail,"存在用户名和正确密码登录测试","测试未通过_登陆成功窗口未打开"
print "存在用户名和正确密码登录测试,测试未通过_登陆成功窗口未打开"
end if
else
reporter.ReportEvent micFail,"存在用户名和正确密码登录测试","测试未通过_登陆窗口未打开"
print " 存在用户名和正确密码登录测试,登陆窗口未打开,测试未通过"
end if