一步一步走下去……

搜集看到的一些RFT的问题和回复

上一篇 / 下一篇  2009-05-15 13:09:58 / 天气: 晴朗 / 心情: 平静 / 个人分类:RFT

搜集一下看到的一些问题和回复,万一以后自己用到。

不保证答案的正确性

Q:我在functional test 7.0中经常会遇到一种情况,就是这个脚本刚刚还可以运行,但过会就会报错“Script. Playback Failure:装入脚本类失败,脚本无法运行,不知道怎么分析这个问题,请大家指点迷津,谢谢!

A:可能是RFT7的一个bug
我找IBM的人咨询过,他们没有确认到原因

暂时的解决办法(同时做下面两步)
1
、在project->Clean里清空所有的类
2
、去掉project->Build Automatically
我在这里试是可以的。

Q:请教:一个RFT脚本中能否引用多个数据池?

我在脚本里使用了两个数据池,其中一个是想共用其他脚本的数据池,具体如下:
除了脚本中的专用数据池外,另外还通过IDatapool dp = dpss.dpFactory().load(dpFile, true)引用了另外一个外部的csv数据池。但是脚本回放时,一执行到有调用外部csv数据池中的变量时就报错:

失败Script1.testMain有未经处理的异常。
exception_name = org.eclipse.hyades.execution.runtime.datapool.DatapoolException
exception_message =
数据池中找不到变量名
[type]

一个script中如何才能引用多个数据池?请指教。

A1:DatapoolScriptSupport dpss = new DatapoolScriptSupport();
org.eclipse.hyades.execution.runtime.datapool.IDatapool dp;
java.io.File dpfile = new java.io.File("D:\\RFT\\com\\datapool\\login.rftdp";);
dp = dpss.dpFactory().load(dpfile, true);
IDatapoolIterator dpitr = dpss.dpFactory().open(dp, "");
dpitr.dpInitialize(dp);
System.out.println(dp.dpString("UserName"));
System.out.println(dp.dpInt("UserNo"));

A2:RFT的角度来看,RFT定义的数据池只能有一个,但是从广义的DATADriven的角度来看,可以直接编写java类的方式来调用多个数据源。

我做的一个自动化测试,调用了RFT的数据池,CSV文件,XML文件,甚至使用readlinelog文件中提取数据用于自动化测试。

A3:RFT可以通过API接口实现多个数据池,不过写起来麻烦。
还是自己写个读写文件的接口来的方便。也是java语言的优势所在。
不过还是希望RFT能在后续版本能够改进吧,毕竟通过可视化界面的操作更加利于推广使用。

Q:请教TestObject,ProcessTestObject,RootTestObject的区别

rft帮助文档是这么定义的
public class TestObject extends java.lang.Object
Provides access to objects in the software under test. A
TestObjectcontains a reference to an object in the software under test, either referencing the object directly, or by using a reference to aMappedTestObject. The recognition algorithm is the work of theObjectManager.

public class ProcessTestObject extends
TestObject
Provides, in a host-independent manner, access to process information that is specific to the operating system.

public class RootTestObject extends
TestObject
The
RootTestObjectrepresents a global view of the system being tested. It does not represent an actualTestObjectin the software under test, but rather it provides access to system-wide functionality, such as finding an arbitraryTestObjectbased on properties, location, or getting theDomainTestObject.

请教大家,这三个有什么区别,特别是RootTestObjectProcessTestObject的区别,他们的作用是什么~!

A:
查看了一些资料,rft中所有的×××TestObject都继承TestObject
RootTestObject
在测试过程中相当于全局的TestObject,可以用RootTestObject中的一些方法来查找我们需要的TestObject
ProcessTestObject
当使用startApp()方法时就会返回一个ProcessTestObject

例子:
ProcessTestObject ftProcess= startApp("Notepad");
RootTestObject root= RootTestObject.getRootTestObject();
Integer pid = new Integer((int)ftProcess.getProcessId());         
TestObject[] ftWinO   = root.find(atChild(".processId", pid));

Q:RFT不能记录drop-down list的动作

A:

如果你的dropdown list不是标准的java控件的话,可以把开发包add到你的测试项目中properties里面的build path中;

如果这样还不能解决问题的话,有一个旁门左道的解决方式:就是让开发写这个控件的时候加入对键盘操作的支持,如果能加入快捷键那就perfect了,可以彻底解决这个问题。

Q:java,应用程序的界面上的对象,有些有可能是java匿名内部类定义的,所以在运行时,.class属性会随机的变化,所以RFT在识别这些对象时,就会相应的存在问题.

我现在的解决办法是,根据.class属性值变化的规律(末位是随机数字),for循环,有些在父类下find atchild的对象,有些直接在RootTestObject下找
.
  
虽然这样可行,但感觉还是不够高效.因为这需要一个对象一个对象的写,即没有在写脚本时利用一个可以调用的函数以节省写的时间(这个可能性应该有,不知道是否有人写出了),也不能在运行时减少利用find,提高运行的效率.所以来这里在寻找一下这方面的高手,交流一下意见.

A:

maped object的那些属性都是可以改成正则表达式的啊


TAG:

梁记凉茶铺 引用 删除 jlsv   /   2009-06-05 16:58:59
很好的总结,RFT的资料就是少
 

评分:0

我来说两句

日历

« 2024-04-12  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 5374
  • 日志数: 9
  • 建立时间: 2009-05-14
  • 更新时间: 2009-07-28

RSS订阅

Open Toolbar