说明:本文中代码段主要参考自《QTP自动化测试实践》。
一、软件安装
按照提示,勾选"安装Microsoft Script Debugger",完全安装即可。
二、软件启动
选择测试对象所需要加载的相应插件,在欢迎窗口选择“Blank Test”。
三、自带资源
F1可以获得丰富的帮助文档,菜单Help—>Product Feature Movies中包含了几段示例视频,同时在开始菜单的QTP程序目录中可以看到练习示例程序flight。
四、进行测试
QTP使用的是VBScript作为测试脚本语言,因此需要对它有一定的了解,比如数据类型、循环结构等,此处不再赘述。
菜单Automation—>Record and Run Settings进行设置。在针对“Windows Application”的测试中,有几种选项,“Record and run test on any open Windows-based application”用于录制和运行所有系统中出现的应用程序,“Record and run only on”需要进一步指定录制和运行的程序,又分为三种:
"Application opened by QuickTest" 仅录制和运行由QTP调用的程序,调用方法:
'创建Wscript的Shell对象
Set Shell = CreateObject("Wscript.Shell")
'通过Shell对象的Run方法启动记事本程序
Shell.Run "notepad"
'程序可以使用绝对路径,但文件夹名不能含有空格
另一种方法
Invokeapplication "E:\SVN\debug\demo1.exe"
以及
SystemUtil.Run "E:\nms\demo1.exe","E:\nms\demo1.exe","open"
"Applications opened via the Desktop(by windows shell)"仅录制由开始菜单、桌面或者从Windows文件浏览器启动的程序。
“Application specified below”录制列表中的程序。
设置好之后就可以进行Record,QTP将会记录下用户的相关操作。使用Run可以重现。录制好的脚本可以直接编辑,方便调节细节和增加功能,也便于捕捉对象。QTP的功能不限于此,这里不深入研究了。下面利用猴子测试各个模块简单学习下脚本语言的应用。
五、猴子测试
猴子测试也叫随机测试,原理是利用测试工具随机产生键盘敲击和鼠标点击事件,就像一个猴子在狂敲键盘。在这次项目开发中,猴子测试确实发现了不少异常和错误,大量重复运行由计算机完成,节约了不少人力。以下是用到的代码,其中一些功能模块没有使用到,因此被注释掉了。
Set myapp = CreateObject("Wscript.Shell")
myapp.Run "C:\fa ke\flight4a.exe"
Dialog("NMS登录").WinEdit("Edit").SetSelection 0,3
Dialog("NMS登录").WinEdit("Edit").Set "201"
Dialog("NMS登录").WinEdit("Edit_2").SetSelection 0,2
Dialog("NMS登录").WinEdit("Edit_2").Set "7"
Dialog("NMS登录").WinButton("确定").Click
wait(3)
Window("MySnmp").WinListView("SysListView32").Click 111,46
'开始性能计数器记录
'SystemUtil.Run "logman", "start perf_log"
'利用DotNetFactory获取屏幕高度和宽度
Set var_CreateInstance = DotNetFactory.CreateInstance("System.Windows.Forms.Screen", "System.Windows.Forms")
Width = var_CreateInstance.PrimaryScreen.WorkingArea.Width
Height = var_CreateInstance.PrimaryScreen.WorkingArea.Height
'MsgBox Width & "," & Height
'注意:WorkingArea不包括任务栏、停靠窗口和停靠工具栏
'通过WMI对象获取屏幕高度和宽度
'Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
'Set colItems = objWMIService.ExecQuery( _
' "SELECT * FROM Win32_DesktopMonitor",,48)
'For Each objItem in colItems
' Height = objItem.ScreenHeight
' Width = objItem.ScreenWidth
'Next
'MsgBox Width & "," & Height
' 循环执行测试次数
For i = 1 To 20
For j = 1 To 4
z = RandomNumber(1,7)
Window("MySnmp").WinToolbar("ToolbarWindow32").Press z
If z = 5 Then
Window("MySnmp").Dialog("MySnmp").WinButton("确定").Click
Elseif z = 6 Then
Window("MySnmp").Dialog("配置").WinButton("取消").Click
Elseif z = 7 Then
Window("MySnmp").Dialog("重启").WinButton("取消").Click
End If
wait(2)
Next
' 初始化随机数产生器
'Randomize
' ' 随机选取0到屏幕宽度之间的整数
'set x = Int((Width * Rnd+0) )
' ' 随机选取0到屏幕高度之间的整数
'set y = Int((Height * Rnd+0) )
' 'MsgBox x & "," & y
' 也可使用RandomNumber
x = RandomNumber( 0, Width)
y = RandomNumber(0,Height)
'MsgBox x & "," & y
' 通过Extern访问Windows API函数
' Extern.Declare micVoid, "MouseEvent","user32.dll","mouse_event",micInteger,micInteger ,micInteger ,micInteger ,micInteger
'把鼠标移到该位置
'Extern.MouseEvent 80+1,10, 100, 0, 0
' 鼠标左键单击
' Extern.MouseEvent 2+4,0,0,0,0
' Extern.Declare micInteger, "WindowFromPoint","user32.dll","WindowFromPoint",micInteger,micInteger
' Msgbox Extern.WindowFromPoint (0,0)
' 先在C#中包装好Windows API函数,然后在QTP中通过DotNetFactory访问
'Set APIINstance = DotNetFactory.CreateInstance("WinAPI.MouseAPI", "C:\Documents and Settings\Administrator\桌面\snmp\MonkeyTest2\MonkeyTest2\WinAPI.dll")
Set APIINstance = DotNetFactory.CreateInstance("WinAPI.MouseAPI", "C:\Users\WY\Desktop\MonkeyTest2\MonkeyTest2\WinAPI.dll")
' 鼠标移到该位置
APIINstance.MoveMouse x,y
'记录测试信息
Reporter.ReportEvent micDone, "MouseMove", "鼠标移动到:" & x & "," & y
'鼠标左键单击
Window("MySnmp").Activate
wait(1)
APIINstance.ClickMouse "Left", x , y , 0 , 0
' 记录测试信息
Reporter.ReportEvent micDone, "MouseClick", "鼠标左键单击位置:" & x & "," & y
StrArray = Array("1234567890" , "abcdefghijklmnopqrstuvwxyz ","~!@#$&*_")
n = RandomNumber(0, 2)
str = StrArray(n)
' 'msgbox str
'
' ' 调用.NET的SendKeys类的SendWait方法来输入字符串
Window("MySnmp").Activate
wait(1)
Set SendkeyInstance = DotNetFactory.CreateInstance("System.Windows.Forms.SendKeys","System.Windows.Forms")
SendkeyInstance.SendWait str
'SendkeyInstance.SendWait str
' 取得当前时间
str =Time
' 由于时间字符串不能直接作为文件名,Windows文件名不允许包含“:”,因此使用正则表达式把它替换掉
Set regEx = New RegExp
regEx.Pattern = ":"
regEx.IgnoreCase = True
regEx.Global = True
str = regEx.Replace(str, "_")
'Set regEx1 = New RegExp
'regEx1.Pattern = "\"
'regEx1.IgnoreCase = True
'regEx1.Global = True
'str1 = regEx1.Replace(str, "_")
'str2 = regEx.Replace(str1, "_")
str2 = str &"_" & RandomNumber(0,1000)
' 截屏
Window("MySnmp").CaptureBitmap "C:\Users\WY\Desktop\MonkeyTest2\" & str2 & ".png"
'Window("MySnmp").CaptureBitmap "C:\Documents and Settings\Administrator\桌面\snmp\MonkeyTest2\" & str2 & ".png"
'Dialog("Microsoft Visual C++ Debug").CaptureBitmap "C:\Users\WY\Desktop\Err_" &str2 & ".png"
Next
'结束性能计数器记录
'SystemUtil.Run "logman", "stop perf_log"
wait(10)
Window("MySnmp").Close
'Dialog("Microsoft Visual C++ Debug").WinButton("中止(A)").Click
Dialog("MySnmp").WinButton("否(N)").Click
这段代码提供了性能日志记录、关键部分截屏功能,测试内容是进入软件、随机点击窗体按钮(产生对话框的直接关闭对话框)、键盘随机敲击、软件窗体进行随机点击。考虑到程序的响应,加入了wait进行等待(没有使用同步工具)。可以作为一个比较通用的模板(事实上它本身就是来自于书本的模板)。