当前位置:文档之家› QTP参考资料

QTP参考资料

QTP参考资料
QTP参考资料

QTP参考资料收集

1、QTP的Action间的信息共享的4种方

通过Action参数来传递数据

Action2的脚本如下:

' Input Parameters

Message = Parameter("Msg")

Msgbox Message

' Output Parameters

If NOT Message = "" Then

Parameter("ReturnMsg") = "The Message is " & Message

Else

Parameter("ReturnMsg") = "The Message is Empty!"

End If

' RetuenValue

ExitAction "HAHAHAHHAHA!!!!!"

'ExitAction Parameter("ReturnMsg")

3种调用Action的方法,Action1的脚本如下:

' 调用Action2,输入参数为“ Hello!”,把输出参数值写到ReturnMessage1变量RunAction "Action2", oneIteration,"Hello!" ,ReturnMessage1

Msgbox ReturnMessage1

' 调用Action2,输入参数为“ Hello!”,通过Parameter方法读取输出参数值

RunAction "Action2", oneIteration,"Hello!"

ReturnMessage2= Parameter("Action2","ReturnMsg")

Msgbox ReturnMessage2

' 如果被调用的Action使用了ExitAction来退出Action并返回ReturnValue,则可以使用下面的方式来获取Return Value的值

' 注意OutPut Parameters与Return Value的区别

ReturnMessage3 = RunAction( "Action2", oneIteration ,"Hello!")

Msgbox ReturnMessage3

通过全局数据表(Global Data Table)来共享数据

在Action1中设置参数值,Action1的脚本如下:

' 获取全局数据表

Set Sheet = DataTable.GetSheet("Global")

' 查找参数列

Set Parameter1 = Sheet.GetParameter("Column1")

Set Parameter2 = Sheet.GetParameter("Column2")

' 设置参数值

Parameter1.Value="Hello"

Parameter2.Value="World!"

' 调用Action2,Action2将使用前面设置的参数值

RunAction "Action2", oneIteration

在Action2中读取参数值,Action2的脚本如下:

' 获取全局数据表

Set Sheet = DataTable.GetSheet("Global")

' 读取参数值

Set Parameter1 = Sheet.GetParameter("Column1")

Set Parameter2 = Sheet.GetParameter("Column2")

' 使用参数值

Msgbox Parameter1 &" " & Parameter2

2、TD与QTP连接

1、安装 TD,检验 TD 是否安装成功,启动 TD Server 服务器后,在与 Server 相连的其他计算机上,打开 IE 浏览器,在地址栏输入 http://TD Server 的 ip 地址 /TDbin/start_a.htm 如果能够浏览到 TD 界面,说明安装成功。

2、安装 QTP,验证 QTP 安装成功,进入 windows 操作系统,点击,开始 -> 程序 ->Quick Test Professional-> Quick Test Professional ,打开 QTP 使用界面,进行简单的录制,保证脚本录制成功,并且可以回放,与你的预操作达到的结果一致,证明 QTP 安装成功。

3、安装插件,进入 TD 首页,点击见面上的 TD Add In,进入 TD Add In 界面点击 More TestDirector Add Ins 进入 More TestDirector Add Ins 界面,下载名为 TDplugInsSetup 的插件,大约 35 兆并且在Server 与 QTP 客户机上安装这个插件,安装成功后,会要求你重启电脑,重启后会看到,开始-程序中有个新安装的程序“Quick Test Professinal add in for Quality Center”,登入 TD 进入 test plan 检测是否可以在 test plan 中添加 QTP 类型的测试用例,点击后,出现QUICKTEST.TEST ,并且可以建立 QTP 的测试用例。

4、检查没有问题之后,还需要在安装 QTP 的机子上做一些相应的设定,进入 QTP 主界面,点击文件栏的 Tools-Options,进入 Options 对话框在 Run Tab 中选择 Allow other Mercury products to run test and components,以及 Submit a defect to Qualiyt Center for each failed step 选中后,点击 ok 保存这个设置,在 QTP 主界面中点击 Tool - Quality Center Connection,在 Server 中输入 http:// TDServer ip 地址 /TDbin( 本例中使用 htt......),点击 connect 按钮,QTP 连接到服务器上,如果服务器连接有问题,则会提示连接失败。

