文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发其他语言RFT与Spring结合进行自动化脚本开发之一
精品推荐
特别推荐
·给你十条学习Ruby语言的理由
·分页管理机制
·Perl 语言的重要价值体现
·经验技巧:分享两条Delphi开发经验
·Java编程思想:面向对象的逻辑思维方法
·Samba系统简介
热点TOP10
·在VC6中创建wxWidgets项目[附图]
·AIX 5L 学习大纲/简易教程(2)(未经许可,请勿COPY)
·DENX U-Boot及Linux使用手册
·Visual C++ ADO数据库编程入门
·飞机躲避小游戏---是男人就撑100秒的制作
·[仿真实验]操作系统的内存管理
·三维粒子系统在AS2中的实现
·Continuation 和高级流程控制
·[分形]DLA团簇模型的摸拟
·用汇编编写DOS下的内存驻留程序(3)
·简单架设Jabber 局域网即时通讯服务器
·Palm OS应用程序设计指南之十一
·Palm OS应用程序设计指南之五
·samba和openldap结合实战
·AIX 5L 学习大纲/简易教程(1)(未经许可,请勿COPY)
·Internet Explorer 编程简述(十一)完美的Inplace Drag & Drop——“超级拖放”
·利用 wordXP 实现自动排班
·14.4 Function members
·数值计算程序大放送-线性代数方程组
·跟我一起写 Makefile

RFT与Spring结合进行自动化脚本开发之一

日期:2007年9月23日 作者: 查看:[大字体 中字体 小字体]


  目前,大部分自动化脚本开发者利用RFT的测试对象地图管理测试脚本的测试对象,RFT的测试对象地图有两种类型:公有测试对象地图和私有测试对象地图。

  (1)目前,大部分脚本采用的都是私有测试对象地图,如果被测试的程序顶层对象发生变化,这样每个脚本关联的测试对象地图都要进行修改,之所以这样,有一个原因:在RFT中测试对象地图不能够继承(仅仅可以合并),如果两个测试对象地图之间可以进行继承,这样把公用的测试对象放在父测试对象地图中,其他的测试对象地图继承这个公用的测试对象地图(同时继承公有的测试对象),如果被测试程序顶层框架发生变化,仅仅只修改父测试对象地图就可以了,但是目前RFT中不能实现(据我了解)。

  (2)RFT中还有一种类型的测试对象地图是公有的测试对象地图,公有的测试对象地图可以实现公用的测试对象重复使用,如果测试对象是一模一样的,RFT在公有的测试对象地图中只保留此测试对象的一个实例,但是把多个测试对象都插入到一个测试对象地图中,同样又面临着难以管理的困难。

  (3)另外,RFT中的测试对象地图与脚本紧紧的耦合,如果程序即使发生很小的变动,也要更新测试对象地图,修改脚本等等。

  (4)Spring具有强大的功能:Ioc,可以实现在XML中把一个测试对象注入到另一个测试对象中,再加上可以利用RFT的find方法可以把spring的配置文件配置成一张RFT测试对象地图。另外,一个spring配置文件可以被另一个spring文件import进来。这样可以把公有的测试对象放在一个spring配置文件中,然后有其他的spring配置文件进行导入,可以实现测试对象地图(spring的配置文件)的继承。另外,在spring的配置文件中,可以注入一个对象的属性,这样可以人工的更改这个测试对象的父框架,另外可以可以注入测试对象的识别属性,这样可以进行人为的进行测试对象识别属性的更改(这样可以更好的应对被测试程序的变化)。
例如:

  xml 代码
  
<!--从classpath(类路径)中导入base-test-object-map.xml文件 可以使用base-test-object-map.xml文件中定义的bean-->
<!--导入时候要包含完整的包名-->
<import resource="classpath:pkg/base-test-object-map.xml"/>

