1、,自动化测试 -QTP基础培训,2019年1月16日星期三,Copyright 2006,2,内 容,基础知识 基本操作 高级应用,Copyright 2006,3,什么是自动化测试?,Testing employing software tools which execute tests without manual intervention. Can be applied in GUI, performance, API, etc. testing. 使用自动化测试工具来进行测试,这类测试一般不需要人干预,通常在GUI、性能等测试中用得较多。,Copyright 2006,4,什么是自动化
2、测试?,The use of software to control the execution of tests, the comparison of actual outcomes to predicted outcomes, the setting up of test preconditions, and other test control and test reporting functions. Commonly, test automation involves automating a manual process already in place that uses a f
3、ormalized testing process.使用软件来控制测试的执行,实际输出和预期输出的对比,测试前提条件的构建,以及其他测试控制条件和测试报告功能.通常,测试自动化涉及自动化对一个已经使用了正式的测验流程的手工过程。,Copyright 2006,5,自动化测试的好处,Copyright 2006,6,自动化测试的流程,Copyright 2006,7,QTP简介,Mercury QuickTest Professional 简称QTP,是Mercury公司研发的一款先进的自动化测试解决方案,用于创建功能和回归测试. 其特点: 操作简单:可自动捕获、验证和重放用户的交互行为 脚本直
4、观:使用无需脚本的关键词视图来表现测试的每个步骤。 通过录制来记录每个步骤,并通过活动屏幕与一个集成截屏相结合。能很便捷地插入、修改、数据驱动(data-drive)和移除测试步骤 Data Table:可以将测试数据输入数据表(Data Table),拥有和Excel同样完善的功能特性,是一个集成的电子数据表格. 专家视图:高级测试人员可以在专家视图(Expert View)中查看和修改他们的测试,Copyright 2006,8,1.测试脚本前期准备首先,确定测试对象,即所要测试的功能,操作步骤,输入数据及期望的测试结果。其次,应该检查一下QuickTest的设定,如Test Settin
5、gs(【Test】【Settings】)以及Options对话窗口(【Tools】【Options】),以确保QuickTest会适当的录制并储存信息。例如,你应该确认一下QuickTest的Object Repository是以什么模式储存信息的。 2.录制测试脚本当你浏览你的网站或是操作你的应用程序时,QuickTest会在Keyword View(关键字视图)中以表格的方式显示录制的操作步骤。每一个操作步骤都是使用者在录制时的操作,如在网页上点选一个超级链接(link),或是按下窗口上的按钮。,QuickTest测试流程,Copyright 2006,9,3.加强测试脚本在测试脚本中加入
6、检查点(以检查网页超级链接、对象属性或是字符串),验证应用程序的功能是否正确。 将录制的固定值(hard code)参数以取代,让你使用多组的数据测试你的应用程序。 使用逻辑(logic)或是条件(conditional)判断式,让你可以进行更复杂的测试。 4.脚本除错运行脚本,确定脚本能够正常地运行。 5.执行测试脚本执行脚本,检查所检查的功能点功能是否正确 6.分析执行结果分析执行结果,确定问题所在 7.缺陷反馈将发现的问题回报到Quality Center(TestDirector)的数据库中。,QuickTest测试流程,Copyright 2006,10,窗口介绍,Copyright
7、 2006,11,常用快捷键,Command Shortcut Key Record (普通录制) F3 Run (运行) F5 Stop (停止) F4 Run from Step (丛当前步骤运行) CTRL+F5 Analog Recording (模拟录制) SHIFT+ALT+F3 Low Level Recording(低级录制) CTRL+SHIFT+F3 Object Repository(打开对象库) CTRL+R Step Into (单步调试运行到) F11 Step Over (跳出断点) F10 Step Out (跳过断点) SHIFT+F11 Run to Ste
8、p (运行到) CTRL+F10 Add to Watch (添加到观察表) CTRL+T,Copyright 2006,12,基础知识 基本操作 高级应用,内 容,Copyright 2006,13,脚本录制,方法:确定测试对象,操作步骤,输入数据。如:在QTP演示系统中录制一个订票过程的测试脚本 测试对象:http:/ 订票功能 场景描述:用户jiangxr订一张从 New yourk 到 FrankFurt 的往返机票,要求是头等舱,时间: 去: 7月5号 ; 返:8月15号操作步骤:1.用已经注册好的用户登录系统,User:jiangxr/Passwor:1234562.进入订票系统,
9、输入订票信息3.提交,并关闭订票系统。 脚本录制过程:1.选择“测试”“录制”,或单击“录制”按钮。将打开“录制和运行设置”对话框,Copyright 2006,14,脚本录制,2.从“类型”列表中选择一种浏览器,并确认“地址”框中的 URL 为 http:/。 3.切换到Windows应用程序TAB页,确认“当测试关闭时关闭浏览器”和“不在已经打开的浏览器上录制和运行”处于选定状态。该设置可防止录制会话期间无意中录制在各种 Windows 应用程序(例如电子邮件)上执行的操作。,Copyright 2006,15,脚本录制,4.单击“确定”开始脚本录制。 之后,QTP自动打开IE界面,并进入
10、订票系统的登陆界面, 然后,根据预定义好的操作步骤进行订票操作。 最后,订票操作完成后,退出订票系统,停止录制。(界面如下),Copyright 2006,16,脚本回放,5.运行录制好的脚本,根据测试结果反馈界面的反馈结果,检测 录制好的脚本是否能够正确运行。,Copyright 2006,17,编辑脚本,编辑录制好的测试脚本: 添加操作步骤 增加检查点 测试数据参数化 创建输出值,Copyright 2006,18,编辑脚本添加操作步骤,对已经录制好的脚本,我们还可以插入操作步骤。如:在以上脚本录制过程中,信息输入时没有选中图中的复选框,以下在输入Last输入框后插入操作步骤选中该复选框。
11、,Copyright 2006,19,方法: 1.在脚本关键视图中,将光标锁定到Last输入框中。,编辑脚本添加操作步骤,Copyright 2006,20,编辑脚本添加操作步骤,方法: 2.右键,在界面中选择“插入新步骤”,Copyright 2006,21,编辑脚本添加操作步骤,方法: 3.在中选择“步骤生成器” 4.点击控件 进入步骤选择对象界面 5.点击 从应用程序中选择对象,Copyright 2006,22,编辑脚本增加检查点-类型,Copyright 2006,23,编辑脚本增加检查点-方法,在录制或编辑时添加检查点 使用“插入”菜单上的命令,或者单击“测试”工具栏上的“插入检查
12、点”按钮旁边的箭头。这将显示与关键字视图的选定步骤相关的检查点选项的菜单。 只在编辑时添加检查点 右键单击关键字视图中您要添加检查点的步骤,然后选择“插入标准检查点”。 右键单击 Active Screen 中的任意对象,然后选择“插入标准检查点”。可使用该选项为 Active Screen 中的任意对象创建检查点(即使该对象不是关键字视图中任一步骤的组成部分),Copyright 2006,24,编辑脚本数据参数化(一),方法: 1.将光标锁定到“关键字视图”中要参数化行“起始地”。,为了使用不同测试数据进行测试,需要使用将数据参数化。如:订购多张从不同城市出发的机票,Copyright 2
13、006,25,编辑脚本数据参数化(二),方法:2.点击,3.之后,在数据表中添加“departure”参数作为新的一列,并在其下面的第一行中插入 New York,4.在表中添加第二张或第三张订单中的起始地。那么,此时运行脚本前,设置运行次数,及重复运行时脚本执行时机。(无需重新打开网页),Copyright 2006,26,基础知识 基本操作 高级应用,内 容,Copyright 2006,27,规范例程-模版应用,模版应用 所有脚本使用统一的模版 方法: 新建一个文本,输入一些新建Action时常包含的信息,然后保存为ActionTemplate.MST文件,并复制到QTP/dat目录下;
14、这样每次新建action都会包含固定的信息了; 例如: -脚本说明- 产品版本: 测试员: 编写日期: 测试功能: 脚本类型: 被测试对象初始状态:进展程度: -脚本内容-,Copyright 2006,28,规范例程-脚本规范化,脚本规范化 加入必要的注释行,增加脚本的可读性 数据参数化 检查点的加入 执行结果输出,Copyright 2006,29,方法一:新建脚本时,默认会出现加载管理项设置界面。,加载管理项设置,Copyright 2006,30,方法二: 选择菜单栏中测试-设置,点击修改可进行加载项设置。,加载管理项设置,Copyright 2006,31,系统参数-录制模式设置,录
15、制模式设定 方法:tools-web event recording configuration 这里有三个录制级别可以设置分别为最低,中等,高级,Copyright 2006,32,系统参数-捕捉级别设置,对于Action screen捕捉不精确的问题,可以通过QTP Action screen的设置来解决,方法: 1.点击toolsoptions,Copyright 2006,33,Action复用,将复用部分(如:登陆,退出)录制成为单独的Action并且单独保存下来 对这两个Action作设置 方法: 关键字视图中,选中所要设置的Action,右键-操作属性 选中“可重复操作”复选框,
16、调用Action 在QTP主页面选择 insert -call to existing Action,Copyright 2006,34,对象库和对象属性,对象库 导出对象库信息*.tsr文件 添加对象到库 对象更新 对象高亮显示 对象属性识别,对象管理器 对象库导入导出*.xml,关联库 对象库与操作关联,注:操作方法见具体演示,Copyright 2006,35,Datatable 应用,动态添加表格与数据 格式: DataTable.AddSheet(SheetName) 例如: Variable=DataTable.AddSheet (“MySheet“).AddParameter(“
17、Time“, “8:00“) 数据导出 格式: DataTable.Export(FileName) 例如: DataTable.Export (“C:flights.xls“) 从本地excel文件中导入数据到数据表 格式: DataTable.ImportSheet(FileName, SheetSource, SheetDest) 例如: DataTable.AddSheet(“用户登陆信息“) DataTable.ImportSheet “E:beacard.xls“,1,“用户登陆信息“ 指定sheet页数据导出到文件 DataTable.ExportSheet(FileName,
18、DTSheet),Copyright 2006,36,Datatable 应用(续),获取当前行数 row=DataTable.GetCurrentRow msgbox row 获取总行数 rowcount= DataTable.GetSheet(“用户登陆信息“).GetRowCount msgbox rowcount获取当前行数据 For i=1 to rowcount DataTable.SetCurrentRow (i) FormulaVal=DataTable.RawValue (“用户名“, “用户登陆信息“) msgbox FormulaVal DataTable.SetNext
19、Row Next,Copyright 2006,37,文件读操作 Const ForReading=1,ForWriting=2,ForAppending=8 Dim i,fin, MyStr ,Myinfo Dim fso, f,s Set fso=CreateObject(“Scripting.FileSystemObject“) 获取 当前文件字节数Set f=fso.GetFile(“e:kahao.txt“) s = UCase(f.Name) & “ uses “ & f.size & “ bytes.“s=f.size 读当前文件的所有信息 set f=fso.OpenTextF
20、ile(“e:kahao.txt“, ForReading)fin=f.readAllmsgbox fin读第一组数据 set f=fso.OpenTextFile(“e:kahao.txt“, ForReading)i=MId(fin, 1,19)msgbox i 截取数据MyStr = MId(fin, 20,s)msgbox MyStr 重新写截取数据到文件set f=fso.OpenTextFile(“e:kahao.txt“, ForWriting)f.WriteBlankLines (0)f.WriteLine MyStr,本地文件读、写,Copyright 2006,38,获取界
21、面值并写入文件,变量定义 Dim p,fso,f Const ForWriting=2 读取界面某域的属性 p=Browser(“teller“).Page(“teller“).Frame(“content_2“).WebEdit(“CLIENT_NO“).GetROProperty(“value“) Set fso = CreateObject(“Scripting.FileSystemObject“) fso.CreateTextFile “d:/client_id.txt“ Set f = fso.GetFile(“d:/client_id.txt“) Set ts = f.OpenAs
22、TextStream(ForWriting, TristateUseDefault) ts.Write p ts.Close,Copyright 2006,39,获取对象属性,GetRoProperty从应用程序界面上获取对象属性(即,是脚本运行时,获取的对象动态属性值),例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是QTP为识别该对象创立的描述属性; GetToproperty从对象库中描述对象的属性,静态值 GetToProperties获取用于标识对象的属性集;对于这个集合,有count等属性。如: Browser(“te
23、ller“).Page(“teller“).Frame(“content“).WebList(“ACCT_STATUS“). GetROProperty(“value“) = “,Copyright 2006,40,模拟键盘操作,如:模拟回车操作 Set wshshell=createobject(“wscript.shell“) wshshell.sendkeys“enter“,Copyright 2006,41,等待时间应用(Do-Loop),第一种: 系统必须作出响应的情形,无须跳出,只待系统正常,否则手动干预: Do If Browser(“teller“).Page(“teller“
24、).Frame(“content“).WebList(“ACCT_STATUS“). GetROProperty(“value“) = “ Then Else Exit Do End If Loop,Copyright 2006,42,等待时间应用(WaitProperty),格式: object.WaitProperty (PropertyName, PropertyValue, TimeOut),具体的应用如: If Browser(“teller“).Page(“teller“).WebElement(“手续费打印完毕! “).WaitProperty(“innertext“,“手续费打
25、印完毕!“,60000) = False Then Browser(“teller“).Page(“teller“).Image(“ToolBar_Refresh_0“).Click Elseif Browser(“teller“).Dialog(“Microsoft Internet Explorer“).Exist(10) Then Browser(“teller“).Dialog(“Microsoft Internet Explorer“).WinButton(“确定“).Click Browser(“teller“).Page(“teller“).Image(“ToolBar_Refr
26、esh_0“).Click Reporter.ReportEvent micFail, “发出托收票据“, “交易失败“ ExitAction(1) End If,Copyright 2006,43,While语句(弹出框存在性),定义弹出框存在性状态,使用循环语句判断 Dim blnDone,counter blnDone=false counter=1 While blnDone Wait (1) blnDone=Window(“iexplore“).WinObject(“OK“).Exist counter=counter+1 If counter=10 then blnDone=Tru
27、e End if Wend,Copyright 2006,44,Report 应用,脚本执行过程中,向执行报告中添加执行结果格式: report.ReportEvent status,”name”,”details”Status的设定分为四种:0或者micpass1或者micfail2或者micdone3或者micwarning 例如: reporter.ReportEvent micFail,“系统登陆“,“密码错误“,Copyright 2006,45,ChildObjects 应用,ChildObjects可以返回界面上满足条件的对象集合,而且与对象库里是否有这些对象无关,这就可以简化对
28、象库;返回的对象集合的count方法可以返回对象个数,这就可以通过下标对单个对象进行操作;在出现index标识对象时可以进行运用如:,Set m_WinCheck=Description.Create()m_WinCheck(“type”).Value=“checkbox” setAll_WinCheck=Browser(“teller“).Page(“teller“).Frame(“content“).ViewLink(“dbtable“).ChildObjects(m_WinCheck) n=All_WinCheck.Count() for i=0 to n-1 All_WinCheck(
29、i).Set “ON”next,Browser(“teller“).Page(“teller“).Frame(“content“).ViewLink(“dbtable“).WebCheckBox(“sys_dao_check_null“).Set “ON“ Browser(“teller“).Page(“teller“).Frame(“content“).ViewLink(“dbtable“).WebCheckBox(“sys_dao_check_null_2“).Set “ON“ Browser(“teller“).Page(“teller“).Frame(“content“).ViewLi
30、nk(“dbtable“).WebCheckBox(“sys_dao_check_null_3“).Set “ON“ Browser(“teller“).Page(“teller“).Frame(“content“).ViewLink(“dbtable“).WebCheckBox(“sys_dao_check_null_4“).Set “ON“ Browser(“teller“).Page(“teller“).Frame(“content“).ViewLink(“dbtable“).WebCheckBox(“sys_dao_check_null_5“).Set “ON“ Browser(“te
31、ller“).Page(“teller“).Frame(“content“).ViewLink(“dbtable“).WebCheckBox(“sys_dao_check_null_6“).Set “ON“ Browser(“teller“).Page(“teller“).Frame(“content“).ViewLink(“dbtable“).WebCheckBox(“sys_dao_check_null_7“).Set “ON“ Browser(“teller“).Page(“teller“).Frame(“content“).ViewLink(“dbtable“).WebCheckBox
32、(“sys_dao_check_null_8“).Set “ON“,Copyright 2006,46,QTP与oracle连接取值,Dim Cnn, Rst, strCnn strCnn=“DSN=Start_No;UID=SYMBOLS;PWD=SYMBOLS;DBQ=UATDATA;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;“ Set Cnn = CreateObject(“ADOD
33、B.Connection“) Cnn.Open strCnn Set Rst =CreateObject(“ADODB.Recordset“) Rst.open “select CHEQUE_NO from RB_CHEQUE_DETAIL where BRANCH = 1700 AND CCY = CNY AND CHEQUE_TYPE = AB AND PREFIX = AA AND CHEQUE_STATUS =DIS“,cnn,1,1 rst.movefirst Const ForReading = 1, ForWriting = 2 Dim fso, f, ts, i Dim Tex
34、tStreamTest Set fso = CreateObject(“Scripting.FileSystemObject“) fso.CreateTextFile “d:/cheque_no.txt“ Set f = fso.GetFile(“d:/cheque_no.txt“) i =rst.fields(“CHEQUE_NO“) Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault) rst.movenext ts.Write i ts.Close rst.close cnn.close set rst=nothing Set cnn=nothing,Copyright 2006,47,谢 谢 !,