QTP描述性编程简介与Java CS程序实例

来源:互联网 发布:大数据用到哪些数据库 编辑:程序博客网 时间:2024/05/22 15:03

     一、录制模式和描述性编程

     熟悉QTP的同学都知道,QTP有两种脚本编写方式:录制模式和描述性编程模式。

     录制模式不用多说,碰过QTP的都熟悉。描述性编程是通过脚本的编写对对象的属性进行描述,通过合适的对象和正确的描述达到唯一定位该对象的目的,进而确定这个对象,对其进行操作。

     录制的方式脚本编写简单快速,但由于特定控件的识别方式是QTP内置,所以灵活度低,虽然可以通过identification的配置进行更改,这已经走出了录制的本意也带来了复杂度,并且未必能得到最终的目标。同时,一些特殊对象无法进行识别(如名称发生变化的)。作为一个使用过录制和描述性两种方法的作者,我逐渐抛弃录制还有一个原因,我不想去管理对象库。当项目有一定规模的时候,一些通用控件是否要统一管理在全局对象库中,有了变更又怎么处理?通用控件也分层次,哪些是整个系统的,哪些是某个模块的,还要做区分。 与其考虑这么多事情,有事还要猜QTP的处理,还不如干脆的进行描述性编程。

    描述性编程最大的好处就是灵活,能够更好的对通用控件、处理进行模块化。缺点就是脚本周期长,投入成本高。综合考虑一下,如果用录制方式的脚本回放有诸多问题,调试如此痛苦,直接用描述性编程,可以说是长痛不如短痛。

    我理解描述性编程其实是QTP把更多的控制权交给了稍微懂得多一点的人,或者是想懂得多一点的人。特别是最近遇到几个问题,通过Test Object的Operation无法完成操作时,调用Native的Operation解决了貌似无法解决的问题,更体会到了灵活的好处。

    二、描述性编程实例

      目前面对是一个Java Swing编写的CS系统,简单对一个窗口进行放大和缩小。

    

            这是一个描述性编程的实例,通过JavaWindow的toolkit class属性进行该窗口的描述,进而在系统中唯一标示该对象。对于类似的通用对象可以进行通用函数库的封装,如上放在common库中,项目都可以使用。其他需要的地方调用的方式如下。

           

          直接调用该对象,对其进行最大化、闪烁、关闭。不需要考虑对象库如何存储、管理,如果是本模块的通用对象、处理,就定义本模块的函数库,只要有基础的C语言全局变量知识、函数作用域知识就能够理解。

        三、Java对象属性说明

        描述性编程时使用什么属性是有规律可循的,实在不行index肯定好使。不到万不得已不推荐,界面变更会导致index变化。

      

      1、Java对象隶属结构。这是该对象如何存在在系统的树形结构,从根到所选对象,表示如何从主窗体加了什么panel,又做了什么split,最后到了需要识别的对象。这个关系还是比较重要的,对识别是有用的。形象的说,这是一个该对象怎么产生的家谱,从它往上找可以看到它的父对象是谁、祖父对象…………

    2、Properties是属性,Operation是操作。实际就是该对象的成员变量(简单类型,能够转成String的,如果是对象类型,需要通过chilcobjects去跟踪)和成员函数。操作后面说。Properties又分两联:Native和Identification。

   3、Native是原生态,Identification是QTP识别属性。Native是QTP认为的这个对象的全部原有属性,为什么说是QTP认为的,因为在使用中发现,和实际的系统代码编写并不一致。比如系统中某JavaTabel定义了一个记录横纵坐标的和,QTP是不会列出来的。这很容易理解,QTP是拿着Java插件来识别、解释Java对象,自己系统中定义的偏门变量QTP没有你的代码、没有Jar包,如何得知?Identification是QTP负责任的属性,这些属性肯定可以获取,但不保证唯一。

   4、具体的属性和具体的值的对应值。说明几个了解的,更多的没有用到。

         abs_x和abs_y,获取坐标值的绝对值,能够获取,用来识别不靠谱。

         attached text,获取附件字段,存在是部分可以识别

         index,对象下标,在sby中看到为空,实际是有值的。实在没办法时用来识别,屡试不爽。

         label,标签值,用来识别button特别好用,部分window也可以使用。

         tagname,标记名称,很多时候与label、attachedtext三者一致,可以用来识别。

         text,字符串内容,可以用来识别

         toolkit class,特别推荐使用的属性,从内容看就是该对象的包名,所以特别适合定位Java对象。

      四Java对象操作说明

      

       操作的界面基本与属性类似。

      1、原生态操作和QTP操作。概念与Properties类似,原生态是QTP给的借鉴,经验说明是不负责任的提示,我的经验是使用JavaAPI还靠谱些。QTP给出的操作还是很丰富也是很好用的。

      2、选择的操作和描述。这个描述只有Test Object这一联有,其他的都没有。说明选择的操作含义。



        综合考虑,如果项目要很快出脚本,用个一次半次就不用了,不用考虑维护和扩展,建议使用录制模式。如果项目有一定规模,需要重复使用,建议描述性编程。即便是自己学习,个人也推荐描述性编程。能够通过描述性编程获得更大的控制权,而录制模式遇到无法解决的问题真的有种有力无处用的感觉。