<!--设置待查找对象的识别属性 格式:propertyName-propertyValue-->
<property name="objectProperties">
<list>
<!--属性名称和属性精确匹配用=-->
<!--属性名称和属性用正则表达式匹配用:-->
<value>.class=Html.FORMvalue> 然后是怎么使用spring配置文件中的测试对象
<value>.name:.*Formvalue>
list>
property>

<!--设置从什么对象开始查找 注入父测试对象-->
<!--browserTestObject 引用的是base-test-object-map.xml文件中已经定义的bean-->
<property name="parentTestObject">
<ref bean="browserTestObject"/>
property>

  在脚本中引用测试对象通过如下语句:

  Java 代码

TextGuiTestObject text_userName = new TextGuiTestObject((TestObject)context.getBean("userNameText"));
text_userName.setText("system");

  (5)采用spring管理测试对象,也不是说一劳永逸的,如果被测试程序发生变化,避免不了的也要修改spring配置文件。但是,至少比RFT管理测试对象地图的修改量要小的多。

  (6)采用spring管理测试对象也有以下缺点:

  (1)需要测试脚本开发者有比较高的编程技能(熟悉springIoc基本配置和对RFT API比较熟悉)

  (2)被测试程序结构规范,最好每个HTML元素都有其名字,还有每次修改程序,如果HTML元素名称能不修改最后就不修改(RFT可以通过组件名称查找对象)还有就是按钮上面的文本,采用RFT管理测试对象地图也有此要求。

  (3)要求对被测程序的组件结构有充分了解(可以通过RFT测试地图了解)

  (4)开发采用spring管理测试对象地图的脚本比开发有RFT管理的测试对象地图时间要长的多,但是带来的好处也是明显的。

  (5)测试对象执行动作的速度也没有RFT管理的测试对象地图快。

  base-test-object-map.xml 代码

  xml 代码

<!--sp-->xml version="1.0" encoding="gb2312"?>
<!--CTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" </sp-->
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

<!--注册com.rational.test.ft.script.Property属性编辑器-->
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="com.rational.test.ft.script.Property">
<bean class="pkg.TestObjectPropertyEditor"/>
entry>
map>
property>
bean>

<!--实例化pkg.BaseTestObjectScript类-->
<bean id="baseTestObjectScript" class="pkg.BaseTestObjectScript"/>

<!--调用baseTestObjectScript中的非静态方法getBrowserTestObject产生一个BrowserTestObject测试对象-->
<bean id="browserTestObject"
factory-bean="baseTestObjectScript"
factory-method="getBrowserTestObject"
singleton="false"/>
<!--调用baseTestObjectScript中的非静态方法getDocumentTestObject产生一个DocumentTestObject测试对象-->
<bean id="documentTestObject"
factory-bean="baseTestObjectScript"
factory-method="getDocumentTestObject"
singleton="false"/>

beans>

  base-test-object-map.xml 可以作为公有的测试对象地图,其中customEditorConfigurer向容器注册了一个属性编辑,pkg.BaseTestObjectScript是一个RFT脚本,此脚本有getBrowserTestObject()和documentTestObject(),可以在这个类中放入基本的测试对象,通过Spring将这些对象封装为bean, 然后有其他的spring配置文件来import,这样就实现了对象的继承。pkg.BaseTestObjectScript的代码如下:

  java 代码

package pkg;

import resources.pkg.BaseTestObjectScriptHelper;

import com.rational.test.ft.*;
import com.rational.test.ft.object.interfaces.*;
import com.rational.test.ft.object.interfaces.siebel.*;
import com.rational.test.ft.script.*;
import com.rational.test.ft.value.*;
import com.rational.test.ft.vp.*;

