开源/免费界面自动化测试工具对比研究

摘要:

随着我行自动化测试实施范围的不断扩大,参与界面自动化测试的应用系统越来越多。我行的应用系统现阶段多采用商用工具QTP(UFT)作为执行工具来进行界面自动化测试,采购的QTP license是有限的,使得资源的竞争越来越激烈。未来,使用开源/免费的界面自动化测试代替QTP,是必然发展的趋势。本文基于前期调研结果,对比分析了几款业界主流的开源界面自动化测试工具,供自动化测试相关人员学习参考。

关键字:开源、自动化测试、Selenium、UIAutomation

  • 调研背景与意义

自动化测试由手工测试发展而来,在当前商业银行“持续迭代、快速交付”的大背景下,自动化测试是必然趋势。对于投产前的全量回归测试和大量数据的业务逻辑覆盖测试,自动化测试将大大的减少人力投入,提升测试效率,扩大测试覆盖面,降低投产风险。

前期,我行界面自动化测试工具主要依赖QuickTest Professional(简称QTP,现已升级更名为UFT)。该软件具有价格昂贵、客户端架构庞大、license有限、对部分C/S类应用(比如:BoEing客户端、银企通客户端、海外分行OIBS客户端等)支持不良等原因,其被开源或免费的自动化测试工具取代是必然趋势。

  • 工具介绍

前期,系统支持部组织调研了十余款界面自动化测试工具,下面介绍几种业界主流的开源/免费界面自动化测试工具。

2.1 Selenium

Selenium是Throught Works公司开发的开源Web功能测试工具集,是当前web端系统最受欢迎的开源自动化测试工具之一。Selenium包含了测试的录制(Selenium IDE),测试的并行处理(Selenium Grid),编写与运行(Selenium Remote Control)。Selenium Grid主要架构图如图1所示,Selenium Grid主要包含两个核心组件:Selenium Hub与Remote Control(简称RC,或Selenium RC)。Selenium hub负责分发测试用例给Selenium RC;Selenium RC负责调用浏览器驱动运行自动化测试脚本。

640?wx_fmt=jpeg

图1 Selenium Grid架构图

Selenium中定义了如下强大的描述元素的定位方法:

(1)通过id、name定位,如:selenium.tye(“id=abc”,“百度”);selenium.type(“name=search”,“百度”)。

(2)通过link=链接文字定位,如selenium.click(“link=最近更改”)。

(3)根据xpath定位,如selenium tpye(“xpath=//input[@name=‘user.email’,“xxx@qq.com”)。

(4)Dom选择及Css选择器定位(不常用)。

2.2 UIAutomation

UIAutomation是微软开发的界面自动化测试工具,是.NET Framework的组件之一,可进行C/S类应用的界面自动化测试。此自动化库一开始就是为可访问性和UI测试自动化任务而专门设计的,使用UI自动化库来测试运行支持.NET Framework的操作系统,例如Windows XP、Windows Vista、Windows 7、Windows Server 2003和Windows Server 2008等操作系统主机上的Win32应用程序、.NET Windows窗体应用程序和WPF应用程序。

在UIAutomation中,所有的窗体、控件都表现为一个AutomationElement,AutomationElement中包含此控件或窗体的属性,在实现自动化的过程中,通过其相关属性进行对控件自动化操作。所有显示在桌面上的UI,其实际上是一个UI Tree,根节点是Desktop。在UIAutomation中,根节点表示为AutomationElement RootElement。通过根节点,可以通过窗体或控件的Process Id、Process Names或者Windows Name找到相应的子AutomationElement,例如Dialog、Button、TextBox、CheckBox等标准控件,通过控件所对应的Pattern进行相关的操作。

UIAutomation的体系结构如图2所示:

640?wx_fmt=jpeg

2 UIAutomation的体系结构

(1)在服务端由UIAutomationProvider.dll和UIAutomationTypes.dll提供;

(2)在客户端由UIAutomationClient.dll和UIAutomationTypes.dll提供;

(3)UIAutomationCore.dll为UI自动化的核心部分,负责Server端和Client端的交互;

(4)UIAutomationClientSideProvides.dll为客户端程序提供自动化支持。

2.3 Watir

Watir是基于Ruby库的开源Web自动化测试工具,支持Firefox、Opera、IE等浏览器。Watir脚本以.rb为文件扩展名,脚本头应为“require ‘watir’”,确保可以访问Watir工具。Watir脚本的运行模式是Watir-WebDriver,Watir-WebDriver是基于Ruby开发web驱动框架,支持所有的HTML元素。目前网上关于Watir的介绍资料较少。

在设计Watir自动化测试脚本时需要熟悉常用的Ruby脚本语法。Watir常用语法列举如下:

(1)创建一个IE的测试实例:ie=Watir::IE.new或者使用start方法创建一个浏览器实例并转到一个页面,ie=Watir::IE.start(“http://abc.com”;);

(2)页面导航:ie.goto(“http://abc.com”;);

(3)操纵超链接、复选框、下拉框等Web页面对象,例:使用name属性设置复选框,ie.checkbox(:name,”check”).set。

2.4 Sahi

Sahi是一款由印度公司Tyto Software开发的基于业务的开源Web自动化测试工具。Sahi运行为一个代理服务器,并通过注入JavaScript来访问Web页面中的元素。Sahi支持HTTPS并且独立于Web站点,简单小巧却功能强大。它相对于Selenium等自动化测试工具,在动态ID元素查找和隐式页面等待处理等方面具有一定的优势。

Sahi简单易用,能够很好地支持Ajax和Web2.0技术,同时适用于敏捷和瀑布两种项目模式。Sahi自带录制功能,支持几乎所有的浏览器,且对JS支持较好,具备页面等待判断机制、内置Java异常报告、支持Ajax等优势。尤其值得一提的是,Sahi内置的智能页面等待机制,能够自动判断Ajax请求是否已经处理完毕,然后继续下一步操作。并且这一点对于用户是“隐式”的,不需要增加额外的代码。

Sahi的工作原理大致分为三步:录制、精炼脚本和回放,具体步骤如下:

(1)录制:首先将Sahi其设置为浏览器的代理服务器,这样Sahi的脚本就能够通过request请求,注入到JavaScript里以访问Web页面中的元素。

(2)精炼脚本:录制的脚本都是指定元素并唯一操作的,这时就需要对代码进行重构,抽取出核心的功能块,对其中的元素进行参数化处理,以实现重用。脚本中的数据可以从外部的数据库或文件中读取而来。同时,也可调用Sahi的API或外部Java等API实现一些特定的功能。

(3)回放:自动执行Sahi精炼好的脚本,并生成测试报告。

2.5 Katalon Studio

Katalon Studio是一款功能强大的测试自动化解决方案,适用于Web应用程序,支持Mobile、Web、API等类型的自动化测试。它基于Selenium和Appium框架构建,Katalon Studio利用这些解决方案实现集成软件自动化。

Katalon Studio可以集成到CI/CD流程中,并且可以与QA流程中的流行工具配合使用,包括qTest,JIRA,Jenkins和Git。它还提供一个称之为Katalon Analytics的功能,这个功能可以通过仪表板为用户提供测试执行报告的全面视图,包括图表、图形和指标等。Katalon Studio可以管理页面元素、测试数据、测试案例、生成自动化测试报告等,覆盖整个自动化测试流程及所需资产。Katalon Studio允许用户自定义Method,Test Listeners、KeyWord,也可以导入外部的jar包实现更为复杂的功能,该工具的扩展性很强。

2.6 Robot Framework

Robot Framework是由诺基亚-西门子基于Python开发的一套开源自动化测试工具,采用关键字驱动,并可以通过Python或Java实现的测试库进行扩展,用户可以使用与创建测试用例相同的语法从现有的关键字创建新的更高级别的关键字。

Robot Framework框架是跨平台的,独立于操作系统和应用程序。核心框架使用Python实现,支持Python2和Python3,并且还可以在Jython(JVM),IronPython(.NET)和PyPy上运行。该框架有丰富的测试库生态,由各种通用测试库(包括内置库、扩展库和自定义库)和工具组成,这些库被作为单独的项目开发。

Robot Framework作为一款跨平台的通用的、与应用程序和技术无关的测试框架,具有一个高度模块化的架构,具体的架构如下:

640?wx_fmt=jpeg

3 Robot Framework测试架构图

该架构清晰的将测试工作分成了4层:数据层、测试框架、测试库或第三方测试工具、被测系统。Robot Framework起到了一个承上启下的测试管理平台,以测试库和第三方工具驱动测试数据对被测系统开展自动化测试,整个测试过程Robot Framework不与被测系统有任何关联。

  • 工具分析对比

这些工具都是开源/免费的界面自动化测试工具,我们可以根据需要对其进行二次开发与封装,具有很强的灵活性。

3.1 支持浏览器及操作系统

以上工具都具有跨平台性的特征。

Selenium支持多种浏览器,支持Safari、Google、Chrome、Internet Explorer、Firefox等多种浏览器,可以在Mac、Linux、Windows等多种操作系统上运行;

UIAutomation主要支持客户端应用的录制,对于web端的控件识别能力有限,不建议使用其实施B/S类应用的界面自动化测试。

Sahi同样支持Safari、Google、Chrome、Internet Explorer、Firefox等多种浏览器,可以在Windows、Linux等操作系统上运行;

Watir-WebDriver几乎支持所有的浏览器,比如Chrome、Internet Explorer、Firefox等多种浏览器,但是不支持Safari,可以在Mac、Linux、Windows等多操作系统上运行;

Katalon Studio支持Chrome、Internet Explorer、Firefox等多种浏览器,可以在Mac、Linux、Windows等多操作系统上运行。

Robot Framework可通过集成插件支持多种浏览器,可以在Mac、Linux、Windows等多操作系统上运行。

3.2 入门的难易程度

Selenium可以直接的通过IDE进行录制、回放等,降低了入门门槛,脚本的调试和维护需要一定的编程基础;

UIAutomation可以使用spy++或者inspect等工具获取对象定位信息,再执行脚本编辑,入门门槛较高;

Watir要求测试人员必须懂基本的Ruby语法规则,需要使用命令行安装,搭建集成环境复杂,入门门槛较高;

Sahi自带录制器,可通过点击页面来录制脚本,并对脚本进行精炼,支持多种数据源,入门门槛中等;

Katalon Studio工具支持不同级别的测试人员使用。非程序员可以使用Object Spy来记录测试脚本。程序员可以更加节省构建和维护脚本的时间,并基于工具提升扩展性,灵活实现所需功能;

Robot Framework需要测试人员自己编写脚本,对于关键字测试驱动熟悉的测试人员相对容易上手,入门门槛较高。

3.3 支持的语言

Selenium支持多种编程语言,例如Java、PHP、Python、Ruby等。与其他自动化测试相比,Selenium给予用户自定义测试脚本的多种方式。

UIAutomation主要支持C#;Watir仅仅支持Ruby语言;Sahi主要支持Sahi script,同时还支持Java和Ruby;Katalon Studio支持Java和Groovy;Robot Framework支持Python、Java。相比较而言,Selenium支持多种编程语言,灵活性较强。

根据以上分析和对比,整理表1工具分析对比图。

表 1  工具对比分析图

640?wx_fmt=jpeg


3.4 总结

综上,在web端的录制中Katalon Studio相对简单易用,录制脚本可视化强,案例编写维护方便;Selenium支持脚本语言较多。而UIAutomation在客户端的录制上面比较成熟,定位信息准确。

结束语

本文对比总结了几种开源/免费的界面自动化测试工具。

目前,我行自动化测试平台(ATP)为支持不同应用系统的界面自动化测试需求,已经封装了QTP、Selenium、UIAutomation三款界面自动化测试工具,对用户提供统一的描述语言,屏蔽了工具间的差异,降低了自动化测试的入门门槛,较好地的满足了项目使用需求。

后续,我们会进一步加强对开源/免费自动化测试工具的研究,逐步降低对商用工具的依赖。根据实际使用需求,适时引入新的界面自动化测试工具,并进行二次封装,满足不同类型应用系统的自动化测试需求,降低使用的难度,节省使用时间,提升测试效率。


640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1119G. Get Ready for the Battle

CF1119G. Get Ready for the Battle 题目描述 Solution 妙妙构造题。 考虑这样一个过程&#xff1a;所有人一起打第一个怪&#xff0c;每次打nnn&#xff0c;最后剩下k1<nk_1<nk1​<n&#xff0c;就找一些加起来正好为k1k_1k1​的组打掉k1k_1k1​&#xff0c;剩下的…

使用 ConfigMap 挂载配置文件

使用 ConfigMap 挂载配置文件Intro有一些敏感信息比如数据库连接字符串之类的出于安全考虑&#xff0c;这些敏感信息保存在了 AzureKeyVault 中&#xff0c;最近应用上了 k8s 部署&#xff0c;所以想把 AzureKeyVault 的信息迁移到 ConfigMap&#xff0c;不再依赖 AzureKeyVaul…

CF1158D. Beautiful Array

CF1158D. Beautiful Array Solution 构造 对于所有点(xi,yi)(x_i,y_i)(xi​,yi​)选择yiy_iyi​最小的点作为起点&#xff0c;每次考虑下一步若是LLL&#xff0c;则往最右边&#xff08;与当前线段夹角最大&#xff09;的点走&#xff0c;否则往最左边的点走。 时间复杂度O…

SciSharpCube:容器中的SciSharp,.NET机器学习开箱即用

SciSharp Cube在Docker容器中快速体验SciSharp机器学习工具的最新功能。项目地址(原文链接)&#xff1a;https://github.com/SciSharp/SciSharpCube从Docker Hub运行docker run --name scisharp -it -p 8888:8888 scisharpstack/scisharpcube这条命令会拉取最新的SciSharpCube镜…

CF704B. Ant Man

CF704B. Ant Man Solution 经典dpdpdp&#xff0c;第一次见好像是在ZJOIZJOIZJOI的某题&#xff1f; 先按xxx排序 用f[i][j]f[i][j]f[i][j]表示放入前iii个数&#xff0c;有jjj个端点&#xff08;不算边界点&#xff09;的最小代价。 每次可以&#xff1a; 1.合并两段折线 2.…

.NET Core 3中的性能提升(译文)

回顾我们准备推出.NET Core 2.0的时候&#xff0c;我写了一篇博文来介绍.NET已经引入的诸多性能优化中的一部分&#xff0c;我很喜欢把它们放在一起讲述&#xff0c;也收获了很多正面反馈&#xff0c;因此我又给.NET Core 2.1&#xff0c;一个同样高度聚焦于性能的版本&#xf…

CF594D. REQ

CF594D. REQ Solution 离线询问&#xff0c;按左端点排序。 对于每个质因数都会有p−1p\frac{p-1}{p}pp−1​的贡献&#xff0c;考虑把贡献维护在当前左端点右边最早出现的ppp倍数的位置上。 每次lll增加的时候&#xff0c;把这一位变成1&#xff0c;并把这一位的质因数的贡…

程序员修神之路--高并发下为什么更喜欢进程内缓存

菜菜哥&#xff0c;告诉你一个好消息YY妹子&#xff0c;什么好消息&#xff0c;你有男票了&#xff1f;不是啦&#xff0c;我做的一个网站&#xff0c;以前经常由于访问量太大而崩溃&#xff0c;现在我加上了缓存&#xff0c;很稳定啦加的什么缓存呢&#xff1f;我用的redis&am…

CF364B. Free Market

CF364B. Free Market Solution 显然最终能取到的物品必然是按cic_ici​从小到大排序后的一段前缀。能取到的价值集合可由这段前缀做背包得到。每一轮取数的价值最多增加ddd。 因此先对所有cic_ici​做背包&#xff0c;从000开始每次贪心地选取距离不超过ddd的能被ccc表出的最…

6月数据库排行:PostgreSQL和MongoDB分数罕见下降

DB-Engines 数据库流行度排行榜 6 月更新已发布&#xff0c;排名前二十如下&#xff1a;总体排名和上个月相比基本一致&#xff0c;其中排名前三的 Oracle、MySQL 和 Microsoft SQL Server 也是分数增加最多的三个数据库&#xff0c;增加的分数分别为 13.67、4.67 和 15.57&…

CF611F. New Year and Cleaning

CF611F. New Year and Cleaning Solution 还挺巧妙的套路。 把起点整体看作一个矩阵&#xff0c;在操作时移出原来矩阵外的部分的起点都是超越边界的&#xff0c;可以直接通过超出的面积计算贡献&#xff0c;再把超出的部分删去&#xff0c;模拟即可&#xff08;第一轮模拟会…

在ASP.Net Core 中使用枚举类而不是枚举

前言&#xff1a;我相信大家在编写代码时经常会遇到各种状态值&#xff0c;而且为了避免硬编码和代码中出现魔法数&#xff0c;通常我们都会定义一个枚举&#xff0c;来表示各种状态值&#xff0c;直到我看到Java中这样使用枚举&#xff0c;我再想C# 中可不可以这样写&#xff…

CF626E. Simple Skewness

CF626E. Simple Skewness Solution 先排序。 nnn为奇数时&#xff0c;枚举中位数&#xff0c;两边贪心地选择最大的数&#xff0c;显然平均数是凸函数&#xff0c;三分即可确定最值。 当nnn为偶数时&#xff0c;必然选择最大值&#xff0c;然后转化为nnn为奇数的情况。 PS&a…

ASP.NET Core 中的错误处理

1.前言ASP.NET Core处理错误环境区分为两种&#xff1a;开发环境和非开发环境。●开发环境&#xff1a;开发人员异常页。●非开发环境&#xff1a;异常处理程序页、状态代码页。在Startup.Configure方法里面我们会看到如下代码&#xff1a;env.IsDevelopment()是判断应用程序运…

Java研学-Servlet 进阶

一 请求对象 1 HttpServletRequest HttpServletRequest 是一个接口&#xff0c;该接口的实现类对象称为请求对象&#xff0c;请求对象封装了所有的请求信息(请求行&#xff0c;请求头&#xff0c;请求体(请求参数))。   HttpServletRequest 接口包含了大量的方法。由 Tomcat…

CF626F. Bear and Fair Set

CF626F. Bear and Fair Set Solution 单走一个网络流。 先对余数0..40..40..4分别建一个点&#xff0c;从S−>0..4S->0..4S−>0..4分别连容量n/5n/5n/5的边。 对于每一个限制&#xff0c;相当于把[0,b][0,b][0,b]分成了若干个小区间&#xff0c;并且可以求得每个小…

ASP.NET Core SameSite 设置引起 Cookie 在 QQ 浏览器中不起作用

最近在发布了基于 ASP.NET Core 实现的新版登录页面之后&#xff0c;陆陆续续地接到用户反馈登录时 Antiforgery Token 总是验证失败。日志中记录的对应错误是今天在 QQ 浏览器中将内核模式设置为“总是使用 IE 内核”重现了问题&#xff0c;通过浏览器的开发者工具查看 cookie…

CF372D. Choosing Subtree is Fun

CF372D. Choosing Subtree is Fun Solution 想了一晚都不会&#xff0c;一觉醒来就悟了QwQQwQQwQ 之前一直想着如何用类似树形DPDPDP的方法求出每一个点的贡献再合并&#xff0c;然后突然发现直接枚举区间就行了。 考虑区间确定时&#xff0c;其实就是求区间内节点在原树上的…

ASP.NET Core - 基于IHttpContextAccessor实现系统级别身份标识

问题引入&#xff1a;我们知道当请求通过认证模块时&#xff0c;会给当前的HttpContext赋予当前用户身份标识&#xff0c;我们在需要授权的控制器中打上[Authorize]授权标签&#xff0c;就可以在ControllerBase的User属性获取到基于声明的权限标识(ClaimsPrincipal)。遗憾的是这…

怎样学习和阅读技术书籍?

技术的更新换代非常的迅速&#xff0c;作为一个技术人&#xff0c;需要持续不断地学习才能不被淘汰。但是学习没有速成的方法&#xff0c;只可能有一些技巧让我们事半功倍&#xff0c;本文是我对学习和读书的一点思考。学习是一件「逆人性」的事&#xff0c;如果让你选择是学习…