首页专业论文技术应用政策标准解决方案常用资料经验交流教育培训企业技术专家访谈电力期刊
您现在的位置:北极星电力网 > 技术频道 > 常用资料 > 用Robot写Java代理(一)

用Robot写Java代理(一)

北极星电力网技术频道    作者:咸洁敏   2008/8/5 18:30:06   

 关键词:  程序开发 BOT Java

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

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

lJavaFoundationClasses(JFCs)

lSunSwingAbstractWindowingToolkit(AWT)

lSymantecVisualCafé

lSitrakaSoftwareJClass

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

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

RationalRobot怎样用Java代理

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

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

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

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

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

Rational提供的JavaClass模板被放在项目目录下\TestDatastoe\DefaultTestScriptDataStore\TMS_scripts\datJavaClassMap.dat信息格式如下:

[SQABasicObject]

JavaGUIcomponent=proxy

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

1:RationalRobot''s测试环境

此过程是如下工作的

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

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

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

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

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

PushButtonClick,recMethod

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ljava.awt.TextFieldcom.Borland.jbcl.control.TextFieldControl的根源。

ljava.awt.TextField来自于AWT,这是一个可以被RationalRobot明确支持的类库。

ljava.awt.TextFieldcom.Borland.jbcl.control.TextFieldControl可以映射到SQABasicEditBox对象。因此,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映射到SQABasicJavaObjectJavaObject仅仅拥有是没有开发过的普通的Java组件的函数功能。

com.borland.jbcl.control.ButtonControl映射到SQABasicPushButton。默认的,RationalRobot将识别com.Borland.jbcl.conrol.ButtonControlJavaObject

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

JavaObjectClick,RecMethod,Coord

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

为了录制与坐标无关的脚本,ButtonControl可以被映射到SQABasicPushButton。使用Robot自带的Jbutton代理:JfcButtonProxy。这种情况下,JfcButtonProxy可以完全与ButtonControl交互,因为JfcButtonProxy执行了IrtButtonpushbuttons的接口),同时只是使用了JbuttonButtonControl的根源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.JScrollPaneJScrollPane映射到SQABasic的对象JavaObject,然而TreeControl映射到JavaTree

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

JBCLControls的单个实例

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

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

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

JBuilder4专业版提供的针对JBCL组件的TheBorland类库jbcl.jardx.jar

Sun公司提供的SDK1.3版本

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

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

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

D:\jbcllib\jbcl.jar;D:\jbcllib\dx.jar;D:\jbclcon

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

javacJBCLControls.java

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

2:通过RationalRobot运行应用程序JBCLControls.java

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

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

(未完待续)

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

来源:51testing
友情链接
北极星工程招聘网北极星电气招聘网北极星火电招聘网北极星风电招聘网北极星水电招聘网北极星环保招聘网北极星光伏招聘网北极星节能招聘网招标信息分类电子资料百年建筑网PLC编程培训

广告直拨:   媒体合作/投稿:陈女士 13693626116

关于北极星 | 广告服务 | 会员服务 | 媒体报道 | 营销方案 | 成功案例 | 招聘服务 | 加入我们 | 网站地图 | 联系我们 | 排行

京ICP证080169号京ICP备09003304号-2京公网安备11010502034458号电子公告服务专项备案

网络文化经营许可证 [2019] 5229-579号广播电视节目制作经营许可证 (京) 字第13229号出版物经营许可证新出发京批字第直200384号人力资源服务许可证1101052014340号

Copyright © 2022 Bjx.com.cn All Rights Reserved. 北京火山动力网络技术有限公司 版权所有