GUI自动化测试原理剖析—JAVA测试篇

上一篇 / 下一篇  2011-06-01 19:25:57 / 个人分类:自动化测试—GUI测试设计

 

 

 

 

序言: 接触过自动化测试工具的测试人员,例如,Rational fuction testeQTP等,一定对“录制—回放”这种机制不陌生吧,但是又有多少人能够了解其内部大概的运行机制呢?更又有多少人能从代码级别及其框架去分析其运作原理呢?

 

我一直觉得,你不理解它,你就无法用好它,更别说去拓展它成一个框架或者平台了。

 

它,在录制时,是怎么获取对象的?可以不通过录制的方式获得对象吗?

 

它,在回放时,是采用调用什么方式进行回放的?可以通过API或者自己编写代码使其录制的脚本进行回放吗?

 

自己如何去编写一个简单的“录制—回放”工具呢?

 

那么,今天就大概根据自己的简单介绍一下这种机制,希望能够帮助大家一起真正走入一个自动化测试的“大门”。

 

一、工具如何实现录制和回放

首先大概介绍一下自动化测试工具实现录制和回放的两种方法,其重点是对象的识别。

1、 静态映射:当录制时,通过ObjectMap,将需要识别的JAVA应用程序的组件对象映射进对象库,然后,回放时,RFT首先根据正在运行的JAVA程序到对象库去查找相应的对象,若匹配到对应属性阈值适合的对象,则调用其脚本中的方法对对象执行操作。

一般的工具在工具与AUT之间都有一个代理,这个代理就是包裹着实际要测试的界面的控件,而ObjectMap是脚本层面的东西,它们之间存在一个映射关系。RFT通过代理与AUT进行交互。

需要明白的是,由于swing组件的树形结构关系,因此,ObjectMap中的映射出来的对象也是采用这种形式,虽然RFT中可以通过自己设置识别阈值的方式,但是对界面更改的适应能力还是不高。

2、 动态搜索:应用动态搜索就可以不需要采用录制的方式了,而且也不需要对象库的方式,它是直接通过调用工作库中的API来定制相应的组件属性进行查找即可;回放时,自动化测试工具会获取正在运行的JAVA程序的各个组件属性,然后进行属性匹配,若是能够匹配到相应符合的属性,则会进行脚本规定的方法操作;

 所以,应用动态搜索的方式,虽然在识别效率上降低了,但是其识别能力大大提高,界面如何变化,只要属性值不变,就没有太大问题,这也是为什么需要开发在开发JAVA程序的时候,尽量在属性值里添加一个唯一的识别属性ID了,这样做的目的可以使自动化测试更好的开展,这也可以作为以后各位的一个DFT需求了。

 

二、录制和回放的原理

 经过了第一环节的介绍,大家对自动化测试工作实现录制和回放的两种方式大概有所了解,但是深层次是怎么样的呢?

  借用关于JAVA的事件生命周期的一幅图片来说明:

 

  

  

   测试人员通过对界面的操作会生成一系列的事件,这些事件在工具的代码中会由事件生成后放在系统事件队列内部。现在事件处于事件分发线程的控制下。事件在队列中等待处理,然后事件从事件队列中选出,送到dispatchEvent()方法,dispatchEvent()方法调用processEvent()方法并将事件的一个引用传递给processEvent()方法。此刻,系统会查看是否有送出事件的位置,如果没有这种事件类型相应的已经注册的监听器,或者如果没有任何组件受到激活来接收事件类型,事件就被抛弃。

      录制时,采用了监听器模式,和平常swing编程不同的是,这里的监听器不是针对某个组件的,而是针对某种事件的。也就是说,任何组件发出的同一类型的事件,比如鼠标或者键盘事件,都会被其相应的监听器捕获到,然后进行处理。然后将捕获到的JAVA事件,可以以某种格式保存在脚本文件中,这里就需要一个转换机制了。

      回放时,则从脚本文件读取并还原事件,这里会用到java.awt.Robot类(JDK1.3之后引入的一个类,能模拟鼠标和键盘操作),这个类通常用来在自动化测试或程序演示中模拟系统事件,这个类主要的目的就是为方便的实现javaGUI自动化测试平台。在事件回放时,我们同样需要该类来模拟生成系统的事件,完成记录的操作的回放

 

三、Gui自动化测试的简单框架架构

   

1、类加载器或者应用程序加载器,则是去加载相应的应用程序或者主类,这样可以指定需要测试的应用程序。

 

2、 事件监听器,则是对应用程序所产生的各种事件的一个监听机制,可以通过拓展不同的事件监听来获得不同的事件。

 

3、 脚本解析器,包括脚本记录器与脚本读取器两个模块,一个可以从监听器中获得事件的有效信息并记录,可以指定记录到生成相应脚本。一个可以从本地脚本文件或文本域中读取脚本信息,并解释成相应事件。

 

4、 Robot类再封装,即是一个模拟回放器,将从脚本解析器解析过来的代码通过调用Rboot类进行模拟鼠标和键盘的一系列操作。

 

一个GUI自动化测试框架的基本架构大概就是这样,如果有兴趣的朋友可以深入研究,因为商业化的自动化测试工作实现的架构比这个要复杂一些,但原理基本还是一样的。

 WEBWIN32等界面自动化测试的原理架构大致也是如此,不过实现方式还是很不一样的,关键是调用的库方式不一样,具体在以后可以一起讨论。

 

四、选择一种合适的自动化测试方案

所以根据以上架构和原理,在自动化测试项目开展过程中

1、 有资源和人力的情况下,可以考虑自己去开发一个简单的自动化测试工具,这样的好处是灵活,能够很好的与自身的产品结合起来,缺点就是耗费资源太大,而且开发自动化测试工具不一定能好用。

2、 可以结合相应的开源自动化测试工具(例如:测试swing的可以用abbot),这种方式优点就是免费而且实现也有一定的基础,缺点就是其功能不一定满足其需求。

3、 采用商业性的自动化测试工作(例如:RFT),这种方式的优点是成熟度高,而且能很快的应用到项目中,但是注意的是需要自己去搭建一个框架,个人建议,应用RFT的话最好直接应用其API去拓展一个自己的库,通过自己的库去搭建一个适应自己需求的框架,这个在后期会介绍。

 

总之:各种方案的实行方式还是得具体根据项目的需求来,需求才是导向,而且个人根据经验:不要为了做自动化而自动化,不要去为了做自动化而迷恋入技术而不可自拔,一定要在适当的时候采用适当的方式,步步为进真心希望大家都能做好自动化测试


更多测试技能在线学习,更多测试文章,请访问http://www.zhibokeji.com/


TAG:

引用 删除 wangliuhai   /   2021-04-15 17:13:12
5
aishangdanpin的个人空间 引用 删除 aishangdanpin   /   2014-02-26 15:51:46
5
萧落JUNE的个人空间 引用 删除 萧落JUNE   /   2013-11-18 14:12:34
5
萧落JUNE的个人空间 引用 删除 萧落JUNE   /   2013-11-18 14:12:20
哪里都有你
原帖由xin_晴于2011-06-03 10:22:36发表
您好,我是51Testing软件测试网的编辑,您的本篇博文被推荐至51Testing软件测试网首页发表:http://www..
散步的SUN的个人空间 引用 删除 散步的SUN   /   2011-08-17 18:05:55
有是有,不过做的还不好,不好意思拿出去分享,这样吧,我先弄稳定了通知你,现在忙,大概过一段时间后,我们再一起研究,一起debug下~呵呵
原帖由sophie_wang于2011-08-17 17:10:28发表
谢谢分享。
录制回放的原理,大概能看懂,但是没有亲自实现,总觉得有点稀里糊涂,Mr SUN有没有简单的.
sophie_wang 引用 删除 sophie_wang   /   2011-08-17 17:10:28
谢谢分享。
录制回放的原理,大概能看懂,但是没有亲自实现,总觉得有点稀里糊涂,Mr SUN有没有简单的用java实现的录制回放功能呢?如果能debug看看的话,就更加感谢了。
xin_晴的个人空间 引用 删除 xin_晴   /   2011-06-03 10:22:36
您好,我是51Testing软件测试网的编辑,您的本篇博文被推荐至51Testing软件测试网首页发表:http://www.51testing.com/html/29/n-238129.html
感谢您关注并支持51Testing博客,期待您更多的优秀原创博文。
 

评分:0

我来说两句

Open Toolbar