编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

QTP工作原理是什么,干货大发送(ospf工作原理)

wxchong 2024-09-03 23:28:20 开源技术 8 ℃ 0 评论

QTP工作原理

1.录制的时候,QTP将我们操作过的所有对象都记录下来,保存在对象库object repository中,记录的形式是一个逻辑名加上若干识别属性

2.运行脚本时,QTP分析该脚本要执行那个对象的操作,然后根据该语句中的逻辑名,在对象库中查找该对象的详细记录,然后在运行的真实披头散发软件中按图索骥,找到需要操作的对象,把语句规定的操作施加在该对象上.施加的主要动作就是把操作的相关消息时间放入到该对象窗口的消息循环队列中

3.所以,一个完整的脚本测试应该包括两部分,一个是测试脚本的代码,一个是对象库

另外:

描述性编程和传统的QTP脚本的区别是:他把需要识别的对象的属性从对象库中转移到了脚本里面,通过在脚本里面的特殊语法格式.来告诉QTP识别对象的方法.描述性编程更加灵活,因为他不需要经过录制这个步骤,可以直接通过编程的方式操作任何一个你想操作的对象,只要你在测试脚本代码里提供给QTP识别该对象的足够信息。

描述性编程没有严格的要求,只要遵循一个原则:在代码中告诉QTP足够他识别该对象的属性,QTP就可以不通过对象库,而是通过描述性编程的方式完成对指定对象的操作.所以描述性编程没有什么神秘的,他无非是把原来存储在对象库中的信息提到代码中来了而已.

工作原理简单点说就是通过把QTP安装到电脑上,然后用生成脚本,回放来回归测试。

对象识别原理获取hwnd,然后判断ui属性,逐个判断,然后逐层递归,最后获取每个对象的所有层面的属性,跟对象库里的属性进行比较,匹配则应用,不匹配则智能识别(重新启动识别过程,过滤出一些符合条件的,进行判断后找到唯一匹配项)

复杂点说:把对象从被测软件ui中读取出主要特征,存入对象库,回放时在被测试软件中寻找指定对象,赋予对象一些方法,方法为windows win32或者web上的一些activex控件的通用方法(或者javascrīpt应用于一些未支持的事件,比如link.click),微软控件对外的接口,把其中一些方法进行封装,成为qtp自己的方法,比如getroproperty=对象。object.value ,然后运用这些方法属性驱动被测试对象完成一些指定的动作。对于任何一个add-in都是先找到人家的对外接口,然后拿过来封装,需要的时候去调用接口事件,也就成为了QTP的动作。

此外还有数据驱动 xx驱动的,每种驱动方式都大同小异,瞎JB侃呗……怕啥的阿,反正谁都不明白。面试的人肯定也不明白啥,就是随便问问

一直认为学习一个工具一定要学会它的本质和原理才能真正的有所收获,不然工具换掉或者工具被淘汰就会很尴尬,又要从头学习。当你学会了本质,其他的工具学习起来也会很快的,并且从开发的角度去思考问题,更容易学习好一个工具。最近学习了几天的QTP,对QTP的原理有一个简单的认识,和大家分享下。

个人认为QTP的脚本运行其实就是一组对象有组织的执行自己的方法,最终完成一个流程的过程。当打开一个web时,想要脚本能够模拟人来操作整个流程,那多就要求这个脚本能够识别人的每一个操作,而人的操作实际上是对web页面上控件的操作,所以只要QTP的脚本能够识别人操作过的控件就可以模拟人的操作流程,而web页面上的控件都是QTP脚本中的对象,也就是说只有QTP脚本中的对象能够被唯一的识别出来,就可以模拟人的整个操作流程。而QTP又是如何识别对象的呢?

对象识别原理就是获取hwnd,然后判断ui属性,逐个判断,然后逐层递归,最后获取每个对象的所有层面的属性,跟对象库里的属性进行比较,匹配则应用。也就是说在你添加一个对象到对象仓库中的时候,该对象的主要属性都被保存到对象库中了,回放QTP脚本的时候实际上就是在被测试软件中寻找指定的对象,然后按照这些对象指定的方法去完成一个动作,而这些方法就是把windows win32中、web上的一些activex控件中的方法和微软控件对外的接口中的一些方法进行封装,成为qtp自己的方法。对于任何一个add-in都是先找到人家的对外接口,然后拿过来封装,需要的时候去调用接口事件,也就成为了QTP的动作。

所以QTP脚本回放实际上就是要做两个步骤:1)识别出要操作的对象控件。2)识别出对象控件后来完成该对象控件指定的方法。

在QTP识别对象的时候是按照对象的唯一属性来区分的,有时候QTP对象仓库保存的对象属性是不完全的,导致两个很相似的对象不能够识别出来,这样脚本就会报错,或者说对象仓库中对象的属性每次都是变化的,那么每次回放脚本也会和对象仓库中保存的不一致导致脚本报错。这里介绍一个很好用的web对象的属性——object属性。

QTP支持直接访问DOM,可以通过DOM来访问HTML标签。在QTP中,访问DOM是通过使用page测试对象的object属性来进一步访问的,这样就可以访问到很底层的对象属性,可以用底层的对象属性来唯一区分web页面上的对象控件,这样就能够解决一些关于对象识别的错误。

用page页中的Link对象举例说明object属性:

Browser(”网易”).Page(”网易”).Link(”VIP收费邮箱”).CheckProperty “URL”,”http://vip.163.com/”

其中使用了CheckProperty方法来对比Link对象的URL属性是否等于指定的地址(http://vip.163.com/),也可以用Link对象的object属性中的herf属性来对比,代码如下:

herf = Browser(”网易”).Page(”网易”).Link(”VIP收费邮箱”).Object.href

If not herf = “http://vip.163.com/” Then

reporter.ReportEvent micFail,http://vip.163.com/, herf

End If

窗体顶端

利用开发语言的反编译原理,将控件的方法和属性预先封装。如此,在录制的时候,只要打开相应的插件,QTP就能够准确识别控件类型及其对应的属性等内容(特殊控件除外)。

Quick Test Professional

一、简答题:

1 QTP有哪几种录制模式?

答:正常录制模式、低级录制模式、模拟录制模式

2 LoadRunne和QTP的工作原理有何不同?

LoadRunner:基于协议的性能测试

录制原理:捕获数据包

QTP:基于UI(用户界面)对象的功能测试

录制原理:识别对象

测试计算器时,如何加入所有控件?怎样将加入的控件导出,以便下次再用?

4、QTP中global 和local 的区别?两者的迭代次数分别在哪里设置?

5、用QTP录制脚本后如何修改脚本能够增加其灵活性?

答:参数化、封装、ACTION复用

6、QTP中Object Spy的作用?能否用它来添加对象,如果可以说明步骤,如果不可以请说明如何添加。

答:查看对象,包括属性和方法

不能添加对象

7、如何修改共享对象库中的值并使之生效?

8、Action1中参数传递到Action2中有哪几种方式,请分别加以说明。Datetable

共享、通过环境变量共享、通过

Action parameters

的参数传递

9、正则表达式:\(?0\d{2}[) -]?\d{8}表示什么内容?

答:表示国内电话号码

10、 [QTP]请将下面操作用另外一种描述性编程实现(通过Description对象):

Window("Error").WinButton("text:=OK", "index:=1").Click

二、脚本开发题

1、录制

QTP自带软件

Flight4a

系统的订票功能,

要求:

对所订机票的机舱类型进行参数化,

即实现

定购如下图所示

3张不同机舱类型(如图)的飞机票,如何实现?

2、如果运行

Fight4a的登录脚本前(脚本中需要QTP自动打开登录框)被测对象已经存在多个了

(如图)

这将导致后续步骤出错,如何能够先将已经打开的登录框关闭再执行登录呢,请将脚

本中关闭多余登录框功能补充完整。

3、如果将DataTable中原本写在Global的参数改写在Action中,则需要加上怎样的代码达到原来 的迭代效果?注:Action1迭代设为一次

4、用QTP打开Word并录入内容。

5、用QTP打开记事本写入汉字。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表