自动化测试工具QTP.docx
《自动化测试工具QTP.docx》由会员分享,可在线阅读,更多相关《自动化测试工具QTP.docx(21页珍藏版)》请在冰豆网上搜索。
![自动化测试工具QTP.docx](https://file1.bdocx.com/fileroot1/2023-1/4/0a61083e-ef36-49eb-ad1b-373d1e4fc043/0a61083e-ef36-49eb-ad1b-373d1e4fc0431.gif)
自动化测试工具QTP
自动化测试工具QTP
QTP全称为QuickTestProfessional,即专业化快速测试软件,是一种企业级自动化测试工具。
QTP为HP(惠普)公司产品,现已成为软件测试行业的主流自动化测试软件。
本次毕业设计使用的QTP版本为10.0。
使用QTP的目的是想用它来实现重复的手动测试的自动执行,它主要用于回归测试和针对同一款软件的多版本测试。
使用QTP相对于重复的手工测试而言,大大缩短了项目周期,节省了人力资源,提高了工作效率。
不过由于QTP只在一些特定的情况下比较适用,所以它并不能完全的替代手工测试。
因此在测试前要考虑好如何对应用程序进行测试,例如要测试哪些功能、操作步骤、输入数据和期望的输出数据等。
QTP提供符合所有主要的应用程序环境的功能策划四和回归测试的自动化。
采用关键字驱动的理念来简化测试用例的创建和维护。
它让用户可以直接录制屏幕上的操作流程,自动生成功能测试或者恢复测试用例。
专业的测试试着也可以通过提供的内置脚本和调试环境来取得对测试和对象属性的完全控制。
5.1QTP的特点及应用场景
QTP作为自动化测试领域的主流测试工具,拥有诸多优点。
它能够提高测试质量,提高测试效率,提高测试覆盖率,同时还能执行手工测试不能完成的测试任务,能够更好地重现软件缺陷的能力,更好地利用资源。
当然QTP也有它的局限性。
在进行定制性项目,周期很短的项目的时候,以及对业务规则复杂的对象,涉及物理交互的对象进行测试时使用QTP不但不能获得成果,反而会减低测试效率。
在人体感观与易用性测试中QTP无法做出主观的判断,与此同时对不稳定的软件或系统进行测试时,因不能重复使用测试脚本,所以QTP并不能发挥它的优势,反而会加重测试任务,延长项目周期。
QTP在实际使用过程会遇到各种复杂的情形,根据不同的系统,不同的项目需求等要合理的利用QTP,在一些不适合QTP使用的场景中,为保证效率,要使用人工来替代。
因此我们给出了QTP的一些常见适用与不适用的场景。
QTP适用的场景:
(1)在进行完整性检查和回归测试的时候,每一个版本的应用程序或系统都要被执行一次。
(2)数据驱动测试中,同一项操作要使用到多组数据的情形。
QTP不适用的场景:
(1)易用性测试,即系统在实施过程中是否方便用户使用。
(2)一次性测试,只需要一次测试,不需要反复进行验证的测试情景。
(3)尽快测试,根据项目进度需求要立即进行测试,此时由于QTP要通过脚本编写才能测试,所以并不适合使用。
(4)特设、随机测试,在特定的条件或环境下进行测试,或者进行随机测试的时候,QTP并不适合使用。
(5)建立在应用程序的直觉和知识上的测试,即为主观性测试,要根据测试人员的经验进行主观判定无法通过QTP来执行。
(6)没有预期结果的测试。
5.2QTP的工作流程
图5.1QTP工作流程
如图5.1所示为QTP的工作流程图,在实际使用QTP的过程可以依照上述图表来执行对对象的操作。
准备测试、创建测试、校验和增强测试脚本、整合测试计划四个步骤,缺一不可,其中校验和增强测试脚本这一过程最为关键,它是编写测试脚本的难点和重点所在,同时也是整个测试计划的核心。
5.3脚本的录制与回放
此次我们使用的应用程序是基于C/S架构的QTP自带软件“飞机订票系统”。
此系统能够很直观的体现出QTP在实践过程中的诸多特点。
下面我们来进一步的了解QTP,并利用QTP完成脚本的录制、回放和修改过程。
图5.2QTP插件
打开QTP我们可以看到如图所示的QuickTestProfessional-Add-inMangager页面。
这里管理的是QTP中要使用的相关插件。
插件的选择是为了能够让QTP成功识别对应插件的测试对象控件,和被测控件有关,而跟应用程序是用何种语言编写没有关系。
我们的研究对象“飞机订票系统”是基于C/S架构的应用程序,所以我们选择的是插件是VisualBasic,如图5.2所示:
图5.2选择QTP插件
点击“New”新建一个测试项目。
下面我们要完成脚本的录制。
点击“Record”录制脚本。
弹出录制选项,点击“+”添加所要录制的应用程序,如图5.3所示:
图5.3QTP录制与运行设置
图4.2
在“AgentName”中输入任意不少于四个字符的字符串,比如“Mercury”,“Password”为“mercury”。
点击“OK”。
并完成相应订票操作,如图5.4所示:
图5.4飞机订票系统页面
点击QTP工具栏的
“停止”。
即终止了此次的录制过程。
并产生“ExpertView”中如图5.5中的脚本:
图5.5初次录制脚本
该专家视图中用脚本语言记录下了先前录制操作中的每一个过程。
每一行代码都代表一次操作的实现。
点击工具栏中的“Run”
可以实现脚本的回放,如图5.6所示:
图5.6QTP回放应用程序操作
回放后会在下方的“ActiveScreen”里出现之前回放的画面截图。
并且随着鼠标在专家视图中代码行的定位,也会随之改变相应的截图。
如图5.7所示:
图5.7ActiveScreen
每次回放都会出现结果报告,以检查回放的通过与否。
如图5.8所示:
图5.8回放报告
而在“KeywordView”中也会出现相应的“Action”以及“Action”下对应的对象及其属性值。
如图5.9:
图5.9关键字视图
在进行了“录制”与“回放”操作之后,为了实现对多组数据的验证,我们将输入的数据进行参数化。
5.4脚本的加强
在完成了脚本的录制与回放以后,要对已录制的脚本进行一定的修改与加强,使得脚本能够完成我们的预期任务。
脚本的加强主要对数据进行参数化,设置检查点,多次迭代,输出数据,输出对象属性值,多Action操作等。
5.4.1QTP脚本中常用的函数
Msgbox:
以弹框形式作为提示或输入结果的方法,弹框后需点击“确认”QTP才能继续运行下去。
◆用法:
Msgbox("用户名为:
"&yonghuming)
◆说明:
引号中输入的值将直接输出,“&”为字符串连接符,“yonghuming”为参数。
(注:
参数不得为QTP中的关键字)
Print:
和Msgbox用法相似,不同之处在于Print不会中断QTP的执行操作,并以类似文本编辑框显示出要输出的内容。
◆用法:
print("用户名为:
"&yonghuming)
◆说明:
引号中输入的值将直接输出,“&”为字符串连接符,“yonghuming”为参数
GetROProperty:
(GetRuntimeObjectsProperty)即获取正在运行的对象的属性值。
此时需要定义一个变量用于接收GetROProperty获取的值。
◆用法:
Text1=Dialog("").WinEdit("").GetROProperty("text")
◆说明:
引号中的“text”为WinEdit的一个属性,并讲该属性值赋给Text1。
GetItemsCount:
获得条目的数量
◆用法:
Number1=Window("").Dialog("").WinList("").GetItemsCount
◆说明:
将GetItemsCount函数获取的条目数量赋给Number1。
5.4.2实现对多组用户名的自动执行
对于系统登录界面的用户名“AgentName”进行参数化,让其实现从2012年8月中任意选择一天作为航班日期,并对航班日期进行输出。
输出函数使用Msgbox()或Print。
在KeywordView中找到用户名对应值,点击右侧参数化按钮
,如图5.10。
在ValueConfigurationOptions表单中选择第二项Parameter中的DataTable(数据表)对用户名进行参数化,点击“OK”,如图5.11。
图5.11参数化选项
图5.10在关键字视图中参数化
在KeywordView下方会出现DataTable数据表格。
输入以下信息,实现对应用程序的多用户名登录,如图5.12。
同时对应ExpertView中代码会发生变化,参数化也可以仅仅通过编辑代码来完成,如图5.13。
图5.12对用户名进行参数化
图5.13参数化后脚本中的代码
DataTable中的每一条数据都会被执行一次,因此系统共迭代4次,每次迭代结束之后,下一次迭代的开始从第一行代码开始重新执行,而此时第一行代码所对应的“Login”对话框已不存在。
应手动添加语句使得应用程序再次启动,而让代码能够执行下去。
此时可以通过在所要添加代码行“右击”-选择“InsertStep”-“StepGenerator”-选择“UtilityObjects”下的“SystemUtil”函数-operation为“Run”。
在“Arguments”参
数表中“file”的值“Value”中填入订票系统的执行文件目录地址,如图5.14所示。
在完成代码之前添加打开飞机订票系统的语句之后应在“Automation”下的“RecordandRunSettings”里把“Applicationspecifiedbelow”前的勾去掉,否则在第一次迭代开始的时候会打开两次订票系统,容易因QTP的不能对对象正确识别而造成错误。
图5.14步骤生成器
利用GetROProperty函数获取用户名并用Msgbox函数和Print函数输出。
要想获取用户名,首先要找到用户名对应的属性,即在WinEdit("AgentName")中输入的用户名的值为哪一个属性的值。
这时我们需要运用对象识别工具“ObjectSpy”即工具栏上
标志。
点击进入ObjectSpy,点击页面中的侦听按钮
,如图5.15所示。
定位到所侦听对象WinEdit,点击即可显示出该对象的所有属性及其属性值,如图5.16:
图5.16利用spy定位属性框
图5.15对象侦听器Spy
对用户名进行多组自动输入同时通过Msgbox和print两种方法对用户名进行输出,用于检测QTP在快速执行过程中是否正确执行预期操作,脚本编写如图5.17所示。
图5.17QTP脚本代码
点击“Run”运行脚本,系统可完成对数据表单中的四个用户名逐个登录的操作。
同时通过Msgbox,Print函数输出每次输入的用户名。
如图5.18:
图5.18利用Msgbox与print输出结果
5.4.3实现对城市与航班的随机选择并输出选择项信息。
对初始脚本进行修改,从而实现随机选取目的城市和随机城市,并且随机选取飞机班次。
同时,对所选城市名和飞机班次信息进行输出。
脚本如下:
4.Window("FlightReservation").WinObject("DateofFlight:
").Type"111112"
5.Item_num1=Window("FlightReservation").WinComboBox("FlyFrom:
").GetItemsCount
'把Fly_From里的城市数量赋给Item_num1
6.Window("FlightReservation").WinComboBox("FlyFrom:
").SelectRandomNumber(1,Item_num1)
'从Fly_From中随机选择一个城市
7.Fly_From=window("FlightReservation").WinComboBox("FlyFrom:
").GetROProperty("text")
'把Fly_From里的内容赋给Fly_From
8.msgbox(Fly_From)'输出Fly_From中的城市名
9.Item_num2=Window("FlightReservation").WinComboBox("FlyTo:
").GetItemsCount
10.Window("FlightReservation").WinComboBox("FlyTo:
").SelectRandomNumber(1,Item_num2)
11.Fly_To=window("FlightReservation").WinComboBox("FlyFrom:
").GetROProperty("text")
12.msgbox(Fly_To)
13.Window("FlightReservation").WinButton("FLIGHT").Click
14.Item_num3=Window("FlightReservation")Dialog("FlightsTable").WinList("From")
.GetItemsCount'把FlightsTable中的条目数量赋给Item_num3
15.Window("FlightReservation").Dialog("FlightsTable").WinList("From").Select
RandomNumber(1,Item_num3)'在FlightsTable中随机选择一项条目
16.Flight=Window("FlightReservation").Dialog("FlightsTable")
.WinList("From").GetSelection'把选择的条目赋给Flight
17.Msgbox(Flight)'输出选择的条目信息
18.Window("FlightReservation").Dialog("FlightsTable").WinButton("OK").Click
19.Window("FlightReservation").WinEdit("Name:
").Set"wang"
20.Window("FlightReservation").WinEdit("Tickets:
").SetSelection0,1
21.Window("FlightReservation").WinEdit("Tickets:
").Set"2"
22.Window("FlightReservation").WinRadioButton("Business").Set
23.Window("FlightReservation").WinButton("InsertOrder").Click
'点击插入订单按钮
24.Window("FlightReservation").WinButton("Button").Click'点击新建页面
25.Window("FlightReservation").Close
5.4.4检查点的使用
在QTP中,检查点是一个特殊的步骤,它比较两个值并显示比较结果。
这5.4.4检查点的使用
在QTP中,检查点是一个特殊的步骤,它比较两个值并显示比较结果。
这两个值是对象的一个属性,也就是测试所产生的相应的值。
QTP将测试运行产生的实际结果和测试计划中的期望值进行比较,如果两个值匹配,则检查点成功。
若两个值不匹配,则检查点失败,同时在结果报告里面会体现出来。
检查点在测试过程起到关键性作用,没有检查点,录制好的测试脚本不能称为实用的测试脚本。
检查点是自动化测试脚本代替测试工程师手工进行测试的主要手段。
图5.19检查点在检测结果过程中的位置
检查点的类型:
检查点主要有标准检查点(StandardCheckpoint)、文本检查点(TextCheckpoint)、位图检查点(BitmapCheckpoint)等。
标准检查点(StandardCheckpoint)
将光标定位到要添加检查点的代码行,则将会根据此行代码所对应的对象的属性值添加相应检查点。
这里我们主要想完成验证是否系统在点击“Fight”按钮后的页面中成功选择了某一条航班信息。
如“20261DEN09:
12AMLON04:
23PMAA$112.20”。
点击工具栏中Insert-Checkpoint-StandardCheckpoint”,或在代码行右击选择,将会弹出下图5.20所示“CheckpointProperties”界面。
图5.20检查点属性
若我们对于selection属性值的期望值是“026109:
12AMLON04:
23PMAA$112.20”而不是“0261DEN09:
12AMLON04:
23PMAA$112.20”,相差一个“DEN”,运行此脚本,则检查点将会在Results报告中报错,并定位到该错误出现的位置。
并生成代码如图5.21所示。
运行脚本产生结果报告如图5.22所示。
图5.21脚本中的检查点代码
图5.22在Result中查看检查点检查结果
位图检查点(BitmapCheckpoint)
对所测应用程序中的位图进行校验,QTP将以截图的方式来获取图片(若该图片被其他页面遮盖全部或部分则不能有效捕获该图片),可用于检测某个页面是否成功打开,从而验证某个功能是否正确。
检查点通过验证实际打开页面中是否存在预期中的该图片而验证该页面是否成功打开。
这里我们选用订票页面中位于右侧的一张图片,通过对该图片是否被检查点检查捕获来验证是否已成功打开飞机订票系统的主界面。
在QTP页面下方“ActiveScreen”工具栏中找到对应的“Snapshot(快照)”,在订票系统的右侧图片处右击选择“InsertBitmapCheckpoint”,如图5.23所示。
并生成语句如图5.24:
图5.24位图检查点代码
图5.23插入位图检查点
图5.24位图检查点代码
运行脚本,若在Results报告中无报错,则检查点成功通过。
若出错,则可点击检查点语句位于Results报告左侧的位置,查看出错信息,在右侧会出现预期结果与实际结果的对照图,从中可以找出出错的地方。
QTP的功能远不止如此,它可以对任何应用程序进行任何操作,并通过脚本的修改与增强达到测试人员期待的效果。
通过QTP的学习和使用我们可以在今后的测试工作中,节省大量的精力。
同时QTP作为主流的功能测试软件,目前已经被行业所认可,对它进行研究也非常具有实际意义。
参考文献
[1]MauroPezzandMichalYoung.SoftwareTestingandAnalysis:
Process,PrinciplesandTechniques[M].JohnWiley&Sons2008(510pages).
[2](美)ElfriedeDustin/著.新语/译.有效软件测试.出版社:
清华大学出版社
[3]张海藩.软件工程[M].北京:
人民邮电出版社,2006.
[4]CaoJinyuan.TheApplicationofLoadRunnerinSoftwarePerformanceTest[J].ComputerDevelopment&Applications,2008,(5).
[5](美)ElfriedeDustin.AutomatedSoftwareTesting--Introduction,ManagementandPerformance.清华大学出版社..
[6](印度)SrinivasanDesikan;GopalaswamyRamesh.韩柯,李娜译.软件测试原理与实践[M].北京:
机械工业出版社,2009.
[7](美)RonPatton.周予滨,姚静译.软件测试[M].北京:
机械工业出版社,2002
[8](美)MarkFewster&DorothyGraham著.软件测试自动化技术与实例详解.电子工业出版社,2000.
[9]刘慕涛,张磊,王艳等.基于XML的API自动化测试工具设计与实现[J].计算机工程,2007,(13).
[10]桑圣洪,胡飞.性能测试工具LoadRunner的工作机理及关键技术研究[J].科学技术与工程,2007,(6).
[11]DanielJ.Mosley,BruceA.Posey.邓波,黄丽娟,曹青春等译.软件测试自动化[J].机械工业出版社,2008.
[12]陈能技.QTP自动化测试进阶[J].电子工业出版社,2007,(6).