SahiPro自动化测试资料.docx
- 文档编号:5025467
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:17
- 大小:353.24KB
SahiPro自动化测试资料.docx
《SahiPro自动化测试资料.docx》由会员分享,可在线阅读,更多相关《SahiPro自动化测试资料.docx(17页珍藏版)》请在冰豆网上搜索。
SahiPro自动化测试资料
使用Sahi实现Web自动化测试
Sahi是TytoSoftware旗下的一个基于业务的开源Web应用自动化测试工具。
Sahi运行为一个代理服务器,并通过注入JavaScript来访问Web页面中的元素。
Sahi支持HTTPS并且独立于Web站点,简单小巧却功能强大。
它相对于Selenium等自动化测试工具,在动态ID元素查找和隐式页面等待处理等方面具有一定的优势。
选择Sahi工具来实现具体Web项目的自动化测试是一个很不错的选择。
随着Web技术和互联网的发展,Web应用产品越来越丰富,基于Web页面测试的需求与日俱增。
在当前全球软件都在追求高效、敏捷的开发模式的大背景下,Web自动化测试成为了新一波技术探讨和研究的热潮。
因为传统的手工测试不仅效率低,并且测试质量受限于测试人员的一些情绪和心情。
若当一个测试人员带着烦躁情绪来测这些繁杂的大量重复性工作,测试的质量令人担忧。
更何况,当这项测试工作涉及到全球化方面的测试时,多语言版本的测试工作导致该测试工作量的成倍增加,这无疑是一项巨大的考验!
Sahi的特性和优势:
当提及面向Web的自动化测试,相信许多读者会想到或者说使用过Selenium、Watir等工具,而对于Sahi就可能比较陌生。
首先,让我们先来了解下Sahi工具。
它是一款印度公司TytoSoftware开发的成熟的开源Web自动化测试工具。
Sahi简单易用,能良好支持Ajax和Web2.0技术,同时适用于敏捷和传统的不同测试模式。
那么,它与其他非常流行的Web自动化测试工具有哪些不同和优势呢?
让我们将其与主流自动化测试工具Selenium和Watir来进行一番对比,请参考图1:
图1.Sahi与其他工具的对比
从上图的对比可以看出,Selenium支持的脚本语言比较丰富,且自带SeleniumIDE自动录制工具,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页面的所有textbox的name=”q”,那么,Sahi的侦探器通过一些标识来鉴别它们,如(_textbox("q"),_textbox("q[1]")和_textbox("q[2]"))。
如果,我们要定位“RubyforRails”那一行的textbox,即_textbox("q[1]")。
传统的元素识别会遇到多个相同属性元素的问题,即使是Xpath的定位方式也会因为在它前面加了一行新的数据而导致Xpath定位失败的情况。
这时Sahi可以通过_near这种方式来定位:
_textbox("q",_near(_cell("RubyforRails")))
当要定位checkbox时,我们又会发现,“RubyforRails”这一行有“Recommend”和“Alreadyown”两个checkbox,为了更准确地定位,我们可以结合_under,例如:
_checkbox(0,_near(_cell("RubyforRails")),_under(_cell("Recommend")))。
如果在整个页面中存在多个这样的表格,我们还可以用_in来进一步缩小范围,如:
_checkbox(0,_near(_cell("RubyforRails")),_under(_cell("Recommend")),
_in(_cell("Cost))).
同时值得一提的是,SahiAPI中的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.RefineScript过程的工作原理
录制的脚本都是指定元素并唯一操作的,这时就需要对代码进行重构,抽取出核心的功能块,对其中的元素进行参数化处理,以实现重用。
这样的数据可以从外部的DB或文件中读取而来。
与此同时,也可调用SahiAPI或外部Java等API实现特定的一些功能。
第三步:
回放
图6.Playback过程的工作原理
Sahi运行提炼好的脚本来自动化测试操作,并生成测试报告。
回页首
Sahi的安装部署与配置
Sahi虽然是Tyto公司的产品,但它的下载放在世界上最大的开源软件开发网站SourceForge上,可以通过点击这里下载。
图7.Sahi下载
默认推荐是下载 install_sahi_xxx.jar,这是一个可执行文件,包含了Sahi的安装器和Sahi工具及其源代码。
当然您也可以点击上图红框处“BrowseAllFiles”来选择历史版本和一些免安装压缩文件。
比如,选择只包含Sahi工具的 sahi_xxx.zip 文件,或者包含了Sahi和源代码的免安装压缩包文件sahi-src_xxx.zip。
一般建议选择推荐的Sahi安装包文件即可,这样可以免去一些设置操作,并可以选择是否安装源代码。
双击jar文件进行安装,如图:
图8.Sahi安装
安装过程非常简单,待安装完成后双击桌面图标打开Sahi程序。
打开程序先会出现一个SahiDashboard,它能自动开启Sahi代理服务来启动浏览器,而不需要繁琐的代理服务器设置操作。
当然如有需要,您也可以手动修改这些代理设置。
图9.SahiDashboard界面
Sahi会自动去侦探您系统里安装的一些浏览器,并在SahiDashboard上显示出来,如果发现有一些其他的浏览器未被准确侦探出来,您也可以点击下面的“Configure”来进行配置添加进来。
接下来,通过点击SahiDashboard上的浏览器图标按钮来启动相应浏览器。
图10.Sahi启动firefox浏览器
您可以输入起始测试的网页URL开始您的测试。
如果测试的目标URL是HTTPS协议的,也可以点击“SSLManager”来查看和管理SSL证书。
图11.SahiSSL管理界面
按住Alt键并双击页面,将弹出Sahi控制窗口,如图12:
这个窗口相当于Sahi的主控台,在这里我们可以来录制和回放Sahi脚本,并编辑和管理脚本信息。
图12.SahiController录制
在Record视图界面,输入一个脚本名称,点击“Record”,这时Sahi录制器便开始工作了。
把鼠标移到浏览器上的目标网页上,您的所有操作过程都将被记录下来。
您也可以自定义增加一个Assertion。
按住Ctrl键,把鼠标移动到目标网页的任意一个HTML元素,那么这个Accessor会自动出现在Sahi控制器中。
这时,便可以自定制对该元素的操作。
常用的操作有“点击”,“高亮”,“赋值等。
同时,您可以通过“AppendtoScript”按钮来加到脚本代码中。
录制完成后按“Stop”来结束整个过程。
图13.Sahi自动生成脚本精炼
图13是一个简单的Sahi自动录制过程得到的Sahi脚本代码。
其大致过程为:
通过XX搜索“sahi”关键字,校验Sahi官网的assert是否存在,点击进入Sahi官网后继续校验assert“CommunityForums”,点击进入。
通过前一节“SahiController录制”来完成这个操作过程,那么,您可以在默认目录“C:
\Users\IBM_ADMIN\sahi\userdata\scripts”中找到先前命名为“Test_sahi”的脚本文件,我们可以将这段代码进行一个精炼和丰富的过程,比如在点击“CommunityForums”链接前将它进行高亮操作:
_popup("SahiWebTestAutomationTool")_highlight(_link("CommunityForums"));
或者您想在Sahi脚本代码中调用内置的Java类,例如:
functionprintThroughJava(s){
java.lang.System.out.println("ThroughJava:
"+s);}
printThroughJava("Hithere");
“ThroughJava:
Hithere”将在sahi的命令行中输出。
图14.SahiController回放
回放的时候,只需要在Sahi控制台上切换到“Playback”tab页面,找到脚本存放的路径,下面就有开始、暂停和结束等按钮来进行操作。
需要注意的是,开始以前必须给它设置一个“StatURL”否则无法回放脚本。
脚本回放的时候,在“Statements”里可以看到脚本运行的日志,比如操作步骤和一些错误信息等。
通过点击右下角的“ViewLogs”可以查看详细的Sahi运行日志报告:
图15.Sahi日志报告
由图可见,这样自动录制生成的脚本代码都是Sahi代码,我们可以在实际的Java项目中调用这些Sahi代码,以实现重用。
其实,我们可以通过打开sahi/config/sahi.properties文件将其中属性设置为controller.mode=java来实现自动录制脚本的语言为Java。
值得注意的是,改为Java语言录制后的Sahi控制器和原来有所不同,它的界面更简洁,功能也更简单一些,没有了自动回放功能。
因为,这更多是为了自动生成一些简单的脚本,来提高开发人员的开发效率。
回页首
Sahi的语法与示例应用
Sahi脚本是基于JavaScript的,而Sahi脚本是通过代理解析的,并能够在rhinoJavaScript引擎中有效执行的。
除了变量前的强制符$,它和JavaScript基本很像。
Sahi操作的代码声明是一句以分号结尾的普通代码行,如:
_click(_link("Login"));
变量声明:
var$variableName=value;
或者先声明再赋值:
var$variableName;//declaration
$variableName=value;//assignment
所有的变量都是以$符号开头的,关键字var用于局部变量,如:
var$username="SahiTestUser";
var$password;//declaration;
$password=$username+"_password";//"SahiTestUser_password"
函数声明:
//function
declarationfunctionlogin($usr,$pwd){
_click(_link("Login"));
_setValue(_textbox("username"),$usr);
_setValue(_password("password"),$pwd);
_click(_submit("Login"));
}
//functioncall
login("sahi_user","secret");
在一个Sahi代码文件中可以通过_include来包含调用其他Sahi文件,如:
_include("includes/common_functions.sah");
由上面的语法可知,Sahi是由下划线开头,带上操作或HTML元素,非常简单,清晰易懂,这些API基本都是能够看字面就能理解它的功能。
Sahi的API主要可以分为3类:
浏览器访问API、浏览器操作API和混合API。
浏览器访问API:
用于访问浏览器上的元素,并通过代理来注入这些API到浏览器中去。
浏览器操作API:
主要来执行一些如点击、输入数据等操作,并在浏览器上声明这些元素的。
混合API:
是既能在浏览器又能在代理上用于处理异常和操作文件和数据库的。
由于Sahi对网页的访问方法的API很多,大家可以参考官方API文档进行学习。
由上可知,Sahi脚本都是很直接的声明和操作过程,在一个运行的代理上,由SahiDashboard来管理执行。
如果我们希望能够将我们的Sahi自动执行的过程与我们其他的项目功能模块进行集成,那么把这些脚本转换成Java代码,又能用独立运行,是一件两全其美的事。
接下来,本文将介绍一个用SahiJavaDriver来编写Sahi自动化脚本实现Web自动化测试的简单案例。
首先,将Sahi的开发库包文件sahi.jar加入到Java项目中,该文件位于Sahi安装路径下..\sahi\lib\下,接下来就可以参考Sahi的 JavaAPI 来开发自动化测试脚本。
下面是一个简单的案例脚本:
清单1.导入Sahi类包
importnet.sf.sahi.client.Browser;
importnet.sf.sahi.config.Configuration;
设置sahi安装路径和userdata路径
清单2.配置Sahi代理
StringsahiBase="C:
/Users/ADMIN/sahi/";
StringuserDataDirectory="C:
/Users/ADMIN/sahi/userdata";
Configuration.initJava(sahiBase,userDataDirectory);
您可以设置任意一种浏览器类型,也可以在sahi/userdata/config/browser_types.xml文件中自己创建定义
清单3.配置浏览器并启动
StringbrowserType="firefox";
Browserbrowser=newBrowser(browserType);
browser.open();
清单4.操作代码示例
browser.navigateTo("");
browser.textbox("user").setValue("test");
browser.password("password").setValue("secret");
browser.submit("Login").click();
browser.textbox("q").setValue("2");
browser.textbox("q[1]").setValue("9");
browser.textbox("q[2]").setValue("4");
browser.button("Add").click();
System.out.println(":
:
browser.textbox(\"total\").value()="+browser.
textbox("total").value());
browser.close();//closethebrowser
需要注意一点,除了Firefox浏览器,其他的浏览器都必须进行服务器代理配置,并在运行脚本前打开Sahi代理服务。
实际测试结果表明,Sahi代码简介,运行轻巧快速,而且它还能与外置的一些模块集成完成发送邮件,读取PDF文件等操作,功能非常完善。
回页首
结束语
综上所述,本文从当前Web自动化测试的困境出发,通过与其他开源Web自动化测试进行对比,介绍了Sahi的特性和优势。
主要从基于上下文页面识别机制和智能页面加载响应等待机制两方面进行阐述。
同时,详细介绍了Sahi的工作原理以及如何安装部署进行自动化测试开发的过程。
总之,Sahi提供了一套在多浏览器和多编程语言的开源自动化测试方案,解决了当前一些页面元素难找,页面响应不同步而导致测试失败的问题。
Sahi是一个能够快速部署,易于开发并且功能强大的开源Web自动化测试工具。
由于篇幅所限,本文不能对Sahi所有的功能进行一一阐述,希望有兴趣的朋友一起研究探讨。
参考资料
学习
∙参考 Sahi官网介绍,了解Sahi的最新特性介绍和注意项说明等内容。
∙参考 Sahi官方使用指南,获得Sahi最新版本的使用帮助。
∙进入 sourceforge网站,可以下载Sahi各种版本的安装文件和源代码。
∙developerWorksWebdevelopment专区:
通过专门关于Web技术的文章和教程,扩展您在网站开发方面的技能。
∙developerWorksAjax资源中心:
这是有关Ajax编程模型信息的一站式中心,包括很多文档、教程、论坛、blog、wiki和新闻。
任何Ajax的新信息都能在这里找到。
∙developerWorksWeb2.0资源中心,这是有关Web2.0相关信息的一站式中心,包括大量Web2.0技术文章、教程、下载和相关技术资源。
您还可以通过 Web2.0新手入门 栏目,迅速了解Web2.0的相关概念。
∙查看 HTML5专题,了解更多和HTML5相
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SahiPro 自动化 测试 资料