I don't make software; I make it better

QTP学习笔记

上一篇 / 下一篇  2008-04-01 11:11:27 / 个人分类:QTP学习

2008.4.1

下面是今天上午录制的一个脚本,然后进行了少量编写:

Dim iStatus
Browser("XXX").Page("XXX").WebEdit("txt_user").Set DataTable("username", dtGlobalSheet)
Browser("XXX").Page("XXX").WebEdit("txt_Password").SetSecure DataTable("password", dtGlobalSheet)
Browser("XXX").Page("XXX").Image("Btn_Login").Click 25,8
iStatus = DataTable("status", dtGlobalSheet)
If iStatus = ""  Then
 Browser("XXX")
End If
If iStatus = "用户或密码错误!"    Then
 Browser("XXX").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
     Reporter.ReportEvent micFail, "登录过程", "登录失败."
End If
Browser("XXX").Close

小结:1.录制过程很简单,但要保证脚本全部通过还是有点麻烦,老是出各种各样的小错误。其中一个是datatable的新增,变量iStatus声明后还需在global中增加个属性,在显示栏上双击输入Status。

2.第2个经验是保证脚本的连贯性,由于qtp脚本执行的不连贯,当出错时需要手工调试,虽然有小工具帮忙进行处理,但是能自己在编脚本里处理最好。录制登陆过程有2种,一种是正确登陆,一种是错误登陆,开始我只录制了正确登陆的情形,结果,因为后面还有错误登陆的情形,结果执行到错误登陆时,没法继续进行下去。于是我录制了错误登陆的脚本,把其中的提示点掉的代码复制到了end if的后面去: Browser("XXX").Dialog("Microsoft Internet Explorer").WinButton("确定").Click。最后顺利自动执行完所有脚本。

3.函数:Reporter.ReportEventEventStatus, ReportStepName, Details [, in]

主要功能:Reports an event to the test results.
EventStatus:事件情形,主要4种 micPass;micFail;micDone;micWarning

ReportStepName:报告中的步骤名称

Details:具体细节

示例:Reporter.ReportEventmicFail, "Custom Step", "The user-defined step failed."

4.编制脚本2种方式:一是视图模式,编写形象化,但效率低;一是专家模式,编写抽象化,但效率高。

“高手”大概就是能熟练的用专家模式快速编写脚本吧!

2008.4.2

今天主要阅读了QTP专区的部分精华帖,总结如下:

1.录制带有ActiveX插件的WEB系统,回放第一次没问题,第二次就有问题的解决方案。这个问题以前遇到过,解决方法: (1)延迟可用WAIT X(X单位是秒)(2)可以安装插件添加新的浏览器
          SystemUtil.Run "file” "params" "dir" "op'' "mode"(3)依次点击 Tools ---> Options... ----> Active Screen ,  然后点开 Advanced.. 按钮,  选中 Load ActiveX  controls (就是前面出现 对号); 同时把  Run scrīpts 的选项改为  Disabled 就可以了!
2.校验码的解决方案:(1)暂时屏蔽校验码;(2)跟程序员拿程序,然后自己在脚本里面写FUCNTION

3.QTP无法录制某些控件的操作的解决方法

4.QTP调用外部动态库的方法

主要用到的函数是:Extern.declare(RetType,MethodName,LibName,Alias[[,ArgType(s)],...])
例子:

Extern.Declare micHwnd,"FindWindow","user32.dll","FindWindowA",micString,micString

其中VC中的INT在QTP中用micInteger表示,char*在QTP中用micString表示。

启示:QTP这种调用外部动态库的机制保证了QTP的扩展性。

5.什么是Keyword-Driven Testing

一般开发的前一步是设计,通常会做出用户界面(UI)来给客户看,然后确认后就可以展开测试工作自动化测试就可以从模型确认后这一步开始。通过Object Repository可以先于开发一步建立测试脚本。

启示:测试人员可以更早就开始建立测试脚本,测试先行。不过实际运作中必须保证需求和设计完全匹配,且变化不大的情况下。否则实际意义不大。QTP还是做回归测试更好一些。

2008.4.3

1.实际录制了脚本,发现对于日期类控件,采用低层次录制比较合适,如此类控件

而对于richtext类控件,则使用virtual object比较合适。

2008.4.8

今天复习了oldsidney的QTP学习手册,下面是做的笔记

1.浏览器设置:IE工具-内容-个人信息-“自动完成”上的"表单上的使用者名称合密码"取消;
2.Expert View的分析:
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("userName").Set

"jojo"
一般几个部分构成:第一层:Browser(" ")表示的是打开的网站
    第二层:Page(" ")表示的是打开的网页
    第三层:控件类型("名称")
    第四层:操作方式("操作内容")
3.检查点:标准/图片/表格/网页/文字/图像/数据库/accessiibility/XML检查点
(1)标准检查点:主要时检查控件。不仅仅是检查文字,还可以检查该控件的属性等发生变化没,比如

