QTP自动化功能测试工具知识积累Word格式.docx
《QTP自动化功能测试工具知识积累Word格式.docx》由会员分享,可在线阅读,更多相关《QTP自动化功能测试工具知识积累Word格式.docx(50页珍藏版)》请在冰豆网上搜索。
2007-1-15
摘要
「软件测试自动化」已经被许多的软件测试专家验证是可行的,并且反复的运用在许多软件开发过程中。
大多数参与软件测试的专家也同意自动化测试不只是值得的同时也是必要的。
在软件测试的市场上有许多针对使用者接口(GUI)应用程序所开发的自动化测试工具,而且其中有些工具所提供的功能,已经足够满足软件测试自动化的需求。
但是,我们却看到越来越多的公司,在购买自动化测试工具之后才发现,实施一个符合成本效益(cost-effective)的自动化测试解决方案(solution)原比其所呈现的还困难。
我们会常常听到一些抱怨,像是“看软件测试工具厂商做起来好像很容易,但是当我们的人自己做的时候却完全不是那么一回事!
”、“事实上我们已经花了六个月的时间在导入自动化测试,但是大部分的测试却还是停留在人工测试的阶段!
”或是“要让整个自动化测试运作起来所花费的时间实在太长了,还不如使用原本的人工测试所花的时间更短!
”。
通常最后的结局是“另一个错误的采购!
”,自动化测试工具从此被束之高阁了。
何谓自动化测试?
简而言之,所谓的自动化测试就是将您现有的手动测试流程给自动化。
而且要实施自动化测试的公司或组织,本身必须要有一套「正规(formalized)」的手动测试流程。
而这个正规的手动测试流程至少要包含以下的条件:
∙详细的测试个案(testcases):
从商业功能规格或设计文件而来的测试个案,包含可预期的(predictable)的预期结果(expectedresult)。
∙独立的测试环境(testenvironment):
包含可回复测试资料的测试环境,以便在应用软件每次变动后,都可以重复执行测试个案。
假如您目前的测试流程并未包含上述条件,即使您导入了自动化测试,也不会得到多大的好处。
所以,假如您的测试方法(testingmethodology)只是将应用软件移转到一群由「使用者」或「专家级使用者(subjectmatterexperts)」组成的测试团队,然后任由他们去敲击键盘执行测试工作。
那我建议您先把自动化测试放一边,把「建立一个有效的测试流程」当成您目前首要的工作。
因为要自动化一项不存在的流程是完全没有意义的。
自动化测试最实际的应用与目的是自动化回归测试(regressiontesting)。
也就是说,您必须要有用来储存详细测试个案的数据库,而且这些测试个案是可以重复执行于每次应用软件被变更后,以确保应用软件的变更没有产生任何因为不小心所造成的影响。
「自动化测试脚本(script)」同时也是一段程序。
为了要更有效的开发自动测试脚本,您必须和一般软件开发的过程一样,建立制度以及标准。
要更有效的运用自动化测试工具,您至少要有一位受过良好训练的技术人员,换句话说,您至少要有一位程序设计师(programmer)。
该段文字摘自《TotallyData-DrivenAutomatedTestingByKeithZambelichSr.SoftwareQualityAssuranceAnalyst,AutomatedTestingEvangelist》,作者目前为AutomatedTestingSpecialists,Inc.公司的总裁兼执行长官,主要从事自动化测试导入的顾问工作。
本文介绍的相关知识就是这位程序设计师所需要具备的最基本的知识。
本文系取前者之经验,综合运用,非一人之得,不敢妄专,惟留一己心得耳。
第一部分基础知识
1.QTP安装
●主程序:
进入下面目录运行:
QTP90\QuickTest\setup.exe
在没有Licence的情况下选择安装演示版,完成安装之后再破解,其它按照默认设置完成安装,可暂不重启;
中途需要下载MicrosoftScriptDebugger(脚本调试器),如果下载失败,可以安装结束之后另行下载安装:
..\..\ADD-INS\脚本调试器.exe
●安装中文插件(可选):
进入下面这个目录运行:
QTP90CHS\QuickTestPro_CHS\QuickTestPro_CHS.exe
按照默认设置完成安装,可暂不重启;
●关联QC插件(MercuryQualityCenterAdd-in):
QTP90\TDPlugin\TDPluginsetup.exe
按照默认设置完成安装,以上安装完成之后必须重新启动QTP才可以进行许可证的安装。
●安装插件许可证:
1、使用并发许可证
这需要有正版Lic的机器做服务器,在运行QTP的时候点击“修改插件许可证”,选择安装并发许可证,再入如服务器地址,如:
192.168.168.89
2、使用单机许可证
把mgn-mqt82.exe文件放到X:
\ProgramFiles\MercuryInteractive\QuickTestProfessional下面,然后运行,退出重新运行QTP即可。
在已经安装并发许可证而又想修改许可证为单机许可证的话,可能上面的方法行不通,这种情况下可以试着先使用记事本或者相关的程序打开C:
\ProgramFiles\CommonFiles\MercuryInteractive\LicenseManager\lservrc文件,在打开的文件中,复制形如下面的一段字符串:
D6BUMD6BUMD6BUMD6BUMD6BUMD6BUMD6BUMD6BUM8QARH#,记得一定带上“#”号,在首次运行QTP的时候点击“修改插件许可证”,选择安装单机许可证,再将这段字符粘贴到里面重启QTP就行了。
2.QTP启动
要启动QuickTest,请选择“开始”菜单中的“程序”>
“QuickTestProfessional”>
“QuickTestProfessional”。
第一次启动QuickTest时,打开“加载项管理器”对话框。
提示:
如果不希望下次启动QuickTest时打开该对话框,可以清除“启动时显示”复选框。
单击“确定”。
打开“QuickTestProfessional”窗口。
可以选择打开QuickTest教程,开始录制新测试,打开现有测试或打开空白的新测试。
可以按ESC键关闭窗口,也可以点击“空白测试”建立新的测试,或者打开其它测试脚本或组件。
可以单击“每日提示”浏览所有可用提示。
如果不希望下次启动QuickTest时显示该窗口,可以清除“启动时显示该屏幕”复选框。
3.QTP窗口
QuickTest窗口包含下列关键元素(下图为QTP8.2的试图,和9.0版本稍有不同):
➤标题栏-显示当前打开的测试或组件的名称。
➤菜单栏-显示QuickTest命令菜单。
➤文件工具栏-包含若干按钮,协助您管理测试或组件。
➤测试工具栏-包含若干按钮,协助您完成测试过程。
➤调试工具栏-包含若干按钮,协助您对测试或组件进行调试(默认情况下不显示)。
➤操作工具栏-包含若干按钮和一个操作列表,用于查看单项操作或整个测试流的
详细信息。
➤测试窗格-包含关键字视图和专家视图选项卡。
➤ActiveScreen-当您在录制会话过程中执行某个特定步骤时,提供了出现的应用
程序的快照。
➤数据表-协助您对测试或组件进行参数化。
对于测试,数据表包含“全局”选项
卡和每个操作的选项卡;
对于组件,数据表包含单个选项卡。
➤“调试查看器”窗格-协助您对测试或组件进行调试。
“调试查看器”窗格包含
“监视表达式”、“变量”和“命令”选项卡(默认情况下不显示)。
➤状态栏-显示QuickTest应用程序的状态。
4.QTP常用快捷方式
下表这些快捷方式是我们经常用得到的,而其它的快捷方式记忆起来比较复杂,具体参见QTP的帮助文档:
Command
ShortcutKey
Function
Record(普通录制)
F3
Startsarecordingsession.
Run(运行)
F5
Startsarunsessionfromthebeginningorfromthelineatwhichthesessionwaspaused.
Stop(停止)
F4
Stopstherecordingorrunsession.
RunfromStep(丛当前步骤运行)
Ctrl+F5
Startsarunsessionfromtheselectedstep.
AnalogRecording(模拟录制)
Shift+Alt+F3
Startsrecordinginanalogrecordingmode.
LowLevelRecording(低级录制)
Ctrl+Shift+F3
Startsrecordinginlowlevelrecordingmode.
ObjectRepository(打开对象库)
Ctrl+R
OpenstheObjectRepositorydialogbox.
StepInto(单步调试运行到)
F11
Runsonlythecurrentlineofthescript.Ifthecurrentlinecallsamethod,themethodisdisplayedintheviewbutisnotperformed.
StepOver(跳出断点)
F10
Runsonlythecurrentlineofthescript.Whenthecurrentlinecallsamethod,themethodisperformedinitsentirety,butisnotdisplayedintheview.
StepOut(跳过断点)
Shift+F11
Runstotheendofthemethodthenpausestherunsession.(AvailableonlyafterrunningamethodusingStepInto.)
RuntoStep(运行到)
Ctrl+F10
Runsuntilthecurrentstep.
AddtoWatch(添加到观察表)
Ctrl+T
AddstheselecteditemtotheWatchtab.
Insert/RemoveBreakpoint(断点)
F9
Setsorclearsabreakpointinthetest.
Enable/DisableBreakpoint
(启用/停用断点)
Ctrl+F9
Enablesordisablesabreakpointinthetest.
ClearAllBreakpoints
(清除所有端点)
Ctrl+Shift+F9
Deletesallbreakpointsinthetest.
CheckSyntax(语法检查)
Ctrl+7
Checksthesyntaxoftheactivedocument.
5.检查点概述
在录制会话过程中或在编辑测试或组件时添加检查点。
在录制了初始测试或组件之后,通常可以更为方便地定义检查。
有几种方法可以添加检查点。
在录制或编辑时添加检查点
♦使用“插入”菜单上的命令,或者单击“测试”工具栏上的“插入检查点”按钮旁边的箭头。
这将显示与关键字视图的选定步骤相关的检查点选项的菜单。
只在编辑时添加检查点
♦右键单击关键字视图中您要添加检查点的步骤,然后选择“插入标准检查点”。
♦右键单击ActiveScreen中的任意对象,然后选择“插入标准检查点”。
可使用该选项为ActiveScreen中的任意对象创建检查点(即使该对象不是关键字视图中任一步骤的组成部分)。
注意:
如果使用“ActiveScreen”方法,请确保ActiveScreen包含有关待检查对象的充足数据。
了解检查点类型
检查点类型
描述
用法示例
标准检查点
检查对象的属性值。
检查是否选中某单选按钮。
图像检查点
检查图像的属性值。
检查图像源文件是否正确。
表检查点
检查表中的信息。
检查表单元格中的值是否正确。
页面检查点
检查网页的特性。
检查加载网页所需的时间,或者检查网页是否包含中断链接。
文本/文本区域检查点
检查文本字符串是否显示在网页或应用程序窗口中的适当位置。
检查预期的文本字符串是否显示在网页或对话框上的预期位置。
位图检查点
将网页或应用程序的某个区域捕获为位图后对其进行检查。
检查网页或网页的任何部分是否能按预期显示。
数据库检查点
检查应用程序或网站所访问的数据库内容
检查数据库查询中的值是否正确。
可访问性检查点
对网站区域进行识别,以检查是否符合508部分。
检查网页上的图像是否包含ALT属性(该属性是W3CWeb内容可访问性规则所要求的)。
XML检查点
检查XML文档的数据内容。
XML文件检查点用于检查特定的XML文件;
XML应用程序检查点用于检查网页中的XML文档。
您可以插入下列检查点类型以检查网站或应用程序中的各种对象。
♦“标准检查点”检查应用程序或网页中对象的属性值。
标准检查点会检查各种对象,如按钮、单选按钮、组合框、列表等等。
例如,您可以检查在选择单选按钮之后它是否处于激活状态,或者可以检查编辑字段的值。
标准检查点在所有加载项环境中都受到支持。
♦“图像检查点”检查应用程序或网页中的图像的值。
例如,您可以检查所选图像的源文件是否正确。
可以通过在图像对象上插入标准检查点来创建图像检查点。
图像检查点在Web环境中受到支持。
♦“位图检查点”检查位图格式的网页或应用程序区域。
例如,假设您有一个网站,可以显示用户指定的城市的地图。
该地图具有用于缩放的控制键。
在单击放大地图的控制键后,您可以录制所显示的新地图。
使用位图检查点,您可以检查该地图是否正确放大。
位图检查点在所有加载项环境中都受到支持。
♦“表检查点”检查表内部的信息。
例如,假设您的应用程序或网站包含一个表,该表列出了从纽约到旧金山的所有可用航班。
您可以添加一个表检查点,以检查该表中的第一个航班的时间是否正确。
可以通过在表对象中插入标准检查点来创建表检查点。
表检查点在Web和ActiveX环境中受到支持。
表检查点还在很多外部加载项环境中受到支持。
♦“文本检查点”检查文本字符串是否显示在应用程序或网页的适当位置中。
例如,假设您的应用程序或网页显示句子:
“从纽约到旧金山的航班”。
您可以创建一个文本检查点,检查词语“纽约”是否显示在“从”与“到旧金山的航班”之间。
文本检查点在所有加载项环境中受到支持(请参阅下面的“受支持的检查点”)。
♦“文本区域检查点”检查文本字符串是否按照指定的条件显示在WindowsApplications中所定义的区域内。
例如,假设您的VisualBasic应用程序有一个按钮,显示“查看文档<
号码>
”,其中<
会被输入到应用程序中其他位置的窗体的四位数字代码替换。
您可以创建一个文本区域检查点,以确认在该按钮上显示的号码与在窗体中输入的号码相同。
文本区域检查点在标准Windows、VisualBasic和ActiveX加载项环境中受到支持。
文本区域检查点还在一些外部加载项环境中受到支持。
♦“可访问性检查点”确定可能不符合万维网联盟(W3C)Web内容可访问性规则的网站区域。
例如,W3CWeb内容可访问性规则的规则1.1要求您为每个非文本元素提供等效文本。
您可以添加“Alt”属性检查,检查按照该规则要求具有“Alt”属性的对象是否确实具有这样的标记。
可访问性检查点在Web环境中受到支持。
♦“页面检查点”检查网页的特性。
例如,您可以检查加载网页所需的时间,或者检查网页是否包含损坏的链接。
可以通过在页面对象上插入标准检查点来创建页面检查点。
页面检查点在Web环境中受到支持。
♦“数据库检查点”检查由您的应用程序访问的数据库的内容。
例如,您可以使用数据库检查点来检查网站上包含航班信息的数据库的内容。
数据库检查点在所有环境中都受支持(请参阅下面的“受支持的检查点”)。
♦“XML检查点”检查XML文件中的XML文档的数据内容,或检查网页和帧中的XML文档的数据内容。
有关XML检查点的详细信息,请参阅第11章“检查XML”。
XML检查点(网页/帧)在Web环境中受到支持;
XML检查点(文件)在所有环境中受到支持(请参阅下面的“受支持的检查点”)。
6.受支持的检查点
下表显示了在每个环境(默认情况下由QuickTestProfessional安装支持)中受支持的检查点类型。
S-支持
NS-不支持
NA-不适用
7.规范例程
脚本的生成方式就两种,一种是自写脚本,一种是录制生成。
常常听见有人说,这两种方式中首选录制生成脚本,因为它简单且智能化。
但我个人总觉得手写脚本要好一些,因为:
♦可读性好,流程清晰,检查点截取含义明确。
业务级的代码读起来总比协议级的代码更易让人理解,也更容易维护,必要时可建立一个脚本库。
而录制生成的代码大多没有维护的价值,现炒现卖。
♦手写程序相比录制脚本更能增加测试人员的技术含量。
开发和测试能力双重提高,何乐而不为呢?
QTP提供了javauser,vbuser,等语言类型的脚本,就是给我们开发脚本用的,而不是录制用的。
脚本不管录制也好,还是手写也好,选择的时候应该以脚本模拟程序真实有效为准,结合项目进度,开发难易程度等因素考虑。
而脚本的开发也需要符合一种规范,也可以说是一种习惯,因为脚本不只是开发者一个人看,测试执行人员也需要看,这就要求可读性和可维护性提高;
故而开发时应该考虑这层因素,规范一下。
下面这段某系统登陆的脚本,是一位前辈写的,引用一下(借机崇拜一下):
'
*************************************************************************
*模板名称:
Login
*开发人员:
LY
*开发日期:
2006-10-12
*最后修改日期:
2006-10-13
*输入参数:
用户名、密码
*输出参数:
成功进入
*脚本描述:
通用的登陆设计
***********************************************************************
Dimhint_msg
Dimhint
DimActualDialogPopup
InvokeApplication"
D:
\ProgramFiles\MercuryInteractive\QuickTestProfessional\samples\
flight\app\flight4a.exe"
参数化user和password值
Dialog("
Login"
).WinEdit("
AgentName:
"
).SetDataTable("
user"
,dtGlobalSheet)
Password:
password"
).WinButton("
OK"
).Click
hint=DataTable("
hint"
判断弹出错误提示框的正确性,如果输入了正确密码,而用户名又大于4个字符则不弹出错误提示框,否则弹出错误提示框。
IfDialog("
).Dialog("
FlightReservations"
).Existthen
ActualDialogPopup="
TRUE"
else
FALSE"
endif
ExpectedDialogPopup=DataTable("
ExpectedDialogPopup"
If(ActualDialogPopup=ExpectedDialogPopup)then
Reporter.ReportEventmicpass,"
登陆"
,"
程序判断正确."
'
如果弹出错误提示框,通过对比hint
If
ActualDialogPopup="
Then
hint_msg=Dialog("
).Static("
Static"
).GetROProperty("
text"
)
If(hint=hint_msg)Then
登陆错误提示"
错误提示信息正确."
else
Reporter.ReportEventmicFail,"
错误提示信息错误."
Endif
Dialog("
确定"
).Close
e