Sahi基于开源Web应用自动化测试工具示例应用

Sahi 支持 HTTPS 并且独立于 Web 站点,简单小巧却功能强大。它相对于 Selenium 等自动化测试工具,在动态 ID 元素查找和隐式页面等待处理等方面具有一定的优势。选择 Sahi 工具来实现具体 Web 项目的自动化测试是一个很不错的选择。

随着 Web 技术和互联网的发展,Web 应用产品越来越丰富,基于 Web 页面测试的需求与日俱增。在当前全球软件都在追求高效、敏捷的开发模式的大背景下,Web 自动化测试成为了新一波技术探讨和研究的热潮。因为传统的手工测试不仅效率低,并且测试质量受限于测试人员的一些情绪和心情。若当一个测试人员带着烦躁情绪来测这些繁杂的大量重复性工作,测试的质量令人担忧。更何况,当这项测试工作涉及到全球化方面的测试时,多语言版本的测试工作导致该测试工作量的成倍增加,这无疑是一项巨大的考验!

Sahi 的特性和优势:

当提及面向 Web 的自动化测试,相信许多读者会想到或者说使用过 Selenium、Watir 等工具,而对于 Sahi 就可能比较陌生。首先,让我们先来了解下 Sahi 工具。它是一款印度公司 Tyto Software 开发的成熟的开源 Web 自动化测试工具。Sahi 简单易用,能良好支持 Ajax 和 Web2.0 技术,同时适用于敏捷和传统的不同测试模式。那么,它与其他非常流行的 Web 自动化测试工具有哪些不同和优势呢?让我们将其与主流自动化测试工具 Selenium 和 Watir 来进行一番对比,请参考图 1:

图 1. Sahi 与其他工具的对比

从上图的对比可以看出,Selenium 支持的脚本语言比较丰富,且自带 Selenium IDE 自动录制工具,Watir 执行的速度相对其他较快。而 Sahi 同样具备了自带的录制器,且支持几乎所有浏览器,且对 JS 支持较好,拥有页面等待判断机制,内置 Java 异常报告,支持 Ajax 等优势。

下面,本文将详细介绍一下 Sahi 的几大优势。

基于上下文的页面识别机制:

大多数如 Selenium 等 Web 自动化测试工具或是自动化框架,都采用类似基于 DOM 的定位策略、Xpath 定位策略和 id、name、identifier 等页面元素定位策略。

Identifier 定位是最普遍的一种定位方式,当不能识别为其它定位方式后,默认为 identifier 定位。在这种策略下,第一个使用 id 的页面元素将被识别出来,如果没有使用指定 id 的元素,那么将识别第一个名字与指定条件相符的元素。

例如,identifier 识别 username 元素的定位策略:identifier=username

Id 定位是在知道元素具体 id 特征的情况下的一种更精确定位。例如,定位页面元素 loginFrom:id=loginFrom

name 定位方式是去识别第一个匹配名称属性的 UI 元素。如果多个元素拥有相同的名称属性,可以使用 value 过滤器来进一步优化您的定位策略。例如,定位页面元素为 username:
name=username

Xpath 定位是在 XML 中定位元素的方法,而 HTML 可以被看作是 XML 的一种实现。XPath 扩展了上面 id 和 name 定位方式,提供了绝对路径和相当路径两种查找方式。

绝对路径:html/body/div[1]/div[1]/div[3]/div[1]/form/span/input[1]

相对路径查找://div[@id='fm']/form/span/input

然而,在实际的情况下,页面元素并非如预期般明确。一些动态页面的 DOM 树常常随着 Web 产品的更新而频繁改变。许多的元素值如 ID、Name 等在代码中并不是必须的,常常会缺省。并且,属性值往往不是唯一对应的,页面中有时会存在相同属性的元素。当缺省 id 值或是 Xpath 定位失效时,上述这几种查找定位方式往往显得无助和脆弱。

Sahi 采用了一种主动查找的机制,它不受限于特定的元素属性。在没有 ID、Name 值的情况下,它可以使用一些如“title,value”等属性,这些都是页面可见的属性,所见即所得。同时,Sahi 会通过传入这些可见可识别的属性值,来按照 Sahi 预设的机制进行查找识别。Sahi 允许开发者对每一种元素设置不同属性和特定的查找顺序,包括那些自定义的属性名。所以 Sahi 相对于其他的 Web 自动化测试工具更灵活更开放。

比如,_link(“valueName”)用来定位一个定义为“valueName”的 link,这里的 valueName 并不一定是 value 的属性值,也可以是它的 id、title 等。

前面提到了 Sahi 主动查找的机制,那么它是如何去查找 DOM 节点下的特定元素的呢?Sahi 主要提供了三种基于上下文的元素 API:_in,_near 和_under。

