51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 6722|回复: 24
打印 上一主题 下一主题

关于GUI自动化测试工具RFT的手动验证问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-7-14 16:28:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我按照http://www.cnblogs.com/mingzi/archive/2009/01/13.html这篇文章写了一个手动验证点。
就是自己写个类,然后创建ValueManager,按照上面说的把ValueManager转换为JAR文件。结果验证的时候,得到的验证点失败,然后查看验证的比较器,里面的值预期值和实际值都是相同的。不知道为什么会显示验证失败。


后来我查看了他的.rfpvt.发现基线和实际值是相同的,但预期值和实际值有点区别
下面是基线和实际值的.rfpvt的内容
<?xml version="1.0" encoding="UTF-8"?><MyPoint L="MyPoint"><X>6</X><Y>7</Y></MyPoint>

下面是预期值的内容:
<?xml version="1.0" encoding="UTF-8"?><UnsupportedObject L="MyPoint"><Y>7</Y><X>6</X></UnsupportedObject>

既然基线和实际结果是一样的,为什么预期结果会有差别呢?
还有vpManual的实现过程是什么样的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2011-7-15 13:29:22 | 只看该作者
顶下帖,
顺便请教lz ,rft支持SUSE系统的QT的c 语言变成么?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2011-7-15 13:29:40 | 只看该作者
C/S框架的
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2011-7-15 16:08:55 | 只看该作者
RFT是针对JAVA的eclipse,貌似不支持C
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2011-7-18 14:01:21 | 只看该作者
首先,你是构造了一个值管理器:值管理器与值类进行交互,这样可以对值类对象进行序列化和比较处理并使值类对象持久存在
猜测:是不是你只进行了值管理器的注册和值的比较,但是没有在实际项目中体现perfomece,即没有对返回的值进行判断(0),具体看看你的日志回显情况
vpManual的实现过程:其实就是定义一个需要判断的object,在回放过程中,回根据这个实际对象的各个属性值去匹配其实际运行过程中的测试对象
拓展:其实你真要做匹配的话,建议别用这种方式,太麻烦而且灵活性不高,用getProperty与getTestData的方式,然后自己写一个比较函数和日志(可以写到RFT的日志中,也可以自己拓展一个日志)
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2011-7-20 09:26:34 | 只看该作者
非常感谢LS的回复,还是没有找到问题,可能就是你说的没有体现perfomece判断。但我不知道怎么实现它的判断。RFT把这些方法都编译过了,看不懂。不过我已经放弃这种方法了,确实如LS说的,这种方法麻烦而且不灵活,呵呵。

我刚刚开始学习RFT,很多地方都不懂。比如可不可以实现树的展开这个功能。我想调用JTreePoxy这个类我想用这样的代码去调用:JTreeProxy myTree = new JTreeProxy(Object)

结果运行到这一行的时候,控制台就会抛出这样一个异常:
回放脚本期间发生异常:[Script1] [脚本“Script1”的第 107 行上的 RationalTestScriptError:[java.lang.NoClassDefFoundError] - com.rational.test.ft.domain.java.jfc.JTreeProxy。]。

它的日志是这样的:
失败 2011年7月20日 上午09时18分28秒 Script1.testMain 有未经处理的错误。
exception_name = java.lang.NoClassDefFoundError
exception_message = com.rational.test.ft.domain.java.jfc.JTreeProxy
script_name = Script1
script_id = Script1.java
line_number = 107
exception_stack = at Script1.testMain(Script1.java:107)
at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
at org.eclipse.core.launcher.Main.main(Main.java:34)
at com.rational.test.ft.util.FtClassLoader.loadClass(FtClassLoader.java:159)
at java.lang.ClassLoader.loadClass(ClassLoader.java:619)

请问这是什么原因呢?如何解决?
非常感谢
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2011-7-21 14:15:38 | 只看该作者
我觉得:
1、你这里实例化了一个JTree的代理类,想通过这个代理类直接去操作AUT,刚开始弄RFT就这样,想法不错~~~
2、这里的异常是.NoClassDefFoundError是无法找到某个类,哪个类,个人觉得是你那个object类是不是有问题,是不是不是标准的注册的ProxyTestObject类?
具体能看看你的Script1中关于object?
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2011-7-25 16:40:07 | 只看该作者
本帖最后由 usdark 于 2011-7-25 17:08 编辑

我的object是这样的:
1   我先定义一个TestObject[]的对象,就是找到树;
                        TestObject[] page = getRootTestObject().find(atDescendant(".class",
                                        "SysTreeView32"));

2 然后我把TestObject找到的最后一颗树(就是我要操作的树),定义为一个ITestDataTree类的对象cdTree;
                        cdTree = (ITestDataTree)page[page.length-1].getTestData("tree");

3 把 cdTree传递给JTreeProxy类的构造函数:
                       JTreeProxy proxy = new JTreeProxy(cdTree);

cdTree就是那个object了;我也曾经试过直接把TestObject对象(就是不把最后一颗树转化为ITestDataTree类型,而直接用TestObject类型),结果他们的报错是一样的。

这几天休假,呵呵,没有来论坛。请LS指点。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2011-7-25 17:23:21 | 只看该作者
休假很舒服吧,羡慕,指教说不上,一起探讨吧,难得有兴趣
1、你这里是测试win32的程序吧
2、我对win32程序不是很了解,但是个人觉得你在这里应该是一个页面中有很多SysTreeView32对象?这样的话,你用只用了一个识别方法去寻找SysTreeView32,RFT是无法识别的
3、如果你的页面中只有一个SysTreeView32,你所说的寻找最后一颗树,难道是节点?因为你这里定义的是ITestDataTree对象,这是树中的节点数据
4、我觉得,你构建的代理类JTreeProxy ,其中映射的对象只能是树,而不能是cdTree之类的数据,可以看看其中的映射XML就知道了,其对象都是一一映射的。
你可以将其界面的情况说说,也许可以一起更好的分析一下
呵呵,希望不要误导你了
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2011-7-27 10:53:55 | 只看该作者
1 呵呵。我是因为公司测试需要,所以学习RFT。我们的界面是用eclipse写的,运行在windows操作系统。
2 主界面上有两颗树,就是两个SysTreeView32对象,在find 的时候会找到两个属性为SysTreeView32的TestObject对象,而我要操作的树是后面一颗,所以我选择后面的一个。
3 我试过直接把TestObject作为对象传递:
  TestObject[] page = getRootTestObject().find(atDescendant(".class", "SysTreeView32"));
  Tree = page[page.length-1];
  JTreeProxy proxy = new JTreeProxy(Tree);
  结果,报错是一样的。
4 映射对象只能是树的话,那么这个对象的类型是什么样的呢?  另外映射XML应该在哪里查看?我不是很明白这个。

谢谢
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2011-7-27 13:31:16 | 只看该作者
1、你输出一下你的“page.length-1”,个人觉得应该不是1
2、Tree = page[1]试试
按道理应该是Tree没有那个对象,所以你实例化对象的时候根本就装载不了吧,没有那个对象传递啊,构造方法就不对吧
试试吧
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2011-7-27 13:48:43 | 只看该作者
有的。这是调试框里page 的内容,有两个对象


这是把两个树的属性都打印出来的(我把.class属性标成红色了):
{.clientRectangle=java.awt.Rectangle[x=0,y=0,width=144,height=558], .description=null Object, .class=SysTreeView32, .textColor=java.awt.Color[r=0,g=0,b=0], .visible=true, .windowedcontrol=true, .name=null Object, .style=1442923061, .value=null Object, .helpFile=null Object, .text=, .enabled=true, .helpTopic=0, .keyboardShortcut=null Object, .defaultAction=null Object, .exstyle=1048576, .screenRectangle=java.awt.Rectangle[x=769,y=340,width=144,height=558], .backgroundColor=java.awt.Color[r=255,g=255,b=255], .processId=5064, .classstyle=16392, .numChildren=7, .associatedId=593574, .hasFocus=false, .font=com.rational.test.ft.value.FontInfo[name=微软雅黑,style=0,size=9], .id=593574, .hwnd=593574, .state=1048576, .role=9, .help=null Object}

{.clientRectangle=java.awt.Rectangle[x=0,y=0,width=232,height=537], .description=null Object, .class=SysTreeView32, .textColor=java.awt.Color[r=0,g=0,b=0], .visible=true, .windowedcontrol=true, .name=null Object, .style=1443971637, .value=null Object, .helpFile=null Object, .text=, .enabled=true, .helpTopic=0, .keyboardShortcut=null Object, .defaultAction=null Object, .exstyle=1049088, .screenRectangle=java.awt.Rectangle[x=528,y=340,width=236,height=558], .backgroundColor=java.awt.Color[r=255,g=255,b=255], .processId=5064, .classstyle=16392, .numChildren=7, .associatedId=68318, .hasFocus=false, .font=com.rational.test.ft.value.FontInfo[name=微软雅黑,style=0,size=9], .id=68318, .hwnd=68318, .state=1048576, .role=9, .help=null Object}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2011-7-27 13:53:06 | 只看该作者
我用:

Tree2 = page[1];
JTreeProxy proxy = new JTreeProxy(tree2);

试了,还是一样的错误。
回复 支持 反对

使用道具 举报

该用户从未签到

14#
 楼主| 发表于 2011-7-27 13:55:06 | 只看该作者
我用:

Tree1 = page[0];
JTreeProxy proxy = new JTreeProxy(tree1);

试了,也是那样的错误。呵呵
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2011-7-27 14:42:23 | 只看该作者
1、我在RFT试了随意去构造一个JTreeProxy
2、你这个Tree 是一个什么对象?
3、你直接试试这样JTreeProxy proxy = new JTreeProxy(page[1]);
4、你再试试
GuiTestObject a = (GuiTestObject )page[page.length-1];
JTreeProxy proxy = new JTreeProxy(a);
5、再不行的话,我索性在用这个方法写一个试试
回复 支持 反对

使用道具 举报

该用户从未签到

16#
 楼主| 发表于 2011-7-27 15:54:53 | 只看该作者
1        你是如何构造的?构造成功了吗?传递的参数是什么类型的对象?
2        我的Tree类型是TestObject:     TestObject Tree = page[1];
3、4   用你的两种方法试过了,还是一样的错误
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2011-7-27 16:26:48 | 只看该作者
1、我就是这样构造的啊,除了与你查找的class属性不一样外
2、TestObject 也应该没问题
3、你的jdk的版本是多少,环境变量对么...
按道理应该不会有什么问题,你就是在JTreeProxy proxy = new JTreeProxy(a)这行出问题了?
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2011-7-27 16:51:38 | 只看该作者
你这里要不不用TreeProxy试试
直接试试
GuiSubitemTestObject a = new GuiSubitemTestObject(page[page.length-1]);
a.click(atPath("节点名称"));
试试再看~
回复 支持 反对

使用道具 举报

该用户从未签到

19#
 楼主| 发表于 2011-7-27 17:23:42 | 只看该作者
a.click(atPath("节点名称"));是可以的。我的脚本上有这个功能。但问题是这样是没法判断是否展开树的。

因为如果是在树展开的状态去click的话,就会折叠起来。在测试的时候,不能知道click后树是展开了,还是折叠了。我要实现的一个功能中,需要首先判断树是否展开。

这个问题困扰很久了,虽然影响不是非常大,但没有解决,感觉总有点遗憾,呵呵。
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2011-7-27 19:31:52 | 只看该作者
1、哦,这样
2、判断树的状态,这样我也不是很清楚,不好意思没能帮上你,可以的话,你短消息发你的QQ或者MSN给我,再一起研究研究
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-9 10:26 , Processed in 0.082326 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表