关于软件测试,其实软件测试与产品测试QC很相同。 其实软件开发与软件测试是两码事。 首先,软件安装
按照提示,勾选"安装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,3Dialog("NMS登录").WinEdit("Edit").Set "201"Dialog("NMS登录").WinEdit("Edit_2").SetSelection 0,2Dialog("NMS登录").WinEdit("Edit_2").Set "7"Dialog("NMS登录").WinButton("确定").Clickwait(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.WidthHeight = 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").Activatewait(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").Activatewait(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 = Truestr = 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)").ClickDialog("MySnmp").WinButton("否(N)").Click 这段代码提供了性能日志记录、关键部分截屏功能,测试内容是进入软件、随机点击窗体按钮(产生对话框的直接关闭对话框)、键盘随机敲击、软件窗体进行随机点击。考虑到程序的响应,加入了wait进行等待(没有使用同步工具)。可以作为一个比较通用的模板(事实上它本身就是来自于书本的模板)。 关于软件测试可以共同讨论。end