使用 Sahi 实现 Web 自动化测试

发表于:2017-7-25 16:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:杨晓波    来源:IBM

分享:
  下面,本文将对这三个过程进行详细说明。
  第一步:录制
  
图 4. Recording 过程的工作原理
  Sahi 是通过运行为一个代理服务器,并通过设置浏览器代理为 Sahi 服务器。这样 Sahi 的脚本就能够通过 request 请求来注入到 JavaScript 里以访问 Web 页面中的元素。如图,可以很清晰的看到,Sahi 就是 Web 浏览器和 Web 服务器之间的一个中间代理。
  第二步:精炼脚本
  图 5. Refine Script 过程的工作原理
  录制的脚本都是指定元素并唯一操作的,这时就需要对代码进行重构,抽取出核心的功能块,对其中的元素进行参数化处理,以实现重用。这样的数据可以从外部的 DB 或文件中读取而来。与此同时,也可调用 Sahi API 或外部 Java 等 API 实现特定的一些功能。
  第三步:回放
  图 6. Play back 过程的工作原理
  Sahi 运行提炼好的脚本来自动化测试操作,并生成测试报告。
  Sahi 的安装部署与配置
  Sahi 虽然是 Tyto 公司的产品,但它的下载放在世界上最大的开源软件开发网站 SourceForge 上,可以通过点击这里下载。
  图 7. Sahi 下载
  默认推荐是下载 install_sahi_xxx.jar,这是一个可执行文件,包含了 Sahi 的安装器和 Sahi 工具及其源代码。当然您也可以点击上图红框处“Browse All Files”来选择历史版本和一些免安装压缩文件。比如,选择只包含 Sahi 工具的 sahi_xxx.zip 文件,或者包含了 Sahi 和源代码的免安装压缩包文 件sahi-src_xxx.zip。
  一般建议选择推荐的 Sahi 安装包文件即可,这样可以免去一些设置操作,并可以选择是否安装源代码。双击 jar 文件进行安装,如图:
  图 8. Sahi 安装
  安装过程非常简单,待安装完成后双击桌面图标打开 Sahi 程序。打开程序先会出现一个 Sahi Dashboard,它能自动开启 Sahi 代理服务来启动浏览器,而不需要繁琐的代理服务器设置操作。当然如有需要,您也可以手动修改这些代理设置。
  图 9. Sahi Dashboard 界面
  Sahi 会自动去侦探您系统里安装的一些浏览器,并在 Sahi Dashboard 上显示出来,如果发现有一些其他的浏览器未被准确侦探出来,您也可以点击下面的“Configure”来进行配置添加进来。
  接下来,通过点击 Sahi Dashboard 上的浏览器图标按钮来启动相应浏览器。
  图 10. Sahi 启动 firefox 浏览器
  您可以输入起始测试的网页 URL 开始您的测试。如果测试的目标 URL 是 HTTPS 协议的,也可以点击“SSL Manager”来查看和管理 SSL 证书。
  图 11. Sahi SSL 管理界面
  按住 Alt 键并双击页面,将弹出 Sahi 控制窗口,如图 12:
  这个窗口相当于 Sahi 的主控台,在这里我们可以来录制和回放 Sahi 脚本,并编辑和管理脚本信息。
  图 12. Sahi Controller 录制
  在 Record 视图界面,输入一个脚本名称,点击“Record”,这时 Sahi 录制器便开始工作了。把鼠标移到浏览器上的目标网页上,您的所有操作过程都将被记录下来。您也可以自定义增加一个 Assertion。按住 Ctrl 键,把鼠标移动到目标网页的任意一个 HTML 元素,那么这个 Accessor 会自动出现在 Sahi 控制器中。这时,便可以自定制对该元素的操作。常用的操作有“点击”,“高亮”,“赋值等。同时,您可以通过“Append to Script”按钮来加到脚本代码中。录制完成后按“Stop”来结束整个过程。
  图 13. Sahi 自动生成脚本精炼
  图 13 是一个简单的 Sahi 自动录制过程得到的 Sahi 脚本代码。其大致过程为:通过百度搜索“sahi”关键字,校验 Sahi 官网的 assert 是否存在,点击进入 Sahi 官网后继续校验 assert“Community Forums”,点击进入。通过前一节“Sahi Controller 录制”来完成这个操作过程,那么,您可以在默认目录“C:\Users\IBM_ADMIN\sahi\userdata\scripts”中找到先前命名为“Test_sahi”的脚本文件,我们可以将这段代码进行一个精炼和丰富的过程,比如在点击“Community Forums”链接前将它进行高亮操作:
  _popup("Sahi Web Test Automation Tool")_highlight(_link("Community   Forums"));
  或者您想在 Sahi 脚本代码中调用内置的 Java 类,例如:
  functionprintThroughJava(s){java.lang.System.out.println("Through Java: "+s);}  printThroughJava("Hi there");
  “Through Java: Hi there”将在 sahi 的命令行中输出。
  图 14. Sahi Controller 回放
  回放的时候,只需要在 Sahi 控制台上切换到“Playback”tab 页面,找到脚本存放的路径,下面就有开始、暂停和结束等按钮来进行操作。需要注意的是,开始以前必须给它设置一个“Stat URL”否则无法回放脚本。脚本回放的时候,在“Statements”里可以看到脚本运行的日志,比如操作步骤和一些错误信息等。
  通过点击右下角的“View Logs”可以查看详细的 Sahi 运行日志报告:
  图 15. Sahi 日志报告
  由图可见,这样自动录制生成的脚本代码都是 Sahi 代码,我们可以在实际的 Java 项目中调用这些 Sahi 代码,以实现重用。其实,我们可以通过打开 sahi/config/sahi.properties 文件将其中属性设置为 controller.mode=java 来实现自动录制脚本的语言为 Java。值得注意的是,改为 Java 语言录制后的 Sahi 控制器和原来有所不同,它的界面更简洁,功能也更简单一些,没有了自动回放功能。因为,这更多是为了自动生成一些简单的脚本,来提高开发人员的开发效率。
  Sahi 的语法与示例应用
  Sahi 脚本是基于 JavaScript 的,而 Sahi 脚本是通过代理解析的,并能够在 rhino JavaScript 引擎中有效执行的。除了变量前的强制符$,它和 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"));
  }
  // function call
  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 脚本都是很直接的声明和操作过程,在一个运行的代理上,由 Sahi Dashboard 来管理执行。如果我们希望能够将我们的 Sahi 自动执行的过程与我们其他的项目功能模块进行集成,那么把这些脚本转换成 Java 代码,又能用独立运行,是一件两全其美的事。
  接下来,本文将介绍一个用 Sahi Java Driver 来编写 Sahi 自动化脚本实现 Web 自动化测试的简单案例。
  首先,将 Sahi 的开发库包文件 sahi.jar 加入到 Java 项目中,该文件位于 Sahi 安装路径下..\sahi\lib\下,接下来就可以参考 Sahi 的 Java API 来开发自动化测试脚本。下面是一个简单的案例脚本:
  清单 1. 导入 Sahi 类包
  import net.sf.sahi.client.Browser;
  import net.sf.sahi.config.Configuration;
  设置 sahi 安装路径和 userdata 路径
  清单 2. 配置 Sahi 代理
  String sahiBase = "C:/Users/ADMIN/sahi/"; 
  String userDataDirectory = "C:/Users/ADMIN/sahi/userdata"; 
  Configuration.initJava(sahiBase, userDataDirectory);
  您可以设置任意一种浏览器类型,也可以在 sahi/userdata/config/browser_types.xml 文件中自己创建定义
  清单 3. 配置浏览器并启动
  String browserType = "firefox";
  Browser browser = new Browser(browserType);
  browser.open();
  清单 4. 操作代码示例
  browser.navigateTo("http://sahi.co.in/demo/training/");
  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();// close the browser
  需要注意一点,除了 Firefox 浏览器,其他的浏览器都必须进行服务器代理配置,并在运行脚本前打开 Sahi 代理服务。
  实际测试结果表明,Sahi 代码简介,运行轻巧快速,而且它还能与外置的一些模块集成完成发送邮件,读取 PDF 文件等操作,功能非常完善。
  结束语
  综上所述,本文从当前 Web 自动化测试的困境出发,通过与其他开源 Web 自动化测试进行对比,介绍了 Sahi 的特性和优势。主要从基于上下文页面识别机制和智能页面加载响应等待机制两方面进行阐述。同时,详细介绍了 Sahi 的工作原理以及如何安装部署进行自动化测试开发的过程。总之,Sahi 提供了一套在多浏览器和多编程语言的开源自动化测试方案,解决了当前一些页面元素难找,页面响应不同步而导致测试失败的问题。Sahi 是一个能够快速部署,易于开发并且功能强大的开源 Web 自动化测试工具。由于篇幅所限,本文不能对 Sahi 所有的功能进行一一阐述,希望有兴趣的朋友一起研究探讨。
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号