首页 测试 工具 查看内容

用Robot写Java代理(一)

2014-8-5 23:26| 发布者: tianzc| 查看: 394| 评论: 0

摘要: Rational Robot是通过录制用户操作进行功能,性能和兼容性测试的自动化测试工具。通过回放录制脚本进行功能和可靠性测试。本文主要介绍Rational Robot针对java程序和applets如何进行功能测试。Rational Robot当前版 ...

Rational Robot是通过录制用户操作进行功能,性能和兼容性测试自动化测试工具。通过回放录制脚本进行功能和可靠性测试。本文主要介绍Rational Robot针对java程序和applets如何进行功能测试


Rational Robot当前版本支持用以下类库开发的Java程序和applet程序:

l Java Foundation Classes(JFCs)

l Sun的Swing 和 Abstract Windowing Toolkit(AWT)

l Symantec的Visual Café

l Sitraka Software的JClass库


还有一些Java类超出了Rational Robot支持的范围,但是需要注意的是这些超出Robot支持的Java类中的一些类继承自Rational Robot支持的类。测试人员可以通过编写Java代理来扩展Rational Robot识别对象的能力。使用Java扩展API,需要注意的是,这些代理只能够测试在SUN的JVM上运行的类,并可以运行在Netscape和IE上的程序和Applet。

本文将讨论,Rational Robot怎样使用Java代理并且当需要第三方Java代理的时候怎么做。示范如何开发Java代理,怎样用Java扩展Api支持Rational软件。


Rational Robot怎样用Java代理

执行功能,性能或者可靠性测试的时候,Rational Robot通过AUT监控用户交互进而生成Rational的SQABasic脚本,不必管开发程序的语言是什么,当录制的脚本回放,他通过AUT再现用户的操作行为。测试Java程序和Applets的时候,SQABasic有一套定义好的图形界面(GUI)对象.

表格一:展示了一组SQABasic 测试Java程序和Applect的GUI对象

JavaMenu
 JavaMenuItem
 CheckBox
 RadioButton
 
ComboBox
 ComboListBox
 Label
 ListBox
 
ScrollBar
 EditBox
 TrackBar
 TabControl
 
ProgressBar
 JavaPanel
 JavaWindow
 JavaTree
 
JavaSplitPanel
 JavaSplitter
 JavaMenuBar
 JavaObject
 
JavaCheckBoxMenuItem
 PushButton
 Toolbar
 JavaListView
 
JavaMenuSeparator
 JavaTable
 JavaCanvas
 
 
JavaPopupMenu
 JavaTableHeader
 
 
 

这些SQABasic GUI对象表现为他们的属性和功能表现。这些功能定义允许Robot模拟用户操作和对象进行交互。Robot知道怎样处理SQABasic GUI对象。测试Java和applets,Java对象必须映射为SQABasic GUI对象。比如JFC 中的Jbutton组件需要映射为SQABasic 对象的PushButton。


通过反射或者说反映,Rational Robot可以动态地决定加载到JVM中Java GUI组建的类、功能和属性。它使用包含在JavaClassMap.dat中的信息确定什么样的SQABasic对象可以映射到相关类,也可以确定使用什么样的代理与Java组建相互交互。

Rational提供的JavaClass模板被放在项目目录下TestDatastoeDefaultTestScriptDataStoreTMS_scriptsdat JavaClassMap.dat信息格式如下:

[SQABasic Object]

Java GUI component=proxy

图一描述的过程展现了Rational Robot是如何使用代理与Java应用程序交互的。对于Rational 所支持的Java代理类,包含在JavaClassMap.dat 里的信息在Robot内部有效。

图 1: Rational Robot's 测试环境


此过程是如下工作

1、 在录制的时候,Rational Robot侦查用户和AUT之间的交互;通过反省,他知道用户与什么样的控间的类交互。

2、 Rational Robot使用JavaClassMap.dat文件或者使用Robot内部可接受的相似信息,去决定这个类映射到的SQABasic GUI对象和与Java组件相互影响的代理。

