使用 Rational Functional Tester 测试应用软件的操作响应速度

使用 Rational Functional Tester 测试应用软件的操作响应速度

使用 Rational Functional Tester 测试应用软件的操作响应速度
 
使用 Rational Functional Tester 测试应用软件的操作响应速度
 

<script type=”text/javascript”></script>

使用 Rational Functional Tester 测试应用软件的操作响应速度
使用 Rational Functional Tester 测试应用软件的操作响应速度
图 1 操作响应速度测试程序流程图
使用 Rational Functional Tester 测试应用软件的操作响应速度
使用 Rational Functional Tester 测试应用软件的操作响应速度 回页首

案例一:文档保存——对象属性的改变标识操作结束的测试

测试方案

我们首先来看一下如何测试某个文档管理软件保存一份文档所需的确切时间:

操作的起始我们很容易鉴定,当 Save 这个 Menu 被点击时,我们的测试计时就可以开始了。而具体的反映到 RFT 的 script 代码上,我们首先可以通过 RFT 获得 menu 对应的 TestObject 对象,然后直接调用 click 方法即可:

然后开始计时:

而保存操作的结束标识呢用户的角度来看,当用户点下保存菜单时,鼠标的指针会变成沙漏状,而保存操作完成后,鼠标指针会变回箭头状。可在 RFT 中,想判断鼠标指针的形状非常困难而且鼠标的状态还可能来回的变化,因此我们必须寻求其他的途径。

通过与开发人员的讨论,我们了解到,用户在保存前,首先会对文档进行修改(没有改动过的文档,保存菜单是 disable 的),那么在软件界面下方的状态栏中,有一个用于标识 Modify 状态的 Lable 对象,如果文档的内容发生了改变,则该 Lable 对象的内容 (Text) 会变成“*”,而当保存完成后,软件内部的流程会将该 Lable 对象的内容相应的更新成为“”,表示该文档相对于保存到硬盘上的文档而言,没有发生改变(保存刚刚完成,打开的文档内容当然和保存到硬盘上的是一致的)。因此,我们可以通过 RFT 获取该 Lable 对象及其 Text 属性,并对属性进行判断,当该对象的 Text 属性由“*”变成“”时,即表示保存操作已经完成了。

具体的操作也很简单,我们只要用 RFT 的 Object Map,在软件的界面上抓取到这个 Modification Lable 对象,

图 2 Modification Lable 对象抓取图

图 3 对象添加到 Script

还可以在 Script Explorer 中选择 Insert at Cursor 直接生成返回 MLable 对象的代码,

图 4 Insert at Cursor

图 5 状态栏 StatusBar 的 TestObject

而且由于我们并不是直接判断 StatusBar 的属性,所以我们通过 ObjectMap 这种方便的方法而即使慢一点也不会有什么影响。

我们可以调用 toStatusBar.getChildren() 函数得到状态栏中所有的 Lable 引用,并调用相应的 getProperties() 方法将这些 Lable 的属性全部打印出来,这样我们就能清楚的知道如何能够通过程序代码来找到我们需要轮询判断的 Modification Lable 对象。

在打印出的一长串属性列表中,我们可以找到 Modification Label 对象的属性,和其他的 Lable 对象相比,我们可以通过 toolTipText 这个属性把它和其他 Lable 区分开来。

这样,Lables[Midx] 就是我们要进行轮询判断的 Modification Lable 对应的 TestObject 了。

我们先来看一下通过 Lables[Midx] 查询其 Text 属性所花的时间:

结果是多少呢

62 毫秒,这对于我们测量操作结束时机的判断,已经影响不大了。因此我们可以将之前 PVT 循环判断流程中的

替换为

即可测试得出软件保存文档操作所需的时间。而最终测试出的结果,平均是 1643 毫秒,这与我们人工测试的结果 1.70 秒相比,是非常接近的,也是可相当可信的。

使用 Rational Functional Tester 测试应用软件的操作响应速度
使用 Rational Functional Tester 测试应用软件的操作响应速度 回页首

案例二:文档打开——对象的产生标识操作结束的测试

通过上面的描述,我们可以了解到,在使用 RFT 对应用软件的操作响应速度进行测试时,操作结束的标识是某个对象的状态属性发生变化的情况下,该如何合理的编写 Script 的代码。可是在某些情况下,操作完成的标识是某个对象被创建出来呢/p>

让我们来看一个测试某文档管理软件打开一个文档所需时间的例子。

