使用Sahi测试Dojo应用(2)

发表于:2012-04-13来源:InfoQ作者:沈锐点击数: 标签:Sahi
录制标签页 图4.Sahi控制器 录制标签页 输入文件路径后点录制便开始录制,点停即停止录制,非常简单。标签页的中部是一个对象识别器,在页面上按住

  录制标签页

  图4.Sahi控制器 – 录制标签页

  输入文件路径后点“录制”便开始录制,点“停”即停止录制,非常简单。标签页的中部是一个对象识别器,在页面上按住CTRL键,并将鼠标左键悬停在某个元素上,对象识别器就显示出能够识别该元素的Sahi语句。另外,你可以在下方的输入框中直接输入Sahi语句并查看运行结果。

  回放标签页

  图5.Sahi控制器 – 回放标签页

  回放标签页不仅能够一次性运行脚本,还可以单步运行,甚至可以中途暂停,这给调试代码带了很大便利。点击下方的链接可以查看解析后的脚本以及运行日志等。

  4. Sahi脚本

  Sahi脚本基于Javascript,不同的是Sahi脚本中所有的变量必须带有$前缀。Sahi代理服务器负责将用户编写的Sahi脚本解析成Javascript并在Rhino引擎中执行(Rhino是一个开源的使Javascript运行于JVM的项目)。所以,Sahi脚本能够执行文件甚至数据库操作也就不足为怪了。Sahi脚本定义.sah文件中,但是所有直接访问DOM节点的函数必须定义在browser tag中。

  二.使用Sahi脚本测试Dojo应用

  下面与大家分享一些我个人使用Sahi测试Dojo应用的经验。为了使示例代码能够被读者方便地运行,选取http://demos.dojotoolkit.org/demos/form/demo.html 假设为我们将要测试的应用。这是一个用来演示Dojo表单Widget的页面。

  1. 如何运行示例代码

  下载及安装Sahi(http://sahi.co.in/w/using-sahi)

  下载sahidojodemo.zip并解压缩到Sahi的userdata/scripts下面。解压后应该下面这个样子。

  /userdata/scripts/sahidojodemo/appobjs/JobAppFormPage.sah

  /userdata/scripts/sahidojodemo/tasks/JobAppFormTasks.sah

  /userdata/scripts/sahidojodemo/testcases/JobAppFormTests.sah

  /userdata/scripts/sahidojodemo/testcases/myapp.suite

  /userdata/scripts/sahidojodemo/testcases/testdata.csv

  /userdata/scripts/sahidojodemo/core.sah

  /userdata/scripts/sahidojodemo/run.sh

  启动Sahi代理服务器。

  运行Sahi的bin目录下的sahi.sh脚本,或者dashboard.sh也可以启动Sahi 代理服务器(该脚本用来启动Sahi Dashboard,同时启动Sahi代理服务器)。建议启动dashboard,这样你能清楚地看出哪些浏览器被Sahi探测到了。

  如果Sahi Dashboard中显示了Chrome,你可以直接运行sahidojodemo下的run.sh。否则,你需要把run.sh中的chrome替换成你系统中存在的浏览器,比如firefox。

  如果一切正常你会看到Dojo的Job Form Application应用被打开,然会进行了一系列操作后关掉。这时,如果一些正常,Sahi的控制台上会显示"Success"。如果失败了,你可以去sahi/userdata/logs/playback下面查看日志。

  2. 设计原则

  接下来介绍一下我用Sahi测试Dojo应用时遵循的几个原则。

  1. 面向对象

  面向对象早已不是什么新鲜事物。其实,UI自动化测试程序直觉上来讲可以采用过程式的编程模式,因为它本身就是将很多行为串接起来。为什么在测试Dojo应用时要使用面向对象的理念?原因很简单,因为Dojo Widget本身就采用了面向对象的思想。因此,在我的自动化测试框架中,每个Dojo Widget都对应于一个Javascript的“类”,不仅封装了DOM结构而且更便于代码重用。

  2. 采用IBM框架(之前叫ITCL - IBM Test Community Leadership)

  从事Web自动化测试的读者恐怕对IBM框架不会感到陌生。IBM框架由三层组成:应用对象、任务和测试用例。潜在于应用对象、任务和测试用例包之下的基本原理是:

  层次化的体系架构

  将“做什么”与“如何做”分离开来

  代码重用

  一致和清晰的组织结构

  快速增强的能力

  迅速的调试

  有效地组织文件

  启用协作

  学习他人

  下面是对应用对象、任务和测试用例的解释说明:

  应用对象:储存有关你的应用程序中的GUI元素信息。同时在这里也可以编写你的Getter 方法,这些 Getter 方法可以返回对象,使 调用者能够对这些GUI元素进行查询和操作。一般情况下,这些方法在Task层中进行调用。

  任务:在这里你将编写可重用的方法,这些方法在你的应用程序中执行通用功能。同时在这里,你将编写可以处理和查询复杂的特定应用程序控件的方法。在任务中的方法可以被测试用例调用。

  测试用例:导航一个应用程序,验证其状态,并记录其结果的方法。

  3. 借助Label识别元素

  通常页面上每个元素都会有一个label并且它是“可见”的。所谓“可见”,是指label的值是不需要借助于工具直接能看到的。例如id、name等,必须通过查看源码或者一定的工具,如Firebug查看其属性值。因此通过借助label的元素识别方法可以提高开发效率(因为你不在需要去用工具查看元素属性值了)。

  3. 代码详解

  三个目录appobjs,tasks以及testcases即是IBM框架中的三层架构,其中的JobAppFormPage.sah,JobAppFormTasks.sah以及JobAppFormTests.sah分别是应用对象、任务和测试用例程序文件(Sahi脚本)。

  Dojo Widget的封装

原文转自:http://www.ltesting.net