5、在 project connection 中包含一下几项:

Domain : TD 服务器站点管理中建立项目的域

Project :域中你所建立的项目

User :登陆项目所用的用户名

Password :相应用户名使用的密码

Reconnect on startup 在下次启动 QTP 时自动登陆到你的项目中

Save password for reconnection on startup 为下次登陆保存密码

完成了上述操作就 TD 和 QTP 就连接起来,可以从 TD 调用 QTP 脚本了

3、QTP读取Excel数据的方法

在构建自己的测试框架时,或者是从Excel读入外部数据进行检查时都要用到Excel的COM 对象编程方法,下面脚本中的ReadFile函数就实现了这样的功能,首先创建Excel应用程序对象,然后打开Excel文件,把Excel数据读取到一个数组中。

arrRange = ReadFile("D:\QTP\MyWork\ReadExcelFileTest1\ObjectTree.xls","Tree") 'Msgbox UBound (arrRange,1)

'Msgbox UBound (arrRange,2)

' 读取其中一个单元格的数据

Msgbox arrRange(3,1)

' 输入:

' sFileName: Excel文件

' sSheetName:表单名称

' 返回:

' 包含Excel数据的数组

Function ReadFile(sFileName,sSheetName)

Dim oExcel

Dim oSheet

Dim oRange

Dim arrRange

On Error Resume Next

' 创建Excel应用程序对象

Set oExcel = CreateObject("Excel.Application")

If err.Number <> 0 Then

MsgBox "未能初始化Excel" & vbCrLf & _

"请确保Excel已安装", vbCritical

Exit Function

End If

On Error Goto 0

On Error Resume Next

' 打开Excel文件

oExcel.Workbooks.Open(sFileName)

If err.Number <> 0 Then

MsgBox "未能加载Excel文件" & vbCrLf & _

"请确保Excel文件路径正确或格式正确", vbCritical

Exit Function

End If

On Error Goto 0

' 获取表格的使用范围

Set oSheet = oExcel.Worksheets(sSheetName).UsedRange

' 获取从A列到Z列,从第1行到第1000行的范围i中的所有值

Set oRange = oSheet.Range("A1:Z1000")

'把Excel数据转换到数组

arrRange = oRange.Value

' 关闭工作簿

oExcel.WorkBooks.Item(1).Close

' 退出Excel

oExcel.Quit

Set oExcel = Nothing

' 返回包含Excel数据的数组

ReadFile = arrRange

End Function

4、QTP连接数据库

一、OLE-DB连接方式

1 字符串方式

ConnectionString="Provider=SQLOLEDB.1; Data Source=YourSrc;

UID=YourUid; PWD=YourPwd; Database=YourDB"

ConnectionString="Provider=SQLOLEDB.1; Data Source=YourSrc;

User ID=YourUid; Password=YourPwd; Initial Catalog=YourDB"

其中,Provider为服务于连接的底层OLE-DB数据供应程序的名称;Data Source为服务于底层数据供应程序的数据源名称;UID或User ID为连接时使用的用户名;PWD或Password为连接时使用的密码;Database或Initial Catalog为位于数据库服务器上的一个特定数据库。

2 数据链接文件方式

创建一个空文本文件,将其扩展名改为.udl来创建一个数据链接文件。双击该文件打开Data Link Properties对话框,在Provider页选择提供者(不要选择基于ODBC的提供者,因

为这样实际上是间接藉由ODBC实现数据库连接),在Connection页指定实现连接的细节。使用数据链接文件进行连接的ConnectionString如下:

ConnectionString="File Name=C:YourFile.udl"

用记事本打开数据链接文件,可以看到第三行文本是一个连接字符串,指定了连接的细节。如果在Connection页选中了“Allow saving password”,则在该文件中也会记录用户的密码信息。

二、ODBC连接方式

使用ODBC连接方式,首先要配置ODBC数据源。ODBC数据源配置成功后,就可以相应指定下面介绍的连接字符串进行数据库连接。