测试方案

文档的打开,可以分为在用户界面上能够看到文档和文档完全导入两种,即所谓的 Load Show 和 Load Finish。而这两种操作的结束时间,都是我们需要测试的。

我们首先来看一下 Load Show 的情况:

对于打开文档的操作,开始的标识也一样很容易确定,当打开文档的对话框出现,文件被选中,最终打开的按钮被点下时,计时就需要开始了。

而同样通过与开发人员的交流,我们知道,文档被打开后,软件是通过一个 SuperODCControl 对象来显示文档的,因此当这个 SuperODCControl 对象被创建并且显示出来的时候,就可以标识 Load Show 已经完成了。

我们可以通过 ObjectMap 获得 SuperODCControl 这个对象并调用其 exists() 和 isShowing() 方法来判断 LoadShow 操作是否完成。可是正如同我们前面提到的,通过 ObjectMap 获得的对象只是在 Map 中由 ObjectManager 管理的对象,如果调用其方法或者获取其属性,ObjectManager 都需要去被测软件中重新进行识别,找到对应的对象后再执行相应的操作。虽然对于 SuperODCControl 来说,其容器继承包含结构相对简单,ObjectManager 查找起来相对容易些,但是为了能够更准确的测试出软件的响应速度,我们还是希望能够找到直接指向 SuperODCControll 的 TestObject。

与之前类似,我们首先要找到 SuperODCControl 的父类容器对象,然后才能通过 find 之类的方法找到直接指向 SuperODCControl 的 TestObject。继而通过调用其 isShowing() 方法来判断 LoadShow 操作是否完成。

可是不同的是,在 SuperODCControl 对象存在之前,我们需要在循环中不断调用它父类的 find 方法来对 SuperODCControl 进行查找,因此,我们获得的 SuperODCControl 父类的 TestObject 也应该是直接指向被测对象的引用,而不是指向 ObjectMap 中的对象。

因此,我们需要首先通过 ObjectMap 获得 SuperODCControl 父类对象的父类对象,调用其 find 方法,得到直接指向 SuperODCControl 父类对象的引用。

图 6 SuperODCControl 对象

使用 Rational Functional Tester 测试应用软件的操作响应速度

让我们试着运行一下 :

错误分析及解决方案

原来,无论是 SuperODCControl 的父类 ParentCompsite,还是其父类的父类 Grandcomposite,在文档打开之前,都是不存在的。只有打开文档的操作开始后,软件才会一步步创建 compsite 类的实例,最终再创建 SuperODCControl 对象。

那我们要在 objDialog.Open.click() 之前获取 compsite 的 TestObject,自然是得不到的。那 Grandcomposite 的父类呢是否 click 之前就已经存在了,我们可以获取它的引用吗果不是的话,它的上一层父类是吗/p>

我们可以在 ObjectMap 中可以看到,软件中有着一系列的容器包容结构,怎样才能找到哪一个 Composite 是文档没有打开时就已经存在的通用容器窗口呢层层的去尝试的话显然是不太可行的,我们这里介绍一个小小的技巧:

利用 RFT 抓取 TestObject 的不同方法,我们可以巧妙的知道到底哪一个 Composite 是真正的当文档没有打开时,就存在的窗口父类。

首先,我们只运行文档管理软件,但是不打开任何文档,这时使用 RFT 的手型对象抓取工具,选择文档管理软件的当前空白窗口:

图 7 抓取的当前空白窗口

图 8 TestObject Brower

这时,我们可以看到,我们选择的窗口对象的在整个软件中的树形结构。

图 9 窗口对象浏览

图 10 抓取的文档窗口

选择之后,我们同样的再次选择下拉列表中的 TestObject Brower 方式:

图 11 文档窗口对象浏览

使用 Rational Functional Tester 测试应用软件的操作响应速度
使用 Rational Functional Tester 测试应用软件的操作响应速度
使用 Rational Functional Tester 测试应用软件的操作响应速度

 

使用 Rational Functional Tester 测试应用软件的操作响应速度

 

使用 Rational Functional Tester 测试应用软件的操作响应速度

 

使用 Rational Functional Tester 测试应用软件的操作响应速度

刘哲,是 IBM 中国软件开发中心的一名 IBM Lotus 软件工程师。喜欢 Java,自动化测试和 Web 开发。

来源:H382803082

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2009年3月20日
下一篇 2009年3月21日

相关推荐