从字面意思上,我们不难理解,_in 是指在某个 DOM 节点下查找某个元素,这比 Xpath 的不管是绝对路径或是相对路径查找都来的灵活,不会因为 DOM 树内部结构发生变化而导致路径失效找不到元素的问题。

_near 是指在某个元素附近查找相应设定规则条件的最近一个元素,这对于一个页面中有多个相同属性值的情况提供了一个很好的解决方式,使查找的范围更精确。

_under 是指在某个元素下方开始查找,找到符合条件的最近一个元素,一般_under 都适用在具有相同偏移量的同一列中。下面,我们来看一个例子,加深对 Sahi 这种基于上下文识别查找机制的理解:

图 2. 案例网页

假设,在图 2 显示的 Web 页面的所有 text box 的 name=”q”,那么,Sahi 的侦探器通过一些标识来鉴别它们,如(_textbox("q"), _textbox("q[1]")和_textbox("q[2]"))。

如果,我们要定位“Ruby for Rails”那一行的 text box,即_textbox("q[1]")。传统的元素识别会遇到多个相同属性元素的问题,即使是 Xpath 的定位方式也会因为在它前面加了一行新的数据而导致 Xpath 定位失败的情况。

这时 Sahi 可以通过_near 这种方式来定位:

_textbox("q",_near(_cell("Ruby for Rails")))

当要定位 check box 时,我们又会发现,“Ruby for Rails”这一行有“Recommend”和“Already own”两个 check box,为了更准确地定位,我们可以结合_under,例如:_checkbox(0,_near(_cell("Ruby for Rails")),_under(_cell("Recommend")))。

