QTP描述性编程简介与Java CS程序实例
2017-05-21 14:30
363 查看
一、录制模式和描述性编程
熟悉QTP的同学都知道,QTP有两种脚本编写方式:录制模式和描述性编程模式。
录制模式不用多说,碰过QTP的都熟悉。描述性编程是通过脚本的编写对对象的属性进行描述,通过合适的对象和正确的描述达到唯一定位该对象的目的,进而确定这个对象,对其进行操作。
录制的方式脚本编写简单快速,但由于特定控件的识别方式是QTP内置,所以灵活度低,虽然可以通过identification的配置进行更改,这已经走出了录制的本意也带来了复杂度,并且未必能得到最终的目标。同时,一些特殊对象无法进行识别(如名称发生变化的)。作为一个使用过录制和描述性两种方法的作者,我逐渐抛弃录制还有一个原因,我不想去管理对象库。当项目有一定规模的时候,一些通用控件是否要统一管理在全局对象库中,有了变更又怎么处理?通用控件也分层次,哪些是整个系统的,哪些是某个模块的,还要做区分。 与其考虑这么多事情,有事还要猜QTP的处理,还不如干脆的进行描述性编程。
描述性编程最大的好处就是灵活,能够更好的对通用控件、处理进行模块化。缺点就是脚本周期长,投入成本高。综合考虑一下,如果用录制方式的脚本回放有诸多问题,调试如此痛苦,直接用描述性编程,可以说是长痛不如短痛。
我理解描述性编程其实是QTP把更多的控制权交给了稍微懂得多一点的人,或者是想懂得多一点的人。特别是最近遇到几个问题,通过Test Object的Operation无法完成操作时,调用Native的Operation解决了貌似无法解决的问题,更体会到了灵活的好处。
二、描述性编程实例
目前面对是一个Java Swing编写的CS系统,简单对一个窗口进行放大和缩小。
![](https://img-blog.csdn.net/20170521145730227?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ2xpYW4yMDE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这是一个描述性编程的实例,通过JavaWindow的toolkit class属性进行该窗口的描述,进而在系统中唯一标示该对象。对于类似的通用对象可以进行通用函数库的封装,如上放在common库中,项目都可以使用。其他需要的地方调用的方式如下。
![](https://img-blog.csdn.net/20170521150256401?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ2xpYW4yMDE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
直接调用该对象,对其进行最大化、闪烁、关闭。不需要考虑对象库如何存储、管理,如果是本模块的通用对象、处理,就定义本模块的函数库,只要有基础的C语言全局变量知识、函数作用域知识就能够理解。
三、Java对象属性说明
描述性编程时使用什么属性是有规律可循的,实在不行index肯定好使。不到万不得已不推荐,界面变更会导致index变化。
![](https://img-blog.csdn.net/20170521151938387?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ2xpYW4yMDE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
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对象操作说明
![](https://img-blog.csdn.net/20170521155640891?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ2xpYW4yMDE3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
操作的界面基本与属性类似。
1、原生态操作和QTP操作。概念与Properties类似,原生态是QTP给的借鉴,经验说明是不负责任的提示,我的经验是使用JavaAPI还靠谱些。QTP给出的操作还是很丰富也是很好用的。
2、选择的操作和描述。这个描述只有Test Object这一联有,其他的都没有。说明选择的操作含义。
综合考虑,如果项目要很快出脚本,用个一次半次就不用了,不用考虑维护和扩展,建议使用录制模式。如果项目有一定规模,需要重复使用,建议描述性编程。即便是自己学习,个人也推荐描述性编程。能够通过描述性编程获得更大的控制权,而录制模式遇到无法解决的问题真的有种有力无处用的感觉。
熟悉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这一联有,其他的都没有。说明选择的操作含义。
综合考虑,如果项目要很快出脚本,用个一次半次就不用了,不用考虑维护和扩展,建议使用录制模式。如果项目有一定规模,需要重复使用,建议描述性编程。即便是自己学习,个人也推荐描述性编程。能够通过描述性编程获得更大的控制权,而录制模式遇到无法解决的问题真的有种有力无处用的感觉。
相关文章推荐
- Java经典算法四十例编程详解+程序实例
- Java经典算法四十例编程详解+程序实例
- UNIX环境编程学习笔记---------编程实例----自己写的CS程序
- Java经典算法四十例编程详解+程序实例
- Java经典算法四十例编程详解+程序实例
- 在QTP中使用描述性编程(实例)
- 一个简单的SWT程序实例及详解-Java基础-Java-编程开发
- Java网络编程实例---------------------------------Java HTTP代理程序
- 【Java网络编程】UDP协议实例——简单的在线聊天程序
- java 网络编程【6】 用UDP编写网络聊天程序 以及 TCP编程实例
- Java经典算法四十例编程详解+程序实例
- Java经典算法四十例编程详解+程序实例
- Java经典算法四十例编程详解+程序实例
- JAVA_编程小程序_循环程序_猜大小游戏
- Java并发编程札记-(四)JUC锁-10Semaphore简介
- Java编程实例:向内旋转的三角形
- Android JNI编程(八)——体验AS2.2.2编写Jni程序、Java调C、C调Java函数、将C代码中的Log打印至Logcat
- 通过SmartInvoke运用java与flex轻松构建cs程序(映射服务类型与异种平台类型对应规则)
- Java 核心编程之并发简介
- obj-c编程15[Cocoa实例04]:基于Core Data的多文档程序示例[未完待续]