1 ODBC的系统DSN连接方式

ConnectionString="DSN=SysDSNName;UID=YourUid;PWD=YourPwd;Database=YourDB "

其中,DSN为系统DSN的名称,其它参数与3.1中介绍的参数相同。

2 ODBC的文件DSN连接方式

ConnectionString="FileDSN=FileDSNName;UID=YourUid;PWD=YourPwd;Database=You rDB"

其中,FileDSN为文件DSN的名称,其它参数与3.1中介绍的参数相同。

用记事本打开相应的.dsn文件(一般位于C:Program FilesCommon FilesODBCData Sources目录下),可以看到,类似于数据链接文件,该文件中也指定了连接的细节。

3 ODBC的无DSN连接方式

ConnectionString="Driver={SQL Server};Server=YourServer;

UID=YourUid;PWD=YourPwd;Database=YourDB")

此方式不用配置ODBC数据源。其中,Driver为ODBC驱动程序名称,Server为数据库服务器名称,其它参数与3.1中介绍的参数相同。

4 数据链接文件方式

首先,采用3.2中的方法创建数据链接文件。但进行文件配置时,在Provider页中选择基于ODBC的提供者——Microsoft OLE DB Provider for ODBC Drivers。此方式的ConnectionString与3.2中介绍的相同。

三、实例

下面是采用OLE-DB的字符串方式,连接到SQL Server2000数据库的示例代码:

ConnectionString="Provider=SQLOLEDB.1; Data Source=YourSrc;

UID=YourUid; PWD=YourPwd; Database=YourDB";初始化连接字符串

Set Conn=Server.CreateObject("ADODB.Connection") ;创建Connection对象

Conn.Open ConnectionString ;调用Open方法,建立连接

…;进行数据存取操作

Conn.Close ;关闭连接

Set Conn=Nothing ;释放Connection对象

需要注意的是,应尽可能晚的建立连接,同时又尽可能早的关闭连接,这样保证连接打开的时间最短,可以充分发挥OLE-DB的连接缓冲池的作用,节省连接资源。

文章2:https://www.doczj.com/doc/ed16081351.html,/viewthread.php?tid=87825&highlight=oracle

-------------------------------------------------------------------------

5、QuickTest Plus小工具,大作用

象我这样初学QTP的朋友刚开始时很可能没有注意到QuickTest Plus,因为QTP安装后默认是

没有安装plus的,千回百转知道了plus,大概看了看,发现plus虽然都是些辅助性的小工具,但

往往会给你的工作带来事半功倍的效果。

一、安装QuickTest plus

QTP安装后,在程序> QuickTest Professional下点击QuickTest Plus,然后按照提示一步步往下安装即可,

其中要求输入序列号,输入和QTP安装时相同的序列号就可以了(8888-8888888888)。

二、提示和技巧

plus不仅提供了一些工具,还在它的帮助手册里给出了一些提示和技巧,以及一些实用的Function。

在这里我把一些比较常用的好东东贴出来,其他的就看plus的帮助吧。

1、创建action template.

当希望在每一个新建action时都增加一些头部说明,比如作者、创建日期、说明等,用action template

来实现最简单快捷。

方法:用记事本等文本编辑器,输入如下类似的内容:

'Company: xxxx

'Author: xxx

'Product: xxx

'Date: xx

然后将文件保存为ActionTemplate.mst,并存放到QTP安装目录下的dat目录,重启QTP,新建一个action试试,新建的action会包含以上信息。

2、关于设置测试报告里只显示error的信息。

帮助中说:修改安装目录下bin\QTReport.ini文件,增加以下内容:

[FilterDialog]

ReportAppDefaultFilter=1 # for error only

ReportAppDefaultFilter=3 # shows all messages (default)

但根据我的测试结果,不尽其然:

1)当ReportAppDefaultFilter=1时,如果Object Repository中缺少对象,在报告中会在相应的

action前打叉,但不会提示具体错误,而成功的步骤都有具体信息显示。

2)用Reporter.ReportEvent测试的结果是:

ReportAppDefaultFilter=1时,只显示micDone的具体信息;

