RationalRobot是通过录制用户操作进行功能,性能和兼容性测试的自动化测试工具。通过回放录制脚本进行功能和可靠性测试。本文主要介绍RationalRobot针对java程序和applets如何进行功能测试。
RationalRobot当前版本支持用以下类库开发的Java程序和applet程序:lJavaFoundationClasses(JFCs)lSun的Swing和AbstractWindowingToolkit(AWT)lSymantec的VisualCafélSitrakaSoftware的JClass库还有一些Java类超出了RationalRobot支持的范围,但是需要注意的是这些超出Robot支持的Java类中的一些类继承自RationalRobot支持的类。测试人员可以通过编写Java代理来扩展RationalRobot识别对象的能力。使用Java扩展API,需要注意的是,这些代理只能够测试在SUN的JVM上运行的类,并可以运行在Netscape和IE上的程序和Applet。本文将讨论,RationalRobot怎样使用Java代理并且当需要第三方Java代理的时候怎么做。示范如何开发Java代理,怎样用Java扩展Api支持Rational软件。RationalRobot怎样用Java代理执行功能,性能或者可靠性测试的时候,RationalRobot通过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 | | |
这些SQABasicGUI对象表现为他们的属性和功能表现。这些功能定义允许Robot模拟用户操作和对象进行交互。Robot知道怎样处理SQABasicGUI对象。测试Java和applets,Java对象必须映射为SQABasicGUI对象。比如JFC中的Jbutton组件需要映射为SQABasic对象的PushButton。通过反射或者说反映,RationalRobot可以动态地决定加载到JVM中JavaGUI组建的类、功能和属性。它使用包含在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这里的recMethod是AUT一个唯一可识别的按钮名称。同样的命令别用于所有的按钮,不管它使用什么语言开发的。什么时候需要第三方得Java代理如果被开发的应用程序使用任何明确的可支持标准JavaGUI组件的类库,那么Rational支持的代理对于与Robot交互的应用程序就足够了。本文中所说的标准JavaGUI组件是指类中可被引用的组件。Jbutton,Jtree和Jplanel都是JFCs中标准的JavaGUI组件。如果客户化的类或者它的父类可以被映射到同一个SQABasic对象,那么使用这样的客户化标准JavaGUI组件开发的应用程序也是不需要第三方Java代理的。举个例子,如果一个应用程序使用了BeechButton类,这个类继承了Jbutton(一个标准的JavaGUI组件),那么Rational可支持的代理已经足够Robot与组建进行交互。因为BeechButton和Jbutton都可以映射到SQABasic对象,PushButton。假如一个标准的被支持的类库被用户定制后,它的父类和它映射到不同的SQABasicGUI对象,那么我们将根据客户化类的使用情况确定第三方代理需不需要被使用。举一个例子,我们假设Jpanel(JFC的组件)映射到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类库中的3个JavaGUI组件,JBCL类库是Borland公司Jbuilder4提供的库类之一。这些JavaGUI组件是:1.com.borland.jbcl.control.TextFieldControl2.com.borland.jbcl.control.ButtonControl3.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.TextFieldControlljava.awt.TextField是com.Borland.jbcl.control.TextFieldControl的根源。ljava.awt.TextField来自于AWT,这是一个可以被RationalRobot明确支持的类库。ljava.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。默认的,RationalRobot将识别com.Borland.jbcl.conrol.ButtonControl为JavaObject。对于一个com.Borland.jbcl.control.ButtonControl上的点击动作,RationalRobot将生成SQABasic代码JavaObjectClick,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.TreeControlcom.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.TreeControlTreeControl最近的父类是可支持的类javax.swing.JScrollPane。JScrollPane映射到SQABasic的对象JavaObject,然而TreeControl映射到JavaTree。在默认情况下,RationalRobot将把TreeControl看成JavaObject进行交互,JavaObject可以调用所有Java组件的常用函数。对于TreeControl,使用RationalRobot的JTree(如:JfcTreeProxy)代理,它将不能正常工作。TreeControl不能完全执行JTree的函数,所以他需要第三方控件。JBCLControls的单个实例为了更好的阐明这个问题,我们将使用一个简单的例子JBCLControls,它包括三个JavaGUI组件,这三个组件在先前的章节中已经作过介绍。在附录A中,我们可以看到相应的JBCLControls代码为了编译这个应用程序,你将需要:JBuilder4专业版提供的针对JBCL组件的TheBorland类库jbcl.jar和dx.jarSun公司提供的SDK1.3版本1.复制dx.jar和jbcl.jar到目录(e.g.,d:\jbcllib).2.复制JBCLControls.java到目录d:\jbclcon.3.在用户的classpathenvironment下增加如下语句:D:\jbcllib\jbcl.jar;D:\jbcllib\dx.jar;D:\jbclcon4.改变目录d:\jnclcon,并且执行如下语句编译:javacJBCLControls.java5.通过RationalRobot运行应用程序,如下图2
图2:通过RationalRobot运行应用程序JBCLControls.java另外,你可以向运行applet一样地运行应用程序,使用附录B中的HTML代码。为了运行applet,你必须安装Sun公司的swing类库。现在,再回到前面使用RationalRobot测试应用程序,然后根据上面讨论的方法检查Robot生成的SQABasic脚本。
(未完待续)
版权声明:51testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。
来源:51testing