3、 然后Rational Robot使用代理学习到关于Java组件的必要信息,生成适当的SQABasic代码。

4、 为了回放已录制的代码,SQABasic代码被转化为Robot可调用的适当的函数或者代理类的函数列表。这些列表一次触发被测组件中的适当的函数。

举个例子,模拟一个用户点击一个Java GUI组件(比如:Jbutton),Rational Robot生成如下SQABasic命令:

PushButton Click, recMethod

这里的recMethod是AUT一个唯一可识别的按钮名称。同样的命令别用于所有的按钮,不管它使用什么语言开发的。


什么时候需要第三方得Java代理

如果被开发的应用程序使用任何明确的可支持标准Java GUI组件的类库,那么Rational支持的代理对于与Robot交互的应用程序就足够了。本文中所说的标准Java GUI组件是指类中可被引用的组件。Jbutton, Jtree和Jplanel都是JFCs中标准的Java GUI组件。

如果客户化的类或者它的父类可以被映射到同一个SQABasic对象,那么使用这样的客户化标准Java GUI组件开发的应用程序也是不需要第三方Java代理的。举个例子,如果一个应用程序使用了BeechButton类,这个类继承了Jbutton(一个标准的Java GUI组件),那么Rational可支持的代理已经足够Robot与组建进行交互。因为BeechButton和Jbutton都可以映射到SQABasic对象,PushButton。

假如一个标准的被支持的类库被用户定制后,它的父类和它映射到不同的SQABasic GUI对象,那么我们将根据客户化类的使用情况确定第三方代理需不需要被使用。

举一个例子,我们假设Jpanel(JFC的组件)映射到SQABasic对象JavaPanel,它被客户制定为一个组件,名为TreeComp,这个组件被映射到SQABasic对象JavaTree。

l 默认不需要第三方代理,Rational Robot将于TreeComp相互关联,把它看成一个JavaPanelObject。在这种情况下,JavaTree的相关函数不能被使用。

l 假如TreeComp被映射到JavaClassMap.dat中的JavaTree,那么Rational Robot将使用Jtree代理与TreeComp进行交互,TreeComp被认为是JavaTree。假如TreeComp使用的所有功能属于Jtree,那么第三方代理将不需要被使用。

l 如果TreeComp执行的功能接近于Jtree,但使用不同的名字,那么Robot仍然会可以使用TreeComp与其进行交互,但是这样的交互式实际上是没有用的。这意味着尽管与TreeComp的交互可以被回放,但是点击树中某选项的动作只是某个坐标位上的点击,对这个对象的数据验证点也将不起作用。

假如这种程度上的交互(点击树中某选项)足够测试程序,那么第三方代理是不被需要的。然而我们需要记住的是,如果我们需要进行数据的验证、使用选择项的函数功能,那么第三方代理将需要被使用。

在测试应用程序和被不明显支持的类库开发的applets时,第三方代理总是被需要的。


举例:什么时候Java代理被Java GUI组建测试需要

为了演示如何决定在测试一个特殊的Java GUI组件时,是否需要使用Java代理。我将使用JBCL类库中的3个Java GUI组件,JBCL类库是Borland公司Jbuilder4提供的库类之一。这些Java GUI组件是:

1. com.borland.jbcl.control.TextFieldControl

2. com.borland.jbcl.control.ButtonControl

3. com.Borland.jbcl.control.TreeControl


我们将逐一讨论

com.borland.jbcl.control.TextFieldControl

它与com.Borland.jbcl.control.TextFieldControl的层级关系是:

java.lang.Object

+-java.awt.Component

+-java.awt.TextComponent

+-java.awt.TextField

+- com.Borland.jbcl.view.TextFieldView

+-com.borland.jbcl.control.TextFieldControl

l java.awt.TextField是com.Borland.jbcl.control.TextFieldControl的根源。

l java.awt.TextField来自于AWT,这是一个可以被Rational Robot明确支持的类库。

l java.awt.TextField和com.Borland.jbcl.control.TextFieldControl可以映射到SQABasic的EditBox对象。因此,Robot完全可以使用自带的AwtTextFieldProxy代理与这个组件交互。