ReportAppDefaultFilter=2时,只显示micFail的具体信息;

ReportAppDefaultFilter=3时,只显示micDone和micFail的具体信息;

ReportAppDefaultFilter=4时,只显示micPass的具体信息;

似乎无规律可寻,所以我的结论暂时是:不要设置这个参数,用默认的,显示所有信息,更多的信息有利于分析结果。

3. 启动IE的语句:SystemUtil.Run "iexplore.exe", "https://www.doczj.com/doc/ed16081351.html,"

4. 关闭IE或其他程序的语句:SystemUtil.CloseProcessByName "app.exe"

or SystemUtil.CloseProcessByWndTitle "Some Title"

三、Function Libraries

plus的帮助中提供了一些常用的Function,把这些function copy到文本编辑器中保存为.vbs文件,并添加到Resources中就可以直接调用了,

或直接copy到你的action中,就可以在当前的action中调用。更推荐第一种方法,所有的action都可以调用。

1、文件操作相关的function,如下,望名则可生意:

Function CreateFile(sFilename, bOverwrite);

Function OpenFile(sFilename, iomode, create);

Function AppendToFile(sFilename, sLine);

Function WriteToFile(sFilename, sLine);

2、Function NormalizeString(OrgStr);(将字符串变成regular express)

3、GlobalDictionary的使用,这是另外一种可以共享全局变量的方法,在所有的action中,包括local和external action中都可以访问。

4、使用文件系统相关的function:

Function ReadLineFromFile (byref FileRef);

Sub FileDelete ( FilePath);

Function FileCompare (byref FilePath1, byref FilePath2, byref FilePathDiff, ignoreWhiteSpace);

Function CheckFileExists (FilePath)

5. web table相关的function:

Function ItemByKeyColumn(): 根据table中某列的值,得到同一行中另一列的对象。(这个功能非常有用。)

Function ObjectsByMicClass(Obj, micClass): 得到table中所有的micClass类型的对象集合。

四、工具

1、Automation Generator Utility

添加一系列动作,然后自动完成。如:启动QTP,然后执行test1, test2, test3...,最后关闭QTP,还可以连接或断开Quality center.

值得注意的是,每个test都可以分别指定test result文件,这样可以把所有test result 指定到同一个目录下,所有test执行完成后,

用Test Result Viewer就可以快速的查看测试报告。

2、External Action Call Modifier Utility

外部Action调用修改工具。当删除一个Reusable action前,如果没有先删除其他test 中对它的调用,则打开其他test时,会提示找不到某某

action,这种情况下启用该工具,工具会列出test下所有调用的外部action(如果调用的action是使用相对路径,则不会列出来),如果外部

action找不到,会用红色的问号表示,删除它并保存后就OK了。

也可以在此处修改外部action的来源,修改后原来的action parameter仍会保留。

3、Repository Merge Utility

合并多个对象库文件中的对象,如果出现冲突,可以选择忽略,或手工合并,或自动合并。

对象库文件是Action目录下的Resource.mtr文件。

4. Report Analyzer

Test Result的另一个查看工具,提供了一些过滤条件,比如只查看failed step, 或只查看checkpoints,或只查看某个action。

先就写这么多了,抛砖引玉,希望你能发现你想要的东西。写得不对的,不要客气,请指出来,不胜感激。

6、基础知识

a)QTP常用快捷方式

下表这些快捷方式是我们经常用得到的,而其它的快捷方式记忆起来比较复杂,具体参

b)检查点概述

在录制会话过程中或在编辑测试或组件时添加检查点。在录制了初始测试或组件之后,通常可以更为方便地定义检查。有几种方法可以添加检查点。

在录制或编辑时添加检查点

?使用“插入”菜单上的命令,或者单击“测试”工具栏上的“插入检查点”按钮旁边的箭头。

这将显示与关键字视图的选定步骤相关的检查点选项的菜单。

只在编辑时添加检查点

?右键单击关键字视图中您要添加检查点的步骤,然后选择“插入标准检查点”。

?右键单击Active Screen 中的任意对象,然后选择“插入标准检查点”。可使用该选项为Active Screen 中的任意对象创建检查点(即使该对象不是关键字视图中任一步骤的组成部分)。

注意:

如果使用“Active Screen”方法,请确保Active Screen 包含有关待检查对象的充足数据。

了解检查点类型

您可以插入下列检查点类型以检查网站或应用程序中的各种对象。

?“标准检查点”检查应用程序或网页中对象的属性值。标准检查点会检查各种对象,如按钮、单选按钮、组合框、列表等等。例如,您可以检查在选择单选按钮之后它是否处于激活状态,或者可以检查编辑字段的值。标准检查点在所有加载项环境中都受到支持。?“图像检查点”检查应用程序或网页中的图像的值。例如,您可以检查所选图像的源文件是否正确。

注意:可以通过在图像对象上插入标准检查点来创建图像检查点。图像检查点在Web 环境中受到支持。

?“位图检查点”检查位图格式的网页或应用程序区域。例如,假设您有一个网站,可以显示用户指定的城市的地图。该地图具有用于缩放的控制键。在单击放大地图的控制键后,您可以录制所显示的新地图。使用位图检查点,您可以检查该地图是否正确放大。位图检查点在所有加载项环境中都受到支持。

?“表检查点”检查表内部的信息。例如,假设您的应用程序或网站包含一个表,该表列出了从纽约到旧金山的所有可用航班。您可以添加一个表检查点,以检查该表中的第一个航班的时间是否正确。

注意:可以通过在表对象中插入标准检查点来创建表检查点。表检查点在Web 和ActiveX 环境中受到支持。表检查点还在很多外部加载项环境中受到支持。

?“文本检查点”检查文本字符串是否显示在应用程序或网页的适当位置中。例如,假设您的应用程序或网页显示句子:“从纽约到旧金山的航班”。您可以创建一个文本检查点,检查词语“纽约”是否显示在“从”与“到旧金山的航班”之间。文本检查点在所有加载项环境中受到支持(请参阅下面的“受支持的检查点” )。

?“文本区域检查点”检查文本字符串是否按照指定的条件显示在WindowsApplications 中所定义的区域内。例如,假设您的Visual Basic 应用程序有一个按钮,显示“查看文档< 号码>”,其中< 号码> 会被输入到应用程序中其他位置的窗体的四位数字代码替换。您可以创建一个文本区域检查点,以确认在该按钮上显示的号码与在窗体中输入的号码相同。文本区域检查点在标准Windows、Visual Basic 和ActiveX 加载项环境中受到支持。文本区域检查点还在一些外部加载项环境中受到支持。

?“可访问性检查点”确定可能不符合万维网联盟(W3C) Web 内容可访问性规则的网站区域。例如,W3C Web 内容可访问性规则的规则1.1 要求您为每个非文本元素提供等效文本。您可以添加“Alt”属性检查,检查按照该规则要求具有“Alt”属性的对象是否确实具有这样的标记。可访问性检查点在Web 环境中受到支持。

?“页面检查点”检查网页的特性。例如,您可以检查加载网页所需的时间,或者检查网页是否包含损坏的链接。

注意:可以通过在页面对象上插入标准检查点来创建页面检查点。页面检查点在Web 环境中受到支持。

?“数据库检查点”检查由您的应用程序访问的数据库的内容。例如,您可以使用数据库检查点来检查网站上包含航班信息的数据库的内容。数据库检查点在所有环境中都受支持(请参阅下面的“受支持的检查点” )。

?“XML 检查点”检查XML 文件中的XML 文档的数据内容,或检查网页和帧中的XML 文档的数据内容。有关XML 检查点的详细信息,请参阅第11 章“检查XML”。

XML 检查点(网页/ 帧)在Web 环境中受到支持;XML 检查点(文件)在所有环境中受到支持(请参阅下面的“受支持的检查点” )。

c)受支持的检查点

下表显示了在每个环境(默认情况下由QuickTest Professional 安装支持)中受支持的检查点类型。

S - 支持

NS - 不支持

NA - 不适用

d)规范例程

