序言:接触过自动化测试工具的测试人员,例如,Rational fuction teste,QTP等,一定对“录制—回放”这种机制不陌生吧,但是又有多少人能够了解其内部大概的运行机制呢?更又有多少人能从代码级别及其框架去分析其运作原理呢?
我一直觉得,你不理解它,你就无法用好它,更别说去拓展它成一个框架或者平台了。
它,在录制时,是怎么获取对象的?可以不通过录制的方式获得对象吗?
它,在回放时,是采用调用什么方式进行回放的?可以通过API或者自己编写代码使其录制的脚本进行回放吗?
自己如何去编写一个简单的“录制—回放”工具呢?
那么,今天就大概根据自己的简单介绍一下这种机制,希望能够帮助大家一起真正走入一个自动化测试的“大门”。
一、工具如何实现录制和回放
首先大概介绍一下自动化测试工具实现录制和回放的两种方法,其重点是对象的识别。
1、静态映射:当录制时,通过ObjectMap,将需要识别的JAVA应用程序的组件对象映射进对象库,然后,回放时,RFT首先根据正在运行的JAVA程序到对象库去查找相应的对象,若匹配到对应属性阈值适合的对象,则调用其脚本中的方法对对象执行操作。
一般的工具在工具与AUT之间都有一个代理,这个代理就是包裹着实际要测试的界面的控件,而ObjectMap是脚本层面的东西,它们之间存在一个映射关系。RFT通过代理与AUT进行交互。
需要明白的是,由于swing组件的树形结构关系,因此,ObjectMap中的映射出来的对象也是采用这种形式,虽然RFT中可以通过自己设置识别阈值的方式,但是对界面更改的适应能力还是不高。
2、动态搜索:应用动态搜索就可以不需要采用录制的方式了,而且也不需要对象库的方式,它是直接通过调用工作库中的API来定制相应的组件属性进行查找即可;回放时,自动化测试工具会获取正在运行的JAVA程序的各个组件属性,然后进行属性匹配,若是能够匹配到相应符合的属性,则会进行脚本规定的方法操作;
所以,应用动态搜索的方式,虽然在识别效率上降低了,但是其识别能力大大提高,界面如何变化,只要属性值不变,就没有太大问题,这也是为什么需要开发在开发JAVA程序的时候,尽量在属性值里添加一个唯一的识别属性ID了,这样做的目的可以使自动化测试更好的开展,这也可以作为以后各位的一个DFT需求了。
二、录制和回放的原理
经过了第一环节的介绍,大家对自动化测试工作实现录制和回放的两种方式大概有所了解,但是深层次是怎么样的呢?
借用关于JAVA的事件生命周期的一幅图片来说明: