自动化测试作为非常专业的市场,不光对自动化测试的工程师技术要求很高,而且在工具选择也非常关键。很多公司的软件在以手动测试为主转换到更多应用自动化测试的过程中,一大困惑是如何选择自动化测试产品。工具产品的选择不仅决定着今后测试质量和自动化测试的开发效率。而且影响到技术人员的招聘,运营成本等多种因素。

 

仅从成本角度考虑,开源软件没有工具软件的购置成本,但是开源工具的集成和测试框架的搭建需要耗费大量人力。另外,疑难问题如果没有厂商支持,会影响项目进度,也会导致大量的支出。如果从总拥有成本角度考虑(TCO),未必是最优的。

 

为帮助各位根据自己的实际情况选择合适的工具,本文选取了自动化测试的几款典型的工具,从工具软件的各个方面进行比较。方便各位在选择工具的时候做有效的决策。UFT,RFT是老牌的自动化测试工具、生态相对封闭。CukeTest是开源软件Cucumber演变而来的软件,在开源社区被广泛的采用。

 

各自动化工具的特性比较
特性 惠普 Unified Function Testing IBM Rational Functional Tester 聆播科技CukeTest
脚本管理 脚本文件的方式管理脚本,后期维护困难,复用率很低。目前不少厂商开发了UFT的脚本管理工具,但无法脱离脚本文件的基础,很难有质的改变。 分散管理脚本,用户在使用时需到相应用户处查找脚本,查找到脚本后才能够调用,无形增加了工作量。分散管理模式不能实现脚本实时更新,不能实现实时共享,导致脚本的复用率较低。 脚本管理采用先进的行为驱动(BDD)方式,基于测试场景管理测试用例。测试步骤与代码相关联。脚本易于维护。因为基于自然语言编写测试场景,有很强的可读性,非测试开发也可审阅和贡献测试用例。
易用性

工具的图形化操作功能比较简单;
脚本编写比较简单;
可以通过简单的描述性编程实现手动识别对象。

工具的图形化操作功能比较简单;
脚本编写比较难;
通过find方法实现手动识别对象,使用难席比较大点。

用例开发部分采用可视化模式和文本模式两种方式,根据需要切换。代码部分使用流行的脚本编辑器。可从用例跳转到代码,或从代码转到用例文本。
使用配置 需要安装一系列工具,并配置licence。 RFT安装复杂,配置步骤多。 多平台开发支持,包括MacOS、Windows等,开发的脚本还可在Linux上运行。从免费版开始,一定用量需安装License。
脚本语言 VBS Java、VB.NET JavaScript,Node.js

支持应用

 

默认支持windows控件,VB,和ActiveX;
可以加插件来支持其他常用的应用程序。不过插件都是要单买的,价格很高。

默认支持大部分常用的应用程序。
其他应用程序可以通过加载相应的识别Jar包进行识别,可惜,这些Jar包没有现成的。

支持各类应用包括Windows、移动端、Web、API等。移动端、Web、API等开发时需引入免费的开源库,无需额外成本。Windows应用测试可跟本公司另一产品LeanRunner结合使用。
录制脚本

支持图形化的操作录制脚本;
支持图形化的操作添加验证点;
支持图形化的操作应用正则表达式。

支持图形化的操作录制脚本;
支持图形化的操作添加验证点;
支持图形化的操作应用正则表达式。

不提供录制,Web采用开源方案的对象识别,有丰富的公开文档,简单培训即可了解。Windows支持对象识别,添加到对象管理库后再自动生成对象调用代码。
参数化

支持图形化的数据表格式数据操作;
使用的是Excel文件来作为测试数据存储介质;
可以直接打开Excel数据文件修改数据;

支持指参数化数据;
支持图形化的数据表格式数据操作;
使用的是Xml格式文件来存储测试数据;
Xml测试数据只支持在RFT软件中使用格式化方式显示和修改;
Xml测试数据使用标准的数据格式,通用性更好。

支持参数化。内置了行为驱动参数化功能。支持数据驱动,数据表可从外部导入,或将测试用例中已有的数据导出到Excel。

测试数据

加载

测试数据加载简单,使用内置函数能方便实现。 可以用封装的方法来动态加载数据,不过比较复杂,而且还得修改脚本中参数化的地方。 提供加载数据表的API。

对象识别

能力

有内置识别的比较标准的控件识别强;
组合的控件识别较弱;
默认支持dom,可以直接操作。

有内置识别的比较标准的控件识别强;
自定义的控件识别较弱;
可以自定义非标准控件的识别;
当然,通过Jar包的加载,理论上可以操作任何想操作的对象

对象识别使用了开源库Selenium的功能。是广泛使用的成熟方案,支持多种识别方式,包括Id,css, linkText, name, className, xPath等多种方式。

手动添加

对象

提供树形的对象选取方式,可以选择当前节点,也可以选择父节点或子节点,使用挺方便。

提供节点直接选择和对象遍历选择,
不大实用。
首先,节点直接选择不能选择父节点或子节点,很多情况是直接选择不到要选的节点的;
其次,遍历节点更是不可能,因为页面经常一遍历就有好几百个对象,很是不好找。

手动添加对象是基于流行的Selenium的对象添加,市场上有众多的技术人员了解这些添加对象的方式,也有非常多的免费培训讲解。
脚本编辑

提供步骤编辑界面,方便不会不会编程的人员使用;
脚本编辑器的功能比较弱。

只有脚本编辑器,没有步骤编辑器;
脚本编辑器的功能比较强,跟操作Eclipse差不太多。

集成流行的vscode引擎,类似vscode的脚本编辑器,提供智能提示
脚本调试

HP为QTP加入了VBS调试功能;
调试功能比较弱。

直接使用Eclipse调试Java的强大功能。 JavaScript的调试方式,无需编译。另有多种按照场景的调试方式。因为是JavaScript语言,前端工程师也可参与开发调试。
回放速度 速度比较快。 速度一般。 采用Node.js引擎,和成熟的Selenium库,速度较快。
结果报告

树形显示各个步骤的执行情况。
可以在代码中向报告写内容。

提供多种形式的结果显示。
可以在代码中向报告写内容。

提供多种类型的html报告,其中有按照场景的汇总数据,以及每个场景步骤的详细数据。每个场景详细内容可以添加截屏或自定制数据。可以导出到PDF,另提供json报表数据,方便自定制。运行时可以自动录制视频。
扩展性 插件扩展,插件都由UFT厂商提供 有Jar包,几乎就可以扩展。 能够与多种开源的自动化库相结合使用,扩展自动化功能。因为基于流行的Node.js技术,Github上有众多数量的JavaScript库扩展功能。
集成性

提供了与其他程序结合的接口,对C#、VB和VBS结合性比较好。
可以通过C#、VB和VBS等编写程序方便的调用和操作UFT。

提供了编写用例脚本的API,但产品本身功能不易扩展 提供多种类型html报表,json报表数据,方便自定制报表,有Jenkins插件支持,可在Jenkins中轻松实现持续集成
安全性 架构较封闭,不支持提供源码,安全性无法评估 架构较封闭,不支持提供源码,安全性无法评估 基于开源实现,提供执行引擎及自动化库源码,便于自主可控
价格 昂贵 较贵 一般
总结 功能全面,价格昂贵,自动化测试脚本生成较快,但对需求的频繁变化自适应能力差,重新录制的风险较大,脚本维护困难,回归持续100%通过率较低。在国内的市场占有率有逐年下降的趋势。 RFT 的验证结构的功能比较强大,通过对 TestObject 的获取和使用,可以对 Eclipse 中的很多的 SWT/JFace 图形对象提供支持,而且也可以支持很多的验证种类;其次,它直观、易于理解。但RFT验证 API 的使用繁琐、可重用性低;也没有区分各个具体对象类型的差异,造成验证形式比较单一,从而不利于用户进行扩展操作;用例执行失败定位不方便,自动生成的脚本维护较困难。 性价比较高,可扩展性强。产品支持Web、接口、Android、IOS、Windows、Qt等。行为驱动让脚本维护更为方便。开发的脚本基于开源引擎执行,避免了供应商绑定。灵活开放能引入众多的开源库和解决方案,易扩展。

 

各软件在支持的语言、脚本开发、自动化技术、可扩展性、报告方面各有强项。相信大家在进行综合的比较后。对这几款工具有了初步的了解。在开源软件盛行的今天,由单一厂商提供大而全且价格昂贵的产品已不再是潮流,反之,支持开源、开放、提升价值是软件产品的新的趋势。

 

因为篇幅关系,本文只比较了几款主流工具,如果要参考其它工具,也可填写类似的表格做详细的比较分析。