脚本的生成方式就两种,一种是自写脚本,一种是录制生成。常常听见有人说,这两种方式中首选录制生成脚本,因为它简单且智能化。但我个人总觉得手写脚本要好一些,因为:?可读性好,流程清晰,检查点截取含义明确。业务级的代码读起来总比协议级的代码更易让人理解,也更容易维护,必要时可建立一个脚本库。而录制生成的代码大

多没有维护的价值,现炒现卖。

?手写程序相比录制脚本更能增加测试人员的技术含量。开发和测试能力双重提高,何乐而不为呢?QTP提供了java user,vb user,等语言类型的脚本,就是给我们开

发脚本用的,而不是录制用的。

脚本不管录制也好,还是手写也好,选择的时候应该以脚本模拟程序真实有效为准,结合项目进度,开发难易程度等因素考虑。而脚本的开发也需要符合一种规范,也可以说是一种习惯,因为脚本不只是开发者一个人看,测试执行人员也需要看,这就要求可读性和可维护性提高;故而开发时应该考虑这层因素,规范一下。

下面这段某系统登陆的脚本,是一位前辈写的,引用一下(借机崇拜一下):

'*************************************************************************

'* 模板名称:Login

'* 开发人员:L Y

'* 开发日期:2006-10-12

'* 最后修改日期: 2006-10-13

'* 输入参数:用户名、密码

'* 输出参数:成功进入

'* 脚本描述:通用的登陆设计

'***********************************************************************

Dim hint_msg

Dim hint

Dim ActualDialogPopup

InvokeApplication "D:\Program Files\Mercury Interactive\QuickTest Professional\samples\

flight\app\flight4a.exe"

' 参数化user和password值

Dialog("Login").WinEdit("Agent Name:").Set DataTable("user",dtGlobalSheet)

Dialog("Login").WinEdit("Password:").Set DataTable("password",dtGlobalSheet)

Dialog("Login").WinButton("OK").Click

hint = DataTable("hint",dtGlobalSheet)

' 判断弹出错误提示框的正确性,如果输入了正确密码,而用户名又大于4个字符则不弹出错误提示框,否则弹出错误提示框。

If Dialog("Login").Dialog("Flight Reservations").Exist then

ActualDialogPopup = "TRUE"

else

ActualDialogPopup = "FALSE"

end if

ExpectedDialogPopup = DataTable("ExpectedDialogPopup",dtGlobalSheet)

If (ActualDialogPopup = ExpectedDialogPopup) then

Reporter.ReportEvent micpass,"登陆","程序判断正确."

' 如果弹出错误提示框,通过对比hint

If ActualDialogPopup = "TRUE" Then

hint_msg = Dialog("Login").Dialog("Flight

Reservations").Static("Static").GetROProperty("text")

If (hint = hint_msg) Then

Reporter.ReportEvent micpass,"登陆错误提示","错误提示信息正确."

else

Reporter.ReportEvent micFail,"登陆错误提示","错误提示信息错误."

End if

Dialog("Login").Dialog("Flight Reservations").WinButton("确定").Click Dialog("Login").Close

else

Window("Flight Reservation").Close

End If

else

Reporter.ReportEvent micfail,"登陆","程序判断错误."

If ActualDialogPopup = "TRUE" Then

Dialog("Login").Dialog("Flight Reservations").Close

Dialog("Login").Close

else

Window("Flight Reservation").Close

end if

End If

e)模板的应用

新建一个文本,输入一些新建Action时常包含的信息,然后保存为ActionTemplate.MST 文件,并复制到QTP/dat目录下;这样每次新建action都会包含固定的信息了;

例如:

'-------------------脚本说明---------------

'产品版本:

'测试员:

'编写日期:

'测试功能:

'脚本类型:

'被测试对象初始状态:

'进展程度:

'…………

'--------------------脚本内容-------------

f)方式与级别

Analog recording(模拟录制)

将“模拟录制”用于您要在其中录制鼠标的实际移动的应用程序。这些可能包括绘制鼠标签名或者使用通过拖动鼠标创建图像的绘图应用程序。您可以用“模拟录制”模式相对于屏幕或特定窗口进行录制。