同样是text,如果源代码里控件名字变化了,那么最后检查的结果仍然是错误的。而对属性的调整不能在

专家模式里调整。
(2)网页检查点:包括检查链接数与网页上的图片以及坏链接的检查,还有加载时间等。不过检查时间

比较长,做功能测试时一般不要写进去,可单独检查时使用。
(3)文字检查点:2种,一种固定的,一种活动的。活动的即关联前面选择的文字,如飞机订票里,飞行

起点选择的是哪里参数化,后面检查也关联此参数化的字典。
(4)表格检查点:同标准检查见一样,只需检查必要的字段,无需检查所有属性。
4.动态值的检查
对于如飞机票价格的检查一般是动态的值,因为随着飞行起点和终点的变化,飞机票的价格也随之变化。

所以要先建立飞机票价格的输出值,再进行关联。主要是用Insert Output把动态值先建立起来,然后在

后检查时再关联起来。
5.万用字符表示法
象正则表达式一样,通过特殊字符如. 8 ^ []等来组合搜索。常见的如日期格式:[0-1][0-9]/[0-3][0-

9]/200[0-9],但是用这个来匹配4/8/2008的时候却不行,改成[0-9]/[0-9]/200[0-9]就可以了。看来匹

配非常严格,要把正则表达式学好。
6.脚本切动作
有点象分类,把不同业务切出来单独做一起。把一个Action切成2个Action。步骤:Step>Split Action
然后再把动作设置为可再使用动作:选择[Action Properties]后,点选【Reusable action】,然后点下

OK。

2008.4.9
1.reporter.Filter='0/1/2/3'[]
Reporter.filter分为四个属性:
               0或者rfenableall 所有的报告都显示在test result中
               1或者enableerrorandwarning错误和警告信息显示在test result中
               2或者rfenableerroronly只把错误显示在test result中
               3或者rfdisableall不在test result中显示任何信息

2.关于getRoporperty ,getTopropertise, getToproperty
书写格式: object.GetROProperty (Property) object.GetTOProperties
   object.GetTOProperty (Property)
其中property为属性的名称
例:
下面的例子取出radio group的项目数,保存在numoflterms中
NumOfItems = Browser("Mercury Tours").Page("Find Flights").WebRadioGroup("seat

pref").GetROProperty("Items Count")
如其中的index这项,他的值在录制的过程中是9,那么使用getToproperty返回的值就是9.
index这个值做了参数化,发现index值不为9了,变为了10,使用getRoporperty返回的值就为10.

2008.4.24

1.在QTP中没有提供用于直接操作注册表的测试对象,但是利用Windows脚本的Shell对象,可以对注册表进行增删改等操作,例如下面的脚本:

Dim WshShell, bKey

' 创建Shell对象
Set WshShell = CreateObject("Wscrīpt.Shell")

' 使用Shell对象来读取注册表
bKey = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 1.5\Extensions\Plugins")
Msgbox bKey

' 修改注册表
WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 1.5\Extensions\Plugins", "D:\Program Files\Mozilla Firefox\Plugins", "REG_SZ"

' 删除注册表
WshShell.RegDelete "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 1.5\Extensions\Plugins"

' 修改或写入注册表
WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 1.5\Extensions\Plugins", "C:\Program Files\Mozilla Firefox\Plugins", "REG_SZ"

2008.4.29

1.QTP中的descrīptive programming

详细参见:http://www.51testing.com/html/51/133.html

摘要:

    通常情况下,当在录制一个操作时,QTP会将被操作对象加入到对象库里(Object Repository)。一旦对象存在于对象库里,我们就可以在专家视图里通过添加相关的对象方法来对该对象进行操作。我们可以通过引用层次型对象库里的对象描述(Object Descrīption)来添加相应的方法。
    然而对象库里如果没有这些对象,我们也无从引用。因此我们必须采用其他技术来完成这类操作,这也就是我们需要讲解的Descrīptive Programming。
    为了满足上面提到的动态对象的处理问题,QTP允许用户通过将对象属性编码到测试脚本里来动态识别对象,这就是我们通常意义下称为的Descrīptive Programming。通过这种方式,我们可以指示QTP不通过引用对象库和对象名来对实际对象进行操作。具体操作中,我们只需要为QTP提供对象的一组属性和值,这样QTP就可以来识别相应的对象并对其进行操作。这相当于,告诉QTP要识别对象的一些关键特征,根据这些特征QTP就可以一一匹配然后识别出来这个对象。
    先看一个简单一点的情况,假设只有且仅有一个Yahoo主页面:那么我们可以用下面的方法来
Window("Text:=Yahoo! - Microsoft Internet Explorer").Close
我们可以看到语句里我们要查找的对象是Window窗口标题为“Yahoo! - Microsoft Internet Explorer”,然后把它关闭,但是上面的语句仅仅适合前面提到的条件“只有且仅有一个Yahoo主页面。

 

 

 

 


TAG: QTP QTP学习

 

评分:0

我来说两句

Open Toolbar