com.borland.jbcl.control.ButtonControl

它与com.Borland.jbcl.control.ButtonControl的层级关系是:

java.lang.Object

+-java.awt.Component

+-java.awt.Container

+-javax.swing.JComponent

+- com.Borland.jbcl.view.BeanPanel

+- com.Borland.jbcl.view.ButtonView

+-com.Borland.jbcl.control.ButtonControl

此处,它的根源之一是javax.swing.Jcomponent,这是一个JFC可支持的类库。Jcomponent 映射到SQABasic的JavaObject,JavaObject仅仅拥有是没有开发过的普通的Java组件的函数功能。

com.borland.jbcl.control.ButtonControl映射到SQABasic的PushButton。默认的,Rational Robot将识别com.Borland.jbcl.conrol.ButtonControl为JavaObject。

对于一个com.Borland.jbcl.control.ButtonControl上的点击动作,Rational Robot将生成SQABasic代码

JavaObject Click, RecMethod, Coord

当RecMethod作为唯一识别的ButtonControl和Coord字段,根据坐标点击的动作将会发生。对象的属性将被取回,并且录制的代码将被成功回放。但是如果ButtonControl的坐标被改变,那么点击ButtonControl的动作将会失败。

为了录制与坐标无关的脚本,ButtonControl可以被映射到SQABasic的PushButton。使用Robot自带的Jbutton代理: JfcButtonProxy。这种情况下,JfcButtonProxy可以完全与ButtonControl交互,因为JfcButtonProxy执行了IrtButton(pushbuttons的接口),同时只是使用了Jbutton 和ButtonControl的根源 Jcomponent的函数。


com.borland.jbcl.control.TreeControl

com.Borland.jbcl.control.TreeControl作为最后一个例子,它的层次结构展示如下:

Java.lang.Object

+-Java.awt.Component

+-Java.awt.Container

+-Javax.swing.JComponent

+-Javax.swing.JScrollPane

+-- com.Borland.jbcl.view.TreeView

+--com.Borland.jbcl.control.TreeControl

TreeControl最近的父类是可支持的类javax.swing.JScrollPane。JScrollPane映射到SQABasic的对象JavaObject,然而TreeControl映射到JavaTree。

在默认情况下,Rational Robot将把TreeControl看成JavaObject进行交互,JavaObject可以调用所有Java组件的常用函数。对于TreeControl,使用Rational Robot 的JTree (如:JfcTreeProxy)代理,它将不能正常工作。TreeControl不能完全执行JTree的函数,所以他需要第三方控件。


JBCLControls的单个实例

为了更好的阐明这个问题,我们将使用一个简单的例子JBCL Controls,它包括三个Java GUI组件,这三个组件在先前的章节中已经作过介绍。

在附录A中,我们可以看到相应的JBCL Controls代码

为了编译这个应用程序,你将需要:

JBuilder 4专业版提供的针对JBCL组件的The Borland类库jbcl.jar和dx.jar

Sun公司提供的SDK1.3版本

1. 复制dx.jar和jbcl.jar到目录 (e.g., d:jbcllib).

2. 复制JBCLControls.java到目录d:jbclcon.

3. 在用户的classpath environment下增加如下语句:

D:jbcllibjbcl.jar;D:jbcllibdx.jar;D:jbclcon

4. 改变目录d:jnclcon,并且执行如下语句编译:

javac JBCLControls.java

5. 通过Rational Robot运行应用程序,如下图2

 


图2: 通过Rational Robot运行应用程序JBCLControls.java


另外,你可以向运行applet一样地运行应用程序,使用附录B中的HTML代码。为了运行applet,你必须安装Sun公司的swing类库。

现在,再回到前面使用Rational Robot测试应用程序,然后根据上面讨论的方法检查Robot生成的SQABasic脚本。

(未完待续)

版权声明:51testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。


鲜花

握手

雷人

路过

鸡蛋

扫一扫关注最新动态

毒镜头:老镜头、摄影器材资料库、老镜头样片、摄影
爱评测 aipingce.com  
返回顶部