qtp工作原理

来源:互联网 发布:92式步战车模型数据 编辑:程序博客网 时间:2024/06/12 21:23
      经过一段时间的了解,发现学习qtp自动化测试工具不比学习java开发容易,如果给重新选择的机会我想我还是会选择去做软件开发。因为那样会让我觉得有成就感,让我会力争上游,不断去朝自己的目标进发,这也许是测试工作所缺少的一种更加强烈的激情。不过说这些也都只是假如,重要是回到当前来谈谈如何能把测试工作做得更好,能很好的使用qtp来自动化我们那繁琐而又重复的测试工作,我想这是我们做测试工作唯一觉得有激情的事情。那好吧,现在就开始吧!

      学习任何知识如果不了解他的基本原理,我想很难学到属于自己的知识,这也是我以前缺乏的这种能力,估计是没有找到方法吧,所以这次我开始学会运用这种方法来学习。那么qtp的自动化测试原理是什么呢,我们可以对比一下qtp和loadrunner的录制机制,发现loadrunner更多是录制应用程序的内嵌机制,而qtp是注重于GUI,也就是基于页面上的东西,通俗来讲就是界面上的控件,就是qtp所要捕获的对象。我们通过qtp来模拟人的手工操作,进行一些自动化的测试工作,它在模拟人的手工操作过程中会记录操作的对象和所做的操作顺序,然后在回放时按记录顺序操作这些对象,在这个模拟回放的过程中,最重要的就是对界面对象的识别,那么qtp如何来识别这些对象呢?这里我们来看一个基本登录界面,由于上传图片比较慢,所以这里就由文字来概述,一个登录界面中有文本框、标签和按钮,这些就是qtp捕获的目标,然后通过捕获对象形成一个库,然后会把相应的对象的属性和方法列出来,然后在录制过程中调用相应对象的属性和方法,并进行qtp的相关操作。这里我们将qtp录制一个具体的代码段做相关说明,如:qtp录制的脚本Browser("百度一下,你就知道").Page("百度一下,你就知道").WebButton("百度一下").Click

这里的控件WebButton就是qtp捕获的其中一个对象,因为在对象库中已经被qtp所捕获,所以它可以非描述性编程脚本所描述,假如该控件没有被对象库所识别我们可以qtp的对象库捕获工作捕获到该控件的属性和方法,就可以通过描述性编程来显示,如下:WebButton("name:=百度一下").Click,相信这种方式看起来应该会更直接。好吧,能说的东西就这些,实践还是很重要的,多动手就会理解得更透了。


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页面上的对象控件,这样就能够解决一些关于对象识别的错误。

0 0
原创粉丝点击