相对于指定窗口录制- 如果对其执行操作的对象位于一个窗口内部而且该窗口在模拟录制会话期间没有移动。这可以确保在运行会话过程中,QuickTest 将准确地标识在其上执行模拟步骤的窗口位置,即使当您运行模拟步骤时窗口位于不同的位置。QuickTest 不会录制在指定窗口外部执行的任何单击或鼠标移动。当使用这种模式时,QuickTest 不会捕获任何Active Screen 图像。

相对于屏幕录制- 如果在其上录制模拟步骤的窗口在录制过程中移动,或者您所执行的操作是针对位于多个窗口内的对象。这可能包括将对象从一个窗口拖放到另一个窗口中。当使用这种模式时,QuickTest 将捕获您在其中进行录制的窗口的最终状态的Active Screen 图像。

使用“模拟录制”录制的步骤被保存在单独的数据文件中。该文件与在其中录制模拟步骤的操作或组件一起存储。

当以“模拟录制”模式进行录制时,QuickTest 将向测试或组件添加一个调用所录制的模拟文件的“RunAnalog”语句。相应的Active Screen 将显示在模拟录制会话期间执行的最后一个模拟步骤的结果。

low-level recording(低级录制)

使用“低级录制”在不受QuickTest 支持的环境或对象上进行录制。当您需要在应用程序屏幕上录制操作的精确位置时,请使用“低级录制”。当以正常模式录制时,QuickTest 将在对象上执行步骤,即使该对象已经移动到屏幕上的新位置。如果对象的位置对于您的测试或组件非常重要,请切换到“低级录制”以使QuickTest 能够按照屏幕上的x 坐标和y 坐标录制该对象。这样,该步骤只有在对象位于正确的位置时才能通过。

当使用“低级录制”时,QuickTest 将所有父类对象录制为Windows 测试对象,将所有其他对象录制为WinObject 测试对象。它们在Active Screen 中显示为标准Windows 对象。“低级录制”对每个测试对象支持下列方法:

WinObject 测试对象- Click、DblClick、Drag、Drop、Type

Window 测试对象- Click、DblClick、Drag、Drop、Type、Activate、Minimize、Restore、Maximize

以“低级录制”模式录制的每个步骤都显示在关键字视图和专家视图中。(“模拟录制”仅录制关键字视图中那个调用外部模拟数据文件的步骤。)

模拟录制和低级录制的规则

模拟录制和低级录制产生的脚本无法插入检查点,而且应用程序界面稍有变动则脚本无法正常运行,所以非万不得已(QTP正常支持的B/S结构以外的情况)应该避免这两种录制方式。有时候因为无法正常录制或者无法正常运行,初学者就可能考虑使用这两种方式录制,事实上,只要是C/S(其实部分结构简单一点的B/S)结构,基本上都能够避免所遇到的这些问题,具体方法,参见第二部分。

当选择“模拟录制”或“低级录制”时,请考虑下列规则:

只有当QuickTest 的正常录制模式不能准确录制您的操作时,才应使用“模拟录制”或“低级录制”。“模拟录制”和“低级录制”要求比正常录制模式更多的磁盘空间。对于特定的步骤,您可以在录制会话期间切换到“模拟录制”或“低级录制”。在以“模拟录制”或“低级录制”模式录制了必要的步骤之后,就可以返回到正常录制模式来完成录制会话的其余部分。

7、对象库和对象属性

a)对象识别和智能标识

对象的属性识别主要来自QTP识别的网页(或者其它)本身的控件设计,因此对象的属性是灵活多变的,有时候我们需要添加一个或多个属性,有时需要删除一个或多个属性,具体的情形要根据当时的情况而定。录制或编写测试脚本的时候要注意多观察:哪些属性能够唯一表示一个对象,哪些属性值是随机变化的,哪些属性需要多次运行时都能够匹配。

?对于对象属性是变化的,可以参数化/或者用正则表达式(参见第一部分基础知识),即在选定的对象的属性值里面采用正则表达式(具体书写规则参见“正则表达式”一节)或者使用参数表(不是很灵活)来对其进行赋值。这样QTP运行时会自动查找对象进行匹配,比较方便,不需要反复添加对象。