如果在整个页面中存在多个这样的表格,我们还可以用_in 来进一步缩小范围,如:_checkbox(0,_near(_cell("Ruby for Rails")),_under(_cell("Recommend")),
_in(_cell("Cost))).

同时值得一提的是,Sahi API 中的 identifier 参数都支持正则表达式,例如,_div(/name.*/) 用来识别所有以某种预属性值是 name 开头的 div。

隐式页面加载响应等待机制:

现在越来越多的 Web 应用采用 Ajax 的应用技术,来支持网页数据的异步请求响应。当前一般的 Web 自动化测试工具没有一个智能的处理机制,来判断何时可以继续下一个操作。像 Selenium 等自动化测试工具通常会在脚本中人为来设定一个固定的等待时间。但这往往被证实不一定是准确的。实际测试中,人是很难准确判断每一个操作请求需要的合理时间数值。因为,等待时间设置过短,下一步操作在被测应用请求还未返回就执行了,或是由于网络因素使正常的响应时间变长,都可能导致测试过程找不到相应的页面元素,从而导致整个测试用例失败的情况。而如果把时间设置过长,又会造成在一些正常响应过程中的不必要等待的时间浪费,降低了测试效率。

当然,一些测试人员会在自动化测试脚本中加入一些自定义的代码。通过轮询界面上某个指定元素,来判断请求响应是否返回,进而决定继续下一步操作或者是超时。但是,这样的查找过程会导致整个脚本代码变得非常臃肿,加大了开发的成本。更何况,在一个动态的页面找到指定的元素本身就不是一件容易的事。

Sahi 内置了智能的页面等待机制,能够自动判断 Ajax 请求是否已经处理完毕,然后继续下一步操作。并且,这一点对于用户是“隐式”的,不需要增加额外的代码。

Sahi 的工作原理:

简单地说,用 Sahi 实现自动化测试有三步,录制,精炼脚本和回放,如下图:

图 3. Sahi 工作的三个主要过程

如上图 Sahi 就是先用其自带的录制工具,把大致的操作过程录制下来,并用 Sahi 代码记录下整个操作过程。随后,将自动生成的代码进一步的精炼和开发,调用一些外部 API 或编写特定代码来实现特定的操作。最后,用 Sahi 来回放保存好的最终脚本,Sahi 就将自动对 Web 应用进行定义好的测试操作。

下面,本文将对这三个过程进行详细说明。

第一步:录制

图 4. Recording 过程的工作原理

Sahi 是通过运行为一个代理服务器,并通过设置浏览器代理为 Sahi 服务器。这样 Sahi 的脚本就能够通过 request 请求来注入到 JavaScript 里以访问 Web 页面中的元素。如图,可以很清晰的看到,Sahi 就是 Web 浏览器和 Web 服务器之间的一个中间代理。

第二步:精炼脚本

图 5. Refine Script 过程的工作原理

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

第三步:回放

图 6. Play back 过程的工作原理

Sahi 运行提炼好的脚本来自动化测试操作,并生成测试报告。

时间: 2024-10-28 09:38:47

Sahi基于开源Web应用自动化测试工具示例应用的相关文章

10 个强大的开源 Web 流量分析工具

Web 流量分析工具多不胜数,从 WebTrends 这样专业而昂贵的,到 Google Analytics 这样强大而免费的,从需要在服务器端单独部署的,到可以从前端集成的,不一而足.本文收集并介绍了10个功能强大的开源 Web 流量分析工具,因为是开源的,因此可以免费部署到你的网站. TraceWatch TraceWatch 是一个开源 Web 流量分析程序,支持实时分析,可以提供深度分析报告. SlimStat 基于 PHP-MySQL,同时,可以像 Google Analytics 那

10个强大开源Web流量分析工具

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 Web 流量分析工具多不胜数,从 WebTrends 这样专业而昂贵的,到 Google Analytics 这样强大而免费的,从需要在服务器端单独部署的,到可以从前端集成的,不一而足.本文收集并介绍了10个功能强大的开源 Web 流量分析工具,因为是开源的,因此可以免费部署到你的网站. TraceWatch TraceWatch 是一个开源

介绍10个功能强大的开源Web流量分析工具

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   最近在伦敦举行的世界旅游博览会上(World Travel Market),旅游行业的专家们齐聚一堂,对网站流量分析(Web analytics)和看似微不足道的网站观察和调整对业务产生的巨大影响进行了讨论. EXpedia商务发展部总监Cameron JonES,强调了网站的快速反应对业务的重要性:"在2006年,人们愿意花4秒钟等待网页打开.现在他

超好用!5款开源的移动自动化测试工具

如今,移动应用在企业的地位越来越重要,消费者对移动设备的要求也越来越高.为适应这一需求,测试团队必须在移动设备推出市场之前,对其性能进行一系列的评估和测试.然而,这是一个既耗时又耗资源的工作,尤其移动设备的自动化测试还非常复杂. 在现已出现的开源移动自动化测试工具中,我总结出5款最实用的,希望它们对你有帮助(部分可同时在iOS和Android设备上使用): 1.Appium Appium是一款用于自动化本机.移动Web和混合应用程序的开源工具.可在iOS和Android上使用. 2.Calaba

SlimerJS —— 基于Firefox的网页自动化测试工具

SlimerJS 是一个提供给 Web 开发人员,可通过脚本编程控制的浏览器.它可以让你使用 Javascript 脚本操纵一个网页:打开一个网页,点击链接,修改的内容等,这对于做功能测试,页面自动机,网络监控,屏幕捕获等是非常有用的. 文章转载自 开源中国社区 [http://www.oschina.net]

《手机测试Robotium实战教程》—第1章 1.3节移动端自动化测试工具的选择

1.3 移动端自动化测试工具的选择 之所以需要选择,是因为可选项太多了,不同的平台,会有很多不同的自动化测试工具供选择,其中既有商业性的收费工具,也有开源免费的自动化测试工具. 这本书的主题Robotium就是其中一种开源的自动化测试框架,在正式展开前,先看看当下还有哪些在Android测试方面比较常用的测试框架可供选择. 1.3.1 Appium Appium也是一种自动化测试框架,可以用来测试natvie.hybrid和mobile web APP,Appium最吸引人的一点是,它既支持An

《手机测试Robotium实战教程》——第1章,第1.3节移动端自动化测试工具的选择

1.3 移动端自动化测试工具的选择之所以需要选择,是因为可选项太多了,不同的平台,会有很多不同的自动化测试工具供选择,其中既有商业性的收费工具,也有开源免费的自动化测试工具. 这本书的主题Robotium就是其中一种开源的自动化测试框架,在正式展开前,先看看当下还有哪些在Android测试方面比较常用的测试框架可供选择. 1.3.1 AppiumAppium也是一种自动化测试框架,可以用来测试natvie.hybrid和mobile web APP,Appium最吸引人的一点是,它既支持Andr

玩C一定用得到的19款Java开源Web爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. 今天将为大家介绍19款Java开源Web爬虫,需要的小伙伴们赶快收藏吧. 一.Heritrix Heritrix 是一个由 java 开发的.开源的网络爬虫,用户可以使用它来从网上抓取想要的资源.其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑. Heritrix 是个"Archi

玩大数据一定用得到的19款 Java 开源 Web 爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. 今天将为大家介绍19款Java开源Web爬虫,需要的小伙伴们赶快收藏吧. 一.Heritrix Heritrix 是一个由 java 开发的.开源的网络爬虫,用户可以使用它来从网上抓取想要的资源.其最出色之处在于它良好的可扩展性,方便用户实现自己的抓取逻辑. Heritrix 是个"Archi