自动化测试工具QTP和SilkTest横向PK

发表于:2015-04-01来源:uml.org.cn作者:火龙果软件点击数: 标签:
业内但凡玩过QTP的,多半都知道songfun的名字,多少读过几篇我写的关于QTP的文章。然而今天,作为捧红它的一员,我决定亲自推翻它,让它从神坛走下。 前面博文说了QTP已死,

  业内但凡玩过QTP的,多半都知道songfun的名字,多少读过几篇我写的关于QTP的文章。然而今天,作为捧红它的一员,我决定亲自推翻它,让它从神坛走下。

  前面博文说了QTP已死,这里要谈谈最近势头正劲的 SilkTest 。

  众所周知,自动化测试工具曾几何时三足鼎立,Mercury QTP/WinRunner系、IBM RobotJ (RFT)系、Borland Segue SilkTest系,但是几年下来,QTP在国内和国外都将同类工具远远甩在身后几条街。即使后起之秀Web界翘楚Selenium也只能将超越QTP作为自己终身己任,以至于连名字上都要以 Selenium(硒) 克一下它的偶像 Mercury(汞,硒解汞毒)。

  但是时过境迁,SilkTest 已经不再是当年的那个SilkTest,QTP也不再是当年的QTP。2013年的自动化测试工具因为QTP的裹足不前和SilkTest 的浴火重生变得有了味道。

  好吧,一定有人要站出来说QTP现在的市场份额在国内的仍然有 60%,SilkTest还远未成气候,而Selenium只能进行B/S的自动化,不可能取代之……我只想说,这几年以来QTP并无太大建树,除了界面更加华丽,兼容性更差,更耗资源,内核未做更新,就是多了一些华而不实噱头级别的功能特性和某几个小功能——真的一直没有太大变化,按照这样的趋势,QTP很有可能成为下一个WinRunner。

  好吧,最近网站和论坛正在热捧 WinRunner,好多朋友连这个名字都没听过,跑个题,告诉大家 曾经的WinRunner就像今天的QTP一样统领自动化领域的武林,如果大家去看国外最大的SQAForum就会看到它的历史回帖数在今天仍然跻进 Top 3,但是如果你去 bbs.51testing.com 的论坛看看它目前的人气那真是令人嗟叹,整个季度的回帖数不足10篇!

  QTP可能会变成下一个WinRunner,作为使用了QTP 十年之久的我从感情上有些舍不得,但是必须面对的要去面对,我们应该拥抱变化。

  好吧,闲话少说,以下横向PK两大商业级自动化测试工具:

  (一)编程语言:

  QTP一直以来都使用 VBScript. 作为自己的引擎,这在一定程度上降低了学习的成本,确实吸引了很多初学者来学习和使用QTP。

  但 VBScript. 不是一个纯粹的面向对象编程语言,除了可以封装Class,是不能继承和多态的。直接一点说,这样天生缺陷使得QTP的重用性从骨子里就很差,执行效率还很低!

  而SilkTest呢,可以支持 .Net, C#, Java, 以及它自身的 4Test,这本身就可以吸引一大批编程基础扎实的开发人员参与到自动化的实施过程中,而它强大的面向对象基因,强大的重用性,强大的维护性(甚至可以轻而易举进行版本管理,学过QTP的同学都知道,QTP所谓的简单只是入门简单,后期维护是非常恐怖的),极高的开发效率更是远超QTP。

  (二)检查点(Checkpoint)

  QTP的检查点一向不伦不类,好像基于对象库(因为是在对象库中才能看属性),又好像脱离于对象库(因为不是所有的检查点都可以进行对象模式的维护管理,而Checkpoints和Test Objects是并列节点不是归属关系),这在开发过程中被很多朋友直接抛弃,改用其他手段做验证(比如经典的 GetRoProperty)。

  而SilkTest呢,直接通过代码秀出自己要检查的对象的属性等信息,简单易懂不说,维护方便很多——毕竟,难道你喜欢一边在Expert View里编程一边在对象库里看对象吗?累不累啊?

  (三)“录制/回放”

  QTP的录制分为:标准录制模式、低级别录制模式(WinObject对象模式)、模拟录制模式(模拟鼠标运动轨迹)。在视图上采用了业务专家(SME)的 Keyword View和编程人员的 Expert View。

  总体来说还算不错,除了专家视图模式下的编程功能太坑爹。

  而SilkTest呢,有 SilkWorkBench、Silk4J、Silk4Net、SilkClassic等一堆的IDE,支持VB.Net、C#、Java等IDE,真的觉得假如你是团队化开发自动化测试脚本的话,SilkTest的优势要比 QTP明显很多。

  (四)脚本

  QTP的脚本我一直不喜欢,因为不是纯文本。它在创建工程的时候(QTP中的工程叫Test,而不叫 Project),会生成一堆的资源文件,比如ObjectRepository.bdb、Resource.mtr,还有截图目录SnpaShots目录,而脚本代码放在 Script.mts 中,还偏偏在代码行后附着了 Active Screen关联的图片信息。这样导致的直接结果就是版本管理工具没法进行代码的冲突管理,比如merge操作。

  另外启动信息非要整在 Action0 这个目录里面,这种规划思路很不好,过度分离的结果是你维护的时候不得不关注一大堆地方。

原文转自:http://www.uml.org.cn/Test/201405212.asp