?报匹配多个对象错误,可以spy(如下图)查看对象,添加一个该对象另一个唯一标识属性,而这些能够唯一标识的属性需要自己仔细观察来寻找,通常这些唯一标识对象的属性往往是可变化的,如果需要获取对象属性值,这种方法事实上并不是很明智。例如Web复选框类WebCheckBox的的对象属性基本上都是一样的,录制时的区别可能只是自动在他的运行时属性里添加index或location使录制的对象变为_2、_3等等,否则运行时就会提醒无法唯一表示对象,而QTP本身的智能表示机制就可以解决这个问题,不需要手工添加属性来区别。

?上图中显示能够为一区别于其它几行的对象是凭证号对应的列,其对象属性值1117是不同与其它对象的唯一标识,然而在对象捕捉的时候如果将此对象属性值也包含在内的话,下次运行时如果第一行1117号票据已经不存在的话,QTP就会报“找不到对象”

错误。所以对于多个完全相同的对象,可以采用添加index,location,createtime等特殊属性的“定位法”来识别对象。例如:

index: 按照程序源码,绘制对象的先后标识对象,所以与其它相同对象是相互依赖,当其它对象发生变化后,原先的所有对象index属性要发生变化,开始是0。东

亚银行前端交易页面某些交易(例如RB7H,RB1904等)进行时需要获取

webelement的变化的属性值“innertext”,为了能够将交易进行下去,只能使用方

法三里的方法:删除属性“innertext”,然后通过调整index的值来定位所需要

获取的属性的属性值所在的位置。

location:根据对象的位置进行确定,从上到下,从左到右

CreateTime:按照对象被浏览器打开的先后标识对象)

在对象库里添加一个自动含有index标识属性的对象,然后每次通过SetToproperty来改变index值,对对象进行数据驱动,使其操作另一个对象,但脚本始终操作原先index 属性值的对象;这时考虑把该对象删除掉,重新添加一个不自动含有index标识属性的该类对象,然后,手工添加index标识属性,后来脚本能正常工作了,可见两次的对象属性完全一致,但形成方式不一样,导致的结果往往也不一样。

?而QTP自身为了解决相似问题在windows控件里都会添加window id这个属性,它是个随机变化的属性,每次都会随机产生一个与上次不同的值,所以这样反而无法在下一次运行时对对象进行匹配,总是提示找不到对象,有时可以删除对象的变化的属性来解

决识别问题,再进行录制脚本的时候可以事先在工具\对象标识(如图)里面通过配置各个类的属性操作来删除这些可变属性,重新进行录制或添加对象就可以了。

选择相应的插件类型(如Web、Activex等),然后对相应的类(如WebElement)分别在强制属性和辅助属性里点击“添加/删除”按钮,配置你所需要的能够为一标示你所需要的对象的属性。

如需启用智能标识,则选中“启用智能表识”,然后点击“配置”按钮(如图):

同样在“基本筛选属性”和“可筛选属性”里面通过点击“添加/删除”按钮来选择进行对象智能标识的属性。

另外换一种思维方式,采取等效的方法;比如用键盘代替鼠标或用操作系统本身特性去解决问题。这种方法可忽略对象库中的对象,不需要识别,前提是除去判断语句;但是

这种写法——使用键盘模拟函数只能够处理弹出对话框或msgbox中只有一个按钮的情况,或者两种但是默认停留在需要点击的地方。

相关信息参见下文“键盘模拟”。

b)万能键盘模拟函数

Extern.Declare micV oid,"keybd_event","user32.dll","keybd_event",micByte,micByte,micDWord,micULong

Extern.keybd_event 32(参数),0,0,0

由于space键代码为32,所以上述代码模拟了点击space键操作,其它键盘操作代替可由下表查得:

更多的键盘代码请参见:虚拟键盘码一览表

c)键盘模拟函数:WScript.Shell的应用

set WshShell =CreateObject("WScript.Shell")

WshShell.SendKeys "{ENTER}"'模拟键盘进行操作

键盘键-函数一览表

相关主题
文本预览
相关文档 最新文档