参考书籍《QTP自动化测试实践》
一、实践目的
●掌握QTP操作界面的组成
●掌握如何创建自动化测试用例
实验任务一 QTP自动化实现飞机票的订购
步骤一:脚本录制和回放
1、打开qtp自带的飞机订票应用程序,输入正确的用户名,密码点击登录。
2、打开QTP应用程序,勾选vb以及active插件
3、新建一个空测试,“blank test”
4、录制系统用户登录后,完成一张机票的订购,该选项说明系统将录入用户的任何基于windows的应用程序操作。
5、保存录制脚本
6、运行录制过程,是否出现问题?
步骤二:脚本编辑
1、在关键视图末尾插入新的测试步骤,清空订票数据。具体插入方法,参看一下参考实例。
【提示:如何插入】
如果想在打开登录界面并激活login窗口的测试步骤之后,在输入代理机构名的测试步骤之前,先单击”help”按钮查看帮助,则需要使用插入测试步骤的功能。选择打开login窗体的步骤,单击右键,选择Insert Step
在Category中包含三个下拉选项:Test Objects(测试对象)、Utility Objects(工具对象)、Function。选择Test Objects,点击红色框住的图标。
选中“help”按钮
对象间谍 |
1、导出测试用例
在录制过程中,QTP为每一步操作自动生成操作文档,放到关键字视图的document列显示出来,在documentation列的列头单击鼠标成测试用例,用于指导手工测试的进行。
要求将之上的录制步骤导出测试用例。
录制脚本只是实现创建或者设计脚本的第一步,基本的脚本录制完毕后,测试人员可以根据需要增加一些扩展功能,QTP允许测试人员通过在脚本中增加或更改测试步骤来修正或自定义测试流程,如增加多种类型的检查点功能,既可以让QTP检查一下在程序的某个特定位置或对话框中是否出现了需要的文字,还可以检查一个链接是否返回了正确的URL地址等,还可以通过参数化功能,使用多组不同的数据驱动整个测试过程。
2、插入检查点
前面我们只是实现了测试执行的自动化,没有实现测试验证的自动化,所以这并不是真正的自动化测试。如果想要判断界面操作的结果是否正确,则需要利用QTP提供的检查点插入功能。“检查点”是将指定属性的当前值与该属性的期望值进行比较的验证点,它让测试员可以根据验证点的结果来判断被测试的应用程序是否正常工作。这能够确定网站或应用程序是否正常运行。
要求在之上的录制脚本中
●为订购界面插入一个文本检查点(可以检查特定的文本是否在界面上显示),检查窗体上是否出现“flight reservation”文字,查看ACTVIE SCREEN 视图 —查看订购界面 — 右击Insert Text CheckPoint —— 指向界面上的文字对象
●插入一检查点,检查选择座位类型单选按钮是否被选中。查看ACTVIE SCREEN 视图 —查看座位类型选择界面 — 右击Insert Standard CheckPoint —— 指向界面上的文字对象
●在录制订票完成后,添加一数据库检查点(可以检查应用程序所连接的数据库的数据内容,如添加了某条记录后,使用数据库检查点检查记录是否被正确地添加到数据库指定表中),检查新加的记录是否被存储到了数据库中。
(1)、假设现机票订票系统的数据库如下:在计算机硬盘上搜索flight32.mdb
121212
(2)、查看QTP在”KEYWORD VIew”关键字视图,查看步骤
在该步骤后,选择菜单Insert | CheckPoint | DataBase CheckPoint,插入数据库检查检查点,实现如下配置
点击finish,出现如下图所示,将查询结果放置到DataTable中,点击ok。测试预期查询结果集筛选结果是否为如下记录。
点击ok,关键视图插入一检查点
●删除mdb数据库中编号为11的记录,记住编号是否为11,依实际情况而定
●运行测试,查看结果,为使得结果得到正确的检测,在插入订单后设置一定的延时,避免检测动作早于信息写入。设置方法:切换至专家视图,插入如下代码。
如何让测试脚本执行时,不仅仅局限于测试录制或者编辑时的测试数据呢?
5、数据驱动测试
数据驱动测试:把测试脚本中的测试数据提取出来,存储到外部文件或数据库中,在测试过程中,从文件动态读入测试数据。
数据驱动测试的一般步骤:
(1)、参数化测试步骤的数据,绑定到数据表格中的某个字段
(2)、编辑数据表格,在表格中编辑多行测试数据
【实践要求】
1、实现“输入终点“即Fly to的测试步骤的参数化过程
a)选择“Fly To:”所在的步骤行,单击Value列所在的单元格,如图所示
b)选中红色边框标识的图标,出现如下界面,选择Parameter
c)单击Ok按钮,在关键字视图中可看到Value的值已发生改变,这时关注DataTable视图,添加一条数据London,实现两次迭代。
d)测试运行。
[扩展]
思考:实现订票日期,起始点以及航班的参数化
提示:订购日期,起始点的参数化采用DataTable参数化
选择航班这个步骤的参数化有所不同,因为航班会跟随选择的起始点而变化,因此需要做特殊的处理。
【提示】可用Random Number来实现,在关键视图找到被参数化位置选择“#”符号。
实现如下随机配置。(由于航班选择是通过ID读取,我们随机产生id值)
QTP 学习(二) 测试web项目
摘要
◆了解自动化测试
◆认识自动化测试工具QTP
◆了解QTP的简单操作
◆完成脚本的录制
第一部分 Mercury Tours 示范网站
Mercury Tours示范网站是一个提供机票预订服务的网站,在本课程中,我们使用MI公司提供的Mercury Tours示范网站作为演示QuickTest各个功能的例子程序。
1.在开始使用Mercury Tours示范网站(http://newtours.demoaut.com/)之前,首先要在Mercury Tours网站上注册一个使用者账号。
2.Mercury Tours示范网站使用
要登录并使用Mercury Tours示范网站必须使用注册账号。
在使用网站时,从 [ Flight Finder ] 网页开始,按照画面上的指示预订机票。在Book a Flight 网页,无需填写真实的旅客信息,信用卡卡号等标示为红色的字段中添加虚拟数据就可以了。
3.结束订票动作
完成订票动作后,在 [Flight Confirmation] 网页上点选[LOG OUT] 按钮或是选择[SIGN-OFF]按钮。
4.关闭浏览器
现在知道如何使用Mercury Tours示范网站,就可以开始使用QuickTest录制测试脚本了。
第二部分 录制/执行测试脚本
当浏览网站或使用应用程序时,QuickTest会纪录你的操作步骤,并产生测试脚本。当停止录制后,会看到QuickTest在Keyword View中以表格的方式显示测试脚本的操作步骤。
2.1 录制前的准备
在录制脚本前,首先要确认以下几项:
⏹已经在Mercury Tours示范网站上注册了一个新的使用者账号。
⏹在正式开始录制一个测试之前,关闭所有已经打开的IE窗口。这是为了能够正常的进行录制,这一点要特别注意。
⏹关闭所有与测试不相关的程序窗口。
2.2 录制测试脚本
2.2.1录制测试脚本
使用QuickTest录制一个测试脚本,在Mercury Tours 范例网站上预定一张从纽约(New York)到旧金山(San Francisco)的机票。
1.执行QuickTest并开启一个全新的测试脚本
⏹开启QuickTest,在“Add-in Manager”窗口中选择“Web”选项,点击“OK”关闭“Add-in Manager”窗口,进入QuickTest Professional 主窗口。
⏹如果QuickTest Professional 已经启动,检查“Help>About QuickTest Professional”查看目前加载了那些add-ins。如果没有加载“Web”,那么必须关闭并重新启动QuickTest Professional,然后在“Add-in Manager”窗口中选择“Web”。
⏹如果在执行QuickTest Professional时没有开启“Add-in Manager”则点击“Tool>Options”,在“General”标签页勾选 “Display Add-in Manager on Startup”,在下次执行QuickTest Professional 时就会看到“Add-in Manager”窗口了
2.开始录制测试脚本
选中“Test>Record”或者点选工具栏上的“Record”按钮。打开“Record and Run Settings”对话窗口:
在“Web”标签页选择“Open the following browser when a record or run session begins”
在“Type”下拉列表中选择“Microsoft Internet Explorer”为浏览器的类型;在“Address”中添加“http://newtours.mercuryinteractive.com/(网站地址)” 这样,在录制的时候,QuickTest会自动打开IE浏览器并连接到Mercury Tours 范例网站上。
点击“确定”按钮,开始录制了,将自动打开IE浏览器并连接到Mercury Tours 范例网站上。
3.登录Mercury Tours 网站
在用户名和密码输入注册时使用的账号和密码,点击“Sign-in”,进入“Flight Finder”网页。
4.输入订票数据
输入以下订票数据:
Departing From:New York
On:May 14
Arriving In:San Francisco
Returning:May 28
Service Class:Business class
其他字段保留默认值,点击“CONTINUE”按钮打开“Select Flight”页面。
5.选择飞机航班
可以保存默认值,点击“CONTINUE”按钮打开“Book a Flight”页面。
6.输入必填字段(红色字段)
输入用户名和信用卡号码(信用卡可以输入虚构的号码,如8888-8888)。
点击网页下方的“SECURE PURCHASE”按钮,打开“Flight Confirmation”网页。
7.完成定制流程
查看订票数据,并选择“BACK TO HOME”回到Mercury Tours网站首页。
8.停止录制
在QuickTest工具列上点击“Stop”按钮,停止录制。
到这里已经完成了预定从“纽约-旧金山”机票的动作,并且QuickTest已经录制了从按下“Record”按钮后到“Stop”按钮之间的所有操作。
9.保存脚本
选择“File>Save”或者点击工具栏上的“Save”按钮,开启“Save”对话窗口。选择的路径,填写文件名,我们取名为Flight。点击“保存”按钮进行保存。
通过以上九个步骤,我们录制了一个完整的测试脚本—预定从纽约到旧金山的机票。
2.3 执行测试脚本
当运行录制好的测试脚本时,QuickTest会打开被测试程序,执行你在测试中录制的每一个操作。测试运行结束后,QuickTest显示本次运行的结果。接下来,我们执行在上一节中录制的Flight测试脚本。
1.在工具条上点击“Run”按钮,打开“Run”对话框:
2.4分析测试结果
在测试执行完成后,QuickTest会自动显示测试结果窗口,如下图所示:
第三部分 建立检查点
创建4个检查点,分别是:对象检查、网页检查、文字检查以及表格检查。
任务1:添加一个检查点用以检查旅客填写机票订购信息的姓氏是否正确。
创建标准检查点:
1.打开Checkpoint测试脚本。
2.选择要建立检查点的网页
在QuickTest的视图树中展开“Action1>Welcome: Mercury Tours>Book a Flight: Mercury ”,由于输入使用者姓氏的测试步骤是 “passFirst0”这个步骤,所以要选择这个步骤的下一个测试步骤,以便建立检查点。如下图所示:
3.建立标准检查点
对“Active Screen”中的First Name 编辑框点击鼠标右键,显示插入选择点的类型。
选择“Insert Standard Checkpoint”选型,显示“Object Selection-Checkpoint Properties”对话窗口:
确保当前的焦点定位在“WebEdit: passFirst0”上,点击“OK”按钮,弹出如下的窗口,保留text属性,其他去掉。
任务2:为Book a Flight: Mercury”页面添加网页检查点
网页检查点会检查网页的链接以及图像的数量时候与当前录制时的数量一致。网页检查点只能应用于Web页面中。
创建网页检查:
1.选择要建立检查点的网页
展开“Action1>Welcome: Mercury Tours”选择“Book a Flight: Mercury”页面,在“Active Screen”会显示相应的页面。
2.建立网页检查点
在“Active Screen”上的任意地方点击鼠标右键,选取“Insert Standard Checkpoint”,开启“Object Selection-Checkpoint Properties”对话窗口(由于选择的位置不同,对话窗口显示被选取的对象可能不一样)。
选择最上面的“Page:Book a Flight: Mercury”,并点击“OK”按钮确认,将打开“Page Checkpoint Properties”对话框。
当执行测试时,QuickTest会检查网页的链接与图片的数量,以及加载的时间,如同对话窗口上方所显示的那样。
QuickTest页检查每一个链接的URL以及每一个图片的原始文件是否存在。
接受默认设定,点击“OK”。QuickTest会在Book a Flight: Mercury 网页上加一个网页检查。
4.在工具栏上点击“Save”保存脚本。
任务3:检查在“Flight Confirmation”网页中是否出现“New York”?
建立文字检查点:
1.确定要建立检查点的网页
展开“Action1>Welcome: Mercury Tours”选择“Flight Confirmation: Mercury”页面,在“Active Screen”会显示相应的页面。
2.建立文字检查点
在“Active Screen”中选择在“Departing”下方的“New York”。
对选取的文字按下鼠标右键,并选取“Insert Text Checkpoint”打开“Text Checkpoint Properties”对话窗口。
当“Checked Text”出现在下拉式清单中时,在“Constant”字段显示的就是选取的文字。这也就是QuickTest在执行测试脚本时所要检查的文字。
3.点击“OK”关闭窗口。
QuickTest会在测试脚本上加上一个文字检查点,这个文字检查点会出现在“Flight Confirmation: Mercury”网页下方。
4.在工具栏上点击“Save”保存脚本。
任务4:添加一个表格检查点,检查“Book a Flight: Mercury”网页上航班的价格。
通过添加表检查点,可以检查应用程序中显示的表的内容。通过向测试或组件中添加表检查点,可以检查表的单元格中是否显示了指定的值。对于 ActiveX 表,还可以检查表对象的属性。要添加表检查点,可使用“检查点属性”对话框。
在上面我们已经添加了标准、网页、文字将查点,接下来我们在Checkpoint测试脚本中再添加一个表格检查点,检查“Book a Flight: Mercury”网页上航班的价格。
创建表格检查点:
1.选取要建立检查点的网页
展开“Action1>Welcome: Mercury Tours”选择“Book a Flight: Mercury”页面,在“Active Screen”会显示相应的页面。
2.建立表格检查点
在“Active Screen”中,在第一个航班的价钱上“270”上点击鼠标右键,选择“Insert Standard Checkpoint”打开“Object Selection-Checkpoint Properties”对话窗口。
刚打开时选取的是“WebElement:270”,这时要选择上一层的WebTable对象,在这个例子中选择“WebTable: New York to San Francisco”。点击“OK”打开“Table Checkpoint Properties”对话窗口,显示整个表格的内容。
预设每一个字段都会被选择,表示所有字段都会检查,可以对某个字段双击,取消检查字段,或者选择整个栏和列,执行选取或取消的动作。
在每个字段的列标题上双击,取消勾选的图标,然后再270字段处双击,这样执行时QuickTest只会对这个字段值作检查。
3.点击“OK”关闭对话框。
QuickTest会在测试脚本中,“Book a Flight: Mercury”页面下加上一个表格检查点。
4.在工具栏上点击“Save”保存脚本。
任务5:添加以可访问性检查点,确认所有图片是否设置ALT属性。
第四部分 参数化(数据驱动)
在测试应用程序时,可能想检查对应用程序使用不同输入数据进行同一操作时,程序是否能正常的工作。在这种情况下,你可以将这个操作重复录制多次,每次填入不同的数据,这种方法虽然能够解决问题,但实现起来太笨拙了。QuickTest提供了一个更好的方法来解决这个问题——参数化测试脚本。目的将数据从脚本中分离出来。
4.1参数化步骤和检查点中的值
录制或编辑测试或组件时,可以参数化步骤和检查点中的值。可以参数化选定步骤的对象属性的值。还可以参数化为该步骤定义的操作(方法或函数参数)的值。
通过参数化检查点属性的值,可以检查应用程序或网站如何基于不同的数据执行相同的操作。
例如,如果要测试 Mercury Tours 示例网站,可以创建一个检查点,以便检查预订机票后该机票是否被正确预订。假设您需要检查针对各种不同目的地所预订的航班是否正确。可以为目的地信息添加一个数据表参数,而不是为每个目的地分别创建带有单独检查点的不同测试或组件。对于测试或组件的每次循环,QuickTest 都会针对不同目的地检查航班信息。
数据驱动测试的一般步骤
1)参数化测试步骤的数据,绑定到数据表格中的某个字段
2)编辑数据表格,在表格中编辑多行数据
3)设置迭代次数,选择数据行,运行测试脚本每次迭代中从中选择一行数据。
在QTP中,可以使用多种方式来对测试脚本进行参数化,数据表参数化,环境变量参数化,随机参数化。
为了简化测试脚本参数化的过程,QTP还提供“Data Driver”的功能,可自动检测脚本中可能需要进行参数化的变量。
实例演练:参数化
在测试脚本中,纽约是个常数值,也就是说,每次执行测试脚本预定机票时,出发地点都纽约,现在,我们将测试脚本中的出发地点参数化,这样,执行测试脚本时就会以不同的出发地点去预定机票了。
1.首先,我们打开Checkpoint测试脚本,将脚本另存为“Parameter”,然后选择要参数化的文字:在视图树中展开“Action1>Welcome: Mercury Tours>Find a Flight: Mercury ”。
2.在视图树中选择“fromPort”右边的“Value”字段,然后再点击参数化图标,开启“Value Configuration Options”对话窗口:
3.设置要参数化的属性,选择“Parameter”选择项,这样就可以用参数值来取代“New York”这个常数了,在参数中选择“Data Table”选项,这样这个参数就可以从QuickTest的Data Table中取得,将参数的名字改为“departure”。
4.点击“OK”确认,QuickTest会在Data Table中新增departure参数字段,并且插入了一行New York的值,New York 会成为测试脚本执行使用的第一个值。
参数化以后可以看到树视图中的变化,在参数之前,这个测试步骤显示“fromPort …Select… New York”,现在,这个步骤变成了“fromPort …Select… Data Table("departure",dtGlobalSheet)”。而且当点击Value字段时,Value字段会显示如图所示:,表示此测试步骤已经被参数化,而且其值从Data Table中的departure字段中获得。
5.在departure 字段中加入出发点资料,使QuickTest可以使用这些资料执行脚本。
在departure字段的第二行,第三行分别输入:Portland、Seattle。
6.保存测试脚本。
4.3.2 修正受到参数化影响的步骤
当测试步骤被参数化以后,有可能会影响到其它的测试步骤也要参数化,例如我们为了验证在“Flight Confirmation”网页中是否出现“New York”(第三章创建文字检查点),在网页上添加了一个文字检查点。那么,就要对出发地的文字检查点作参数化,以符合对出发地点参数化的预期结果。
修正文字检查点,首先在树视图中,展开“Action1>Welcome: Mercury Tours>Flight Confirmation: Mercury”页面,然后点击鼠标右键,选择“Checkpoint Properties”,打开“Text Checkpoint Properties”对话窗口:
在“Checked Text”的Constant字段中显示为“New York”,表示测试脚本在每次执行时,这个文字检查点的预期值都为“New York”。我们选择Parameter,点击旁边的“Parameter Options”按钮,打开“Parameter Options”对话窗口:
在参数类型选择框选择“Data Table”选项,在名字选择框选择“departure”选项,指明这个文字检查点使用departure字段中的值当成检查点的预期值。
点击“OK”关闭窗口,这样文字检查点也被参数化了。
4.3.3 执行并分析使用参数的测试脚本
参数化测试脚本后,我们运行Parameter测试脚本。QuickTest会使用Data Table中departure字段值,执行三次测试脚本。
执行测试脚本:点击工具栏上的“Run”按钮,开启Run对话窗口,选取“New run results folder”,其余为默认值,点击“OK”开始执行脚本。当脚本运行结束后,会开启测试结果窗口。
在树视图中,展开“Parameter Iteration2 >Action1 Summary >Welcome Mercury Tours>Flight Confirmation: Mercury”,选择“Checkpoint"New York"”,显示如下图:
在检查点“Details”窗口中,显示Portland为预期记过同时也是实际的值,所以文字检查点为通过。同时也可以看到在下方的“Application”窗口中,显示机票的出发地点也是Portland。
在图中可以看出,虽然每次执行时,文字检查点的结果是通过的,但是第二次与第三次的执行结果仍然为失败。这是因为出发地点的改变,造成在表格检查点中的机票价钱改变,导致表格检查点失败。在以后的课程中,我们将学习修正表格检查点,让QuickTest自动更新表格检查点的预期结果,就可以检查正确的票价了。
第五部分 在脚本中建立输出值
实例演练 建立输出值
通过 QuickTest 可以检索测试或组件中的值,并将这些值作为输出值存储。此后,就可以检索这些值,并在运行会话的不同阶段使用该值作为输入。
输出值是一个步骤,在该步骤中,捕获测试或组件中某个特定点的一个或多个值,并在运行会话持续时间存储这些值。随后,在运行会话中的不同点,可以将这些值作为输入使用。
在表格检查点中机票价钱的预期结果,并没有随着出发地点的改变而变动,导致第二、第三次的执行结果是失败的。
现在,我们从“Select a Flight: Mercury ”网页上取得机票价钱,并且已取得的机票价钱更新表格检查点的预期结果,这样一来,测试脚本就可以利用在“Select a Flight: Mercury”网页上取得的机票价钱去验证“Book a Flight: Mercury”上显示的机票价钱。
1.在树视图中,展开“Welcome: Mercury Tours”并且点击“Select a Flight: Mercury”网页,在Active Screen窗口会显示相应的页面。在 Active Screen窗口中选取框住270,然后点击鼠标右键,选择“Insert Text Output”,打开“Text Output Value Properties”对话窗口:
3.在“Text Output Value Properties”对话窗口中点击“Modify”按钮,打开“Output Options”对话窗口:
在名字字段显示Select_a_Flight_MercuryOutput_Text_out,将其改成depart_flight_price ,接受其它默认值,点击“OK”确认,QuickTest会在Data Table中加入depart_flight_price字段。
在Data Table上的depart_flight_price字段的第一行会显示从应用程序上取得的输出值(270)。在执行时,第一次QuickTest会取得一样的值270,接下来的第二、第三次会从应用程序上取得实际值,并存放在Data Table中。
4.修正表格检查点的预期值
在树视图中,展开“Welcome: Mercury Tours >Book a Flight: Mercury”,在“Checkpoint"New York to San Francisco"”上点击鼠标右键,选择“Checkpoint Properties”,打开“Table Checkpoint Properties”对话窗口。
选中第三行,第三列(被勾选的字段),在“Configure value”中选择“Parameter”然后点击“Parameter Options”按钮,打开“Parameter Options”对话窗口:
在窗口的名字下拉列表中选择depart_flight_price。
5.点击“OK”回到“Table Checkpoint Properties”对话窗口,可以看到这个检查点的预期结果已经被参数化了。
点击“OK”关闭“Table Checkpoint Properties”窗口,保存测试脚本
5.3.2 执行并分析使用输出值的测试脚本
在上面我们在建本中建立侧输出值,并且将表格检查点参数化,现在,执行Output测试脚本。
执行测试脚本:点击工具栏上的“Run”按钮,开启Run对话窗口,选取“New run results folder”,其余为默认值,点击“OK”开始执行脚本。当脚本运行结束后,会开启测试结果窗口。
在执行结果窗口中,点击树视图中的“Run-Time-Data”,可以在表格中看到执行测试时使用的输出值,在depart_flight_price字段中显示了不同的机票价钱。
在结果窗口中点击“Test output Summary”可以看到,12个检测点都通过了验证,运行结果均为Passed。