看Robot不顺眼,特来踢馆子
呵呵,开个玩笑,希望大家不要介意.大家可以探讨一下.主要是用了很长时间的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, 是怎么看待这些问题的啊? 想了个法子处理这个问题
如果是我用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的方法,还是差了不少 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的缺陷了
没有正面回答我的问题
楼上的没有正面回答我的问题!sdlkfj2我只是初次使用Robot,不是要全面争论谁好谁坏。这种问题不争也罢,各有长处,没有意义的。sdlkfj3
我只是很不理解Robot为什么不设置对象仓库,以及很好奇大家是怎么克服我提出的两个问题的?sdlkfj5
如果只是简单的写少量代码,那维护量很小,无所谓。
可是如果是做正式的自动化测试,要写大量的Case,那你们都是怎么维护的啊?sdlkfj4
我觉得这两个问题可是很致命的!sdlkfj8
希望大家直接回答我的问题,而不是仅仅针对我随便提出的两个例子。sdlkfj2
>Robot 不需要对象仓库
>如果,一个按钮的仅仅文字从 Cancel 改为 Cancel Testing Robot 照样能识别,不需要改任何代
>码,而QTP 就挂了,你需要重新维护一次对象库
如果从 Cancel 改为 Delete 呢?依赖模糊匹配并不是好办法。
> 你根本就没有识别出来该控件
随意举个例子而已 用RFT吧 有 Object Map
楼主用的是QTP什么版本啊?
我维护300多个脚本 也没有感觉到需要对象库 我们软件成型稳定以后不会有特别大的改动的
另外我觉得可读性还可以啊 看习惯了就很明了了 我用的是QTP8.2。
楼上的测试的是什么样的软件啊,真是幸福,没什么界面改动。
要知道界面改动对QTP、Robot等界面测试工具来说是很麻烦的问题啊。
自动化主要适合做回归测试,被测试的软件产品会不停的出新版本,
新版本的界面都会有变动,测试脚本也都要更新。
界面变动了,只要相应的改一下对象仓库,脚本不用改,很方便的。 我试着分别用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=取消" Robot当然可以用Text和caption之类的识别 在recording option里面有吧懒得打开看了 反正是有的。。。 对象识别方法改了吧,ROBOT也可以使用Text和Caption的
QTP更适用于初学者,特别是对于编程没有经验的人,因此占领了很大一部分市场
但是大规模的企业还是用ROBOT多一点
测试工具是死的,但是我们能把测试做得活一点
过于在乎工具之间的差异对自动化测试的学习没有好处 大规模的企业用Robot,肯定会很惨!
只要有开发经验的人都知道 “重用代码、避免冗余”、“良好的命名增加可读性” 这些基本的原则,写出来的代码才有可维护性和可读性。
QTP和WinRunner有对象仓库,每个对象的特征只要在仓库里描述一次即可,不用在每处代码里都重复描述一遍,遵守了“重用代码、避免冗余”的原则,同时可以给对象起个好名字,遵守了“良好的命名增加可读性”这个原则。
Robot就破坏了这两个原则,代码里没有给对象起名字,可读性差,每个对象的特征都要在每处代码里重复描述一遍,对象有变动时都不知道要修改n处的代码,而且只有天知道n是多少,n处代码都在哪里!
因为有上述缺陷,Robot不适合做大的测试! 用熟了就惯了,刀,枪,叉,棍都可以作为武器。还有耙。。。 大规模的企业用Robot,肯定会很惨!
肯定不是了 我们不惨啊.....
QTP和WinRunner从什么版本开始有对象仓库的? 一开始就有 现在RFT也有啊
反正我们300多脚本维护起来也很轻松
对象有变动时都不知道要修改n处的代码,而且只有天知道n是多少,n处代码都在哪里!
我们的代码不会没事乱动的成型的产品才能auto
另外还是那句话 工具是死的人是活的~ 学习 学习了~!
请问下这个是如何用QTP录制的啊,请教下啊
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaList("writeCommunity").Select "100"JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("位置信息").Set "111"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaEdit("描述").Set "222"
JavaWindow("拓扑管理").JavaDialog("添加网元").JavaButton("取消").Click
请问下这个是如何用QTP录制的啊,请教下啊
发表下自己的观点!:)
个人感觉自动化测试本身的性质就是一项开发工作,因此脚本并不是录制出来的,而是编写出来的。如果单单靠录制就想实现软件测试的自动化工作,那我觉得还是不太现实的。这也应了楼上一些朋友的话,“工具是死的,人是活的”。 原帖由 bb64844866 于 2009-3-4 09:17 发表 http://bbs.51testing.com/images/common/back.gif个人感觉自动化测试本身的性质就是一项开发工作,因此脚本并不是录制出来的,而是编写出来的。如果单单靠录制就想实现软件测试的自动化工作,那我觉得还是不太现实的。这也应了楼上一些朋友的话,“工具是死的,人是 ...
顶 楼主,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,这么个体会。 说的不对的地方,请大家指正。 看了你们的话,才知道robot博大精深啊!我现在用的都是robot比较简单的功能 恩,在各位的辩论中学到不少东西~~好~~
页:
[1]