51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 7292|回复: 19
打印 上一主题 下一主题

[Robot] 看Robot不顺眼,特来踢馆子

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-12-14 08:48:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
呵呵,开个玩笑,希望大家不要介意.大家可以探讨一下.
  主要是用了很长时间的QTP,现在刚试用了Robot,觉得很不习惯,也很不理解.

1.为什么Robot没有QTP的对象仓库

  (1)没有对象仓库,没有在一个地方集中统一的定义对象,对象特征分散在各个脚本里,一旦对象变了,怎么维护脚本啊?
    比如说,有个按钮,文字是Cancel,现在改为Cancel Testing,那要怎么更新脚本啊?
    可能这个按钮在脚本里出现的地方就有成百上千处,而且有其它窗口的按钮也有Cancel按钮(不用修改的),不能混淆的.想起来就头大!

  (2)直接在脚本里写对象特征,写出来的脚本实在是太难看了,看惯了QTP简洁直观的脚本,实在看不下Robot的脚本格式.
    比如  Robot:  ObjectClass Click "Type=xxx;ObjectIndex=3" ,这样的脚本叫人看了,哪里知道点的是什么按钮啊,可读性太差,难以维护
    而在QTP里, 我就会定义此对象,并起个名字如 Create User, 然后脚本内容就是 Window("User Management").ObjectClass("Create User").Click, 这样的脚本看起来实在是太舒服了.

  大家都在用Robot, 是怎么看待这些问题的啊?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2006-12-14 08:58:53 | 只看该作者
想了个法子处理这个问题

  如果是我用Robot,我就会写一个库函数,相当于QTP的仓库文件,内容就下:

  User_Win = "Caption=User Management"
  User_Create_User_Button = "Caption=Create User"
  User_Test_User_Object = "Type=xxxx;ObjectIndex=3"

  Group_Win = "Caption=Group Management"
  Group_Create_Group_Button = "Caption=Create Group"
  Group_Test_Group_Object = "Type=xxxx;ObjectIndex=3"

  然后在Robot教本里都引用这个库函数,这样写出来的脚本就如下:
  Window SetContext, User_Win , ""
  Button Click, User_Create_User_Button
  Object Click, User_Test_User_Object

  Window SetContext, Group_Win , ""
  Button Click, Group_Create_Group_Button
  Object Click, Group_Test_Group_Object

  用这个方法就能比较粗糙的解决楼上的两个问题, 可以集中的定义和维护对象, 教本也比较直观好看.  但是比起QTP的方法,还是差了不少
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2006-12-14 14:51:00 | 只看该作者
1)没有对象仓库,没有在一个地方集中统一的定义对象,对象特征分散在各个脚本里,一旦对象变了,怎么维护脚本啊?
    比如说,有个按钮,文字是Cancel,现在改为Cancel Testing,那要怎么更新脚本啊?
    可能这个按钮在脚本里出现的地方就有成百上千处,而且有其它窗口的按钮也有Cancel按钮(不用修改的),不能混淆的.想起来就头大!

Robot 不需要对象仓库
如果,一个按钮的仅仅文字从 Cancel 改为 Cancel Testing Robot 照样能识别,不需要改任何代码
而QTP 就挂了,你需要重新维护一次对象库

(2)直接在脚本里写对象特征,写出来的脚本实在是太难看了,看惯了QTP简洁直观的脚本,实在看不下Robot的脚本格式.
    比如  Robot:  ObjectClass Click "Type=xxx;ObjectIndex=3" ,这样的脚本叫人看了,哪里知道点的是什么按钮啊,可读性太差,难以维护
    而在QTP里, 我就会定义此对象,并起个名字如 Create User, 然后脚本内容就是 Window("User Management").ObjectClass("Create User").Click, 这样的脚本看起来实在是太舒服了.

你根本就没有识别出来该控件

Robot 是复杂了点,但是相对于简单的QTP 而言,提供了更为灵活的脚本,比如 Robot 能调用WINAPI ,而QTP 只是 Vbscript
另外,楼主,你 试试看去一个 webeidt 这种控件里 模拟一个 键盘操作,比如做个下拉键的模拟,做个Enter 键的模拟,就知道QTP的缺陷了
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2006-12-14 16:26:48 | 只看该作者

没有正面回答我的问题

楼上的没有正面回答我的问题!sdlkfj2

我只是初次使用Robot,不是要全面争论谁好谁坏。这种问题不争也罢,各有长处,没有意义的。sdlkfj3

我只是很不理解Robot为什么不设置对象仓库,以及很好奇大家是怎么克服我提出的两个问题的?sdlkfj5
如果只是简单的写少量代码,那维护量很小,无所谓。
可是如果是做正式的自动化测试,要写大量的Case,那你们都是怎么维护的啊?sdlkfj4

我觉得这两个问题可是很致命的!sdlkfj8

希望大家直接回答我的问题,而不是仅仅针对我随便提出的两个例子。sdlkfj2


>Robot 不需要对象仓库
>如果,一个按钮的仅仅文字从 Cancel 改为 Cancel Testing Robot 照样能识别,不需要改任何代
>码,而QTP 就挂了,你需要重新维护一次对象库
  如果从 Cancel 改为 Delete 呢?依赖模糊匹配并不是好办法。

> 你根本就没有识别出来该控件
   随意举个例子而已
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2006-12-14 18:26:29 | 只看该作者
用RFT吧 有 Object Map

楼主用的是QTP什么版本啊?

我维护300多个脚本 也没有感觉到需要对象库 我们软件成型稳定以后不会有特别大的改动的

另外我觉得可读性还可以啊 看习惯了就很明了了
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2006-12-15 14:49:25 | 只看该作者
我用的是QTP8.2。

楼上的测试的是什么样的软件啊,真是幸福,没什么界面改动。
要知道界面改动对QTP、Robot等界面测试工具来说是很麻烦的问题啊。
自动化主要适合做回归测试,被测试的软件产品会不停的出新版本,
新版本的界面都会有变动,测试脚本也都要更新。

界面变动了,只要相应的改一下对象仓库,脚本不用改,很方便的。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2006-12-15 14:52:52 | 只看该作者
我试着分别用QTP和Robot录制了段同样的脚本,比较了一下,感觉可读性还是差别很大啊,大家可以自己对比一下后面的脚本。

另外,对Edit、ComboBox、List等本身没有文字的对象,Robot为什么不会象QTP那样自动用其左边的标题文字来识别呢?都是用index来识别,阅读代码时怎么知道是哪个按钮啊,可读性差,又容易出错。

QTP:

JavaWindow("拓扑管理").JavaMenu("配置").JavaMenu("创建网元").Select
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("网元名称(*)").Set "111"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaList("网元类型").Select "CE"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaList("软件版本").Select "222"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaList("硬件版本").Select "333"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("IP地址").Set "4"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit(".").Set "5"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("._2").Set "6"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("._3").Set "7"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("SNMP端口号").Set "888"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaList("SNMP版本号").Select "v2c"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaList("getCommunity").Select "99"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaList("writeCommunity").Select "100"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("位置信息").Set "111"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("描述").Set "222"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaButton("取消").Click


Robot:

    Window SetContext, "Caption=拓扑管理", ""
    JavaMenu MakeSelection, "JavaCaption=拓扑管理\;Type=JavaMenu;Index=1;Path=配置", ""
    JavaMenu Click, "JavaCaption=拓扑管理;\;Type=JavaMenu;Index=1;Path=配置->创建网元", ""
   
    Window SetContext, "Caption=添加网元", ""

    InputKeys "111"

    Browser SetApplet,"JavaCaption=添加网元",""
    ComboBox Click, "Type=ComboBox;Index=1", ""
    ComboListBox MakeSelection, "Type=ComboListBox;Index=1", "Text=CE"

    ComboBox Left_Drag, "Type=ComboBox;Index=2", "Coords=63,8,-18,7"
    InputKeys "222"

    ComboBox Left_Drag, "Type=ComboBox;Index=3", "Coords=69,10,-43,9"
    InputKeys "333"

    EditBox DblClick, "Type=EditBox;Index=2", "Coords=31,9"
    InputKeys "4{RIGHT}{DELETE}5{RIGHT}{DELETE}6{RIGHT}{DELETE}7"

    EditBox Click, "Type=EditBox;Index=6", "Coords=51,14"
    InputKeys "{BKSP}{BKSP}{BKSP}8"

    ComboBox Click, "Type=ComboBox;Index=4", ""
    ComboListBox MakeSelection, "Type=ComboListBox;Index=4", "Text=v1"

    ComboBox Click, "Type=ComboBox;Index=5", "Coords=57,10"
    InputKeys "9"

    ComboBox Left_Drag, "Type=ComboBox;Index=6", "Coords=52,10,-32,13"
    InputKeys "10"

    EditBox Click, "Type=EditBox;Index=8", "Coords=20,7"
    InputKeys "11"

    EditBox Click, "Type=EditBox;Index=9", "Coords=35,22"
    InputKeys "12"

    PushButton Click, "Type=PushButton;Name=取消"
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2006-12-16 15:22:34 | 只看该作者
Robot当然可以用Text和caption之类的识别 在recording option里面有吧  懒得打开看了 反正是有的。。。
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2006-12-27 15:12:56 | 只看该作者
对象识别方法改了吧,ROBOT也可以使用Text和Caption的
QTP更适用于初学者,特别是对于编程没有经验的人,因此占领了很大一部分市场
但是大规模的企业还是用ROBOT多一点
测试工具是死的,但是我们能把测试做得活一点
过于在乎工具之间的差异对自动化测试的学习没有好处
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2006-12-29 17:08:10 | 只看该作者
大规模的企业用Robot,肯定会很惨!

只要有开发经验的人都知道 “重用代码、避免冗余”、“良好的命名增加可读性” 这些基本的原则,写出来的代码才有可维护性和可读性。

QTP和WinRunner有对象仓库,每个对象的特征只要在仓库里描述一次即可,不用在每处代码里都重复描述一遍,遵守了“重用代码、避免冗余”的原则,同时可以给对象起个好名字,遵守了“良好的命名增加可读性”这个原则。

Robot就破坏了这两个原则,代码里没有给对象起名字,可读性差,每个对象的特征都要在每处代码里重复描述一遍,对象有变动时都不知道要修改n处的代码,而且只有天知道n是多少,n处代码都在哪里!

因为有上述缺陷,Robot不适合做大的测试!
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2015-3-26 16:26
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    11#
    发表于 2006-12-30 14:48:36 | 只看该作者
    用熟了就惯了,刀,枪,叉,棍都可以作为武器。还有耙。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2007-1-4 20:23:10 | 只看该作者
    大规模的企业用Robot,肯定会很惨!

    肯定不是了 我们不惨啊.....

    QTP和WinRunner从什么版本开始有对象仓库的? 一开始就有 现在RFT也有啊

    反正我们300多脚本维护起来也很轻松

    对象有变动时都不知道要修改n处的代码,而且只有天知道n是多少,n处代码都在哪里!

    我们的代码不会没事乱动的  成型的产品才能auto

    另外  还是那句话 工具是死的  人是活的~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2007-1-21 14:18:26 | 只看该作者
    学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2007-11-27 16:18:50 | 只看该作者
    学习了~!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2009-3-3 20:58:51 | 只看该作者

    请问下这个是如何用QTP录制的啊,请教下啊

    JavaWindow("拓扑管理").JavaDialog("添加网元").JavaList("writeCommunity").Select "100"
    JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("位置信息").Set "111"
    JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("描述").Set "222"
    JavaWindow("拓扑管理").JavaDialog("添加网元").JavaButton("取消").Click

    请问下这个是如何用QTP录制的啊,请教下啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2009-3-4 09:17:12 | 只看该作者

    发表下自己的观点!:)

    个人感觉自动化测试本身的性质就是一项开发工作,因此脚本并不是录制出来的,而是编写出来的。如果单单靠录制就想实现软件测试的自动化工作,那我觉得还是不太现实的。这也应了楼上一些朋友的话,“工具是死的,人是活的”。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2009-3-4 09:29:26 | 只看该作者
    原帖由 bb64844866 于 2009-3-4 09:17 发表
    个人感觉自动化测试本身的性质就是一项开发工作,因此脚本并不是录制出来的,而是编写出来的。如果单单靠录制就想实现软件测试的自动化工作,那我觉得还是不太现实的。这也应了楼上一些朋友的话,“工具是死的,人是 ...

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2009-3-14 00:18:48 | 只看该作者
    楼主,QTP其实可以抛弃对象库的,用描述性编程就可以了(Descriptive Programming),而且我觉得QTP维护对象库是件很麻烦的事情,我做的项目中,录制下来的对象库经常识别错误,所以后来被我干脆抛弃不用对象库,这样拷脚本只要拷script.mts就可以了。

    Robot为什么没有对象库,我觉得从根本上说SQA这语言本身并不是面向对象的,而是面向过程的。SQA并不等同于VBscript, 因为在SQA里就不能像VBScript里面写个Class。虽然在Robot里面你可以创建对象类型Object,但是总体SQA还是基于面向过程的一个思路。所以写的测试脚本也是无法摆脱这样一个思路。 QTP相比较Robot,提供了很多可以操作的类,其实Browser, Page, WebEdit, Weblist等等都是QTP封装完以后的类,这点上相对方便一点,因为OO的思想就是让代码更接近于自然语言,容易阅读。

    其实新一代的Rational Functional Tester是面向对象的,虽然我还没用过,但是应该是接近了。

    我是先用了1年的Robot,后来又做了大半年的QTP,这么个体会。 说的不对的地方,请大家指正。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
    发表于 2009-3-20 18:07:24 | 只看该作者
    看了你们的话,才知道robot博大精深啊!我现在用的都是robot比较简单的功能
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20#
    发表于 2009-9-25 00:43:03 | 只看该作者
    恩,在各位的辩论中学到不少东西~~好~~
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-17 20:27 , Processed in 0.073646 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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