Twist是一个基于Eclipse开发的自动化测试平台,它是ThoughtWorks公司的一款商业软件。Sahi是一个Web自动化工具,有Tyto公司创建,具有免费版和专业版两个版本。作者将在本文中简单介绍一下这两个工具,以及基于它们搭建的轻量级Web自动化测试框架,最后重点跟读者分享一些个人使用的经验和技巧。
在介绍Sahi之前,首先简单描述一下作者参与的项目。这个项目是为一家公司做商业应用的实施。由于时间紧迫,测试人员较少,大部分时间都是在针对主要功能做手工测试。为了减少一些重复的手工劳动,我们决定搭建一套Web自动化框架。这个框架需要符合以下条件:1、搭建迅速,易于维护;2、使用简单,易学易用,降低测试人员的学习成本。3、由于业务流程比较复杂,希望在测试用例失败的时候能够方便测试人员快速准确的定位并重现问题。考虑到以上几点,再加上这个项目只需要对一些常用重复的流程进行自动化,我们放弃了以前搭建过的一套比较成熟的测试框架,转而决定使用Sahi和Twist来搭建一个轻量级的Web自动化框架。
Sahi是一个比较成熟的Web自动化工具,使用它可以轻松的对Web页面操作进行录制和回放。作者曾经使用过一段时间的Selenium,就个人经验而言,Sahi在元素定位,页面等待上更有优势一些。Twist是一个可协作的功能测试平台,之所以称为平台,是因为它提供了很多有用的功能来帮助测试人员编写和管理测试用例。Twist有个很好的特性是同时支持用户手工和自动化运行测试用例。这点可以让我们在得到功能需求后,先在Twist里建好测试场景,并根据业务逻辑写下测试步骤,等到被测功能比较稳定后,再决定自动化哪些测试用例,而那些业务逻辑和自动化脚本可以很好的在Twist中被关联起来,如图1所示。
图1 Twist中的测试场景
在结合Twist的一些特性和Sahi的录制回放功能后,我们将测试框架设计如下图所示:
图2 基于Sahi和Twist的Web自动化测试框架
这个框架并没有什么特别复杂的地方,基本就是将Sahi中的Java API进行封装,然后使用Twist中的已有功能来对系统进行自动化测试。下载两个工具后,就可以进行测试场景的编写和自动化。下面是作者在这个项目中总结的一些经验和技巧:
1、把握好测试场景描述的粒度。在Twist的场景中,应尽量使用业务语言来描述测试步骤,而避免使用操作性的语言。在Twist帮助文档中有一章高级指导(Advanced Tutorial),其中专门提到在不牺牲可读性的前提下,应最大限度的用抽象概念来描述步骤。这里的抽象概念就是指的具体业务逻辑。但就个人经验而言,抽象还是有度的,太抽象的描述复用性就不够好了。读者可通过多尝试多思考来把握这个描述的粒度。
2、为测试场景加标签并按顺序为其命名。可能大家比较习惯于为一个待测功能单独建立一个文件夹,并将测试场景都放在里边,但由于在Twist视图下,只对Scenario目录下的场景可见,如果在其目录下建立子目录,将无法使用Filter的功能。所以建议为每一个场景加上标签,可以是功能的编号或名称,这样就可以分类查看和运行了。另外,在Twist视图中,所有的场景是按名称的字母序来排列的,故建议在场景名称前加01,02,......。(eg.01Login,02SearchBook.加0是因为根据字母序11是在1和2之间的)这样便于查找以及管理场景执行的先后顺序。
3、当用Sahi定位动态生成的页面元素时,应使用in,near等方法配合别的页面元素来进行定位。比如测试步骤为点击一个数据列表中某一行里的图片链接,如果使用Sahi录制,生成出来的元素ID可能跟HTML里的元素ID一样,也可能是一串很长的数字,可读性较差,测试代码也较难维护,这时可以先根据序列号或者标题字符串等定位到该行的某一个位置,再结合Sahi中in和near方法,定位到这行上的图片链接。
4、需要用多组数据来测试同一场景时,尽量使用Twist中提供的Data Table功能。在Twist里,可以将来自不同数据源的数据导入到测试中,并且支持选择每次需执行的几组数据。
5、完善错误处理机制。在场景运行失败的时候,可加入一段代码,截屏保存当时的出错页面,同时,将被测系统的日志文件截取部分放到指定文件夹,这样就能更加方便地分析定位问题。(在Sahi专业版中可直接使用takeSnapShot()方法进行截屏,如果使用免费版,可使用其它方法实现,例如类java.aw.Robot中的createCapture()方法)
6、导出build.xml文件,整合其它工具。在Twist中,我们可以导出ant文件,并且编写我们需要的task,例如在不同浏览器上运行,或者是运行某一标签的测试场景等,这样就可以在不打开Twist的情况下,通过运行命令行的方式来执行测试。这些命令还可以放到其它工具中进行整合,例如持续集成工具Hudson,可在build完成后自动运行一些基础测试。
总的来说,Twist和Sahi是比较适合一个小型测试团队进行自动化测试的。Twist能够有效地减少搭建自动化测试框架的时间,让测试人员更多的关注在业务逻辑上面,有兴趣的读者可以下载Twist的试用版进行尝试。