public class BaseTestObjectScript extends BaseTestObjectScriptHelper
{
public void testMain(Object[] args)
{
}

public BrowserTestObject getBrowserTestObject()
{
return browser_htmlBrowser(document_H(),DEFAULT_FLAGS);
}

public GuiTestObject getDocumentTestObject()
{
return document_H();
}
}

  pkg.TestObjectPropertyEditor代码如下,其中如果用精确匹配就用=作为分隔符,如果是通过正则表达式匹配就通过:作为分隔符,然后在程序内部就会做正则表达式的转换。

  java 代码

package pkg;

import com.rational.test.ft.script.Property;
import java.beans.PropertyEditorSupport;
import java.util.StringTokenizer;
import com.rational.test.ft.value.RegularEXPression;

public class TestObjectPropertyEditor extends PropertyEditorSupport
{
public void setAsText(String text)
{
String delimiter = null;
Object propValue = null;

if(text == null text.length() < 1 (text.indexOf(EQUAL_MARK) == -1 && text.indexOf(COLON) == -1))
{
throw new IllegalArgumentException("识别属性为空或格式不正确 =表示进行精确匹配 :表示使用正则表达式匹配");
}

if(text.indexOf(EQUAL_MARK) != -1)
{
delimiter = EQUAL_MARK;
}
else if(text.indexOf(COLON) != -1)
{
delimiter = COLON;
}

//解析字符串
StringTokenizer st = new StringTokenizer(text, delimiter);
String name = st.nextToken();
String value = st.nextToken();

propValue = value;

if(text.indexOf(COLON) != -1) //如果分隔符为 : 将propValue设置为正则表达式
{
propValue = new RegularExpression(value, false);
}
setValue(new Property(name, propValue));
}

public String getAsText()
{
Property property = (Property)getValue();
return property.getPropertyName() + "-" + property.getPropertyValue();
}

public final String EQUAL_MARK = "="; //"=" 表示进行精确匹配
public final String COLON = ":"; //":" 表示使用正则表达式匹配
}

  然后介绍一下其他的Spring配置文件通过导入另一个Spring配置文件实现,测试对象的继承。如下,通过import另一个配置文件,这个spring配置文件中的对象就可以使用被导入的spring配置文件中的测试对象,从而可以实现测试对象的继承。

  pkg/logon-map.xml

  xml 代码

<!--sp-->xml version="1.0" encoding="gb2312"?>
<!--CTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" </sp-->
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

<!--从classpath(类路径)中导入base-test-object-map.xml文件 可以使用base-test-object-map.xml文件中定义的bean-->
<!--导入时候要包含完整的包名-->
<import resource="classpath:pkg/base-test-object-map.xml"/>

<!--实例化pkg.TestObjectHelper类-->
<bean id="loginFormHelper"
class="pkg.TestObjectHelper"
singleton="false">

<!--设置待查找对象的识别属性 格式:propertyName-propertyValue-->
<property name="objectProperties">
<list>
<!--属性名称和属性精确匹配用=-->
<!--属性名称和属性用正则表达式匹配用:-->
<value>.class=Html.FORMvalue>
<value>.name:.*Formvalue>
list>
property>

<!--设置从什么对象开始查找 注入父测试对象-->
<!--browserTestObject 引用的是base-test-object-map.xml文件中已经定义的bean-->
<property name="parentTestObject">
<ref bean="browserTestObject"/>
property>
bean>

<!--调用loginFormHelper中的getSonTestObject 此方法返回TestObject测试对象-->
<bean id="loginForm"
factory-bean="loginFormHelper"
factory-method="getSonTestObject"
singleton="false">
bean>

<!--动态查找text_userName测试对象-->
<bean id="userNameTextHelper"
class="pkg.TestObjectHelper"
singleton="false">
<property name="objectProperties">
<list>
<value>.class=Html.INPUT.textvalue>
<value>.name=userNamevalue>
list>
property>

<property name="parentTestObject">
<ref bean="loginForm"/>
property>
bean>

<!--动态查找text_passWord测试对象-->
<bean id="userNameText"
factory-bean="userNameTextHelper"
factory-method="getSonTestObject"
singleton="false">
bean>

<bean id="passwordTextHelper"
class="pkg.TestObjectHelper"
singleton="false">
<property name="objectProperties">
<list>
<value>.class=Html.INPUT.passwordvalue>
<value>.name=passWordvalue>
list>
property>

<property name="parentTestObject">
<ref bean="loginForm"/>
property>
bean>

<bean id="passwordText"
factory-bean="passwordTextHelper"
factory-method="getSonTestObject"
singleton="false">
bean>

<!--动态查找ubmit_button测试对象-->
<bean id="submitButtonHelper"
class="pkg.TestObjectHelper"
singleton="false">
<property name="objectProperties">
<list>
<value>.class=Html.INPUT.submitvalue>
<value>.value=进入value>
list>
property>

<property name="parentTestObject">
<ref bean="loginForm"/>
property>
bean>

<bean id="submitButton"
factory-bean="submitButtonHelper"
factory-method="getSonTestObject"
singleton="false">
bean>

<!--点击菜单-->
<bean id="menuHelper"
class="pkg.MenuHelper"
singleton="false">

<!--待点击菜单名称 必须按照先后顺序-->
<property name="menus">
<list>
<value>菜单名称1value>
<value>菜单名称2value>
<value>菜单名称3value>
<value>菜单名称4value>
list>
property>

<!--注入父测试对象 定义从什么对象开始查找菜单并点击-->
<property name="parentTestObject">
<ref bean="documentTestObject"/>
property>
bean>

beans>

  下面是上面的配置文件中用到的pkg.TestObjectHelper类,这个类暴露出parentTestObject 和 objectProperties两个属性用spring来注入,从而确定从什么对象开始查找对象和以什么条件查找对象。通过getSonTestObject() 方法返回找到的测试对象(只允许返回一个对象,如果找到多个就会抛出异常),其中还有个getSonTestObjects()方法是为了返回多个测试对象而准备的。代码如下:

package pkg;

import com.rational.test.ft.AmbiguousRecognitionException;
import com.rational.test.ft.ObjectNotFoundException;
import com.rational.test.ft.object.interfaces.TestObject;
import com.rational.test.ft.script.Property;
import com.rational.test.ft.script.SubitemFactory;

public class TestObjectHelper
{
public Property[] getObjectProperties()
{
return objectProperties;
}

public void setObjectProperties(Property[] objectProperties)
{
this.objectProperties = objectProperties;
}

public TestObject getParentTestObject()
{
return parentTestObject;
}

public void setParentTestObject(TestObject parentTestObject)
{
this.parentTestObject = parentTestObject;
}

public TestObject getSonTestObject()
{
return findSonTestObject();
}

public void setSonTestObject(TestObject sonTestObject)
{
this.sonTestObject = sonTestObject;
}

 

(出处:清风下载学院






上一篇:最新QQ宠物——猪猪进阶喂养指南

下一篇:彻底明白 Java 语言中的IO系统

RFT与Spring结合进行自动化脚本开发之一 相关文章:
·电脑基本英语单词
·如何用C#编写文本编辑器
·杀毒技巧系列:杀毒、防恶意代码、脚本病毒的不完全合集
·SQL Server 2005免费版本下载排行居首
·一个人如何建立接近零成本的网站
·笔记本电脑解密方法大全
·笔记本电脑启动故障两则
·一些很实用且必用的小脚本代码
·在Excel中将文本转换为数字的七种方法
·笔记本电脑技术名词
RFT与Spring结合进行自动化脚本开发之一 相关软件:
·一生要读知的100本中国名书高清晰PDF
·余世维-有效沟通(MP3版本)
·风姿物语(全本)
·《李凉武侠全集》典藏本
·亵渎(全本)
·笔记本维修教程
·新版标准日本语初级 单词读音MP3
·合同范本全库 V1.0
·25本投资经典
·《女友》杂志十年精华合订本

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn