用 STAF+Selenium 实现并行的自动化测试框架

发表于:2012-03-16来源:IBM作者:冯悦勤梁琳点击数: 标签:
本文的意图是通过一个新的视角颠覆传统理念上的串行自动化测试方式,向读者详细介绍了利用 STAF 以及 Selenium 实现的并行式的自动化测试框架,以及为整个项目所带来的优势 。

  本文的意图是通过一个新的视角颠覆传统理念上的串行自动化测试方式,向读者详细介绍了利用 STAF 以及 Selenium 实现的并行式的自动化测试框架,以及为整个项目所带来的优势 。

  Agile 中的自动化测试

  Agile 是一种以人为核心、迭代、循序渐进的开发方法。它的目标就是尽早、持续地交付有价值的软件。随着 Agile 越发成熟,越来越多的团队开始尝试采用这种开发模式。

  在 Agile 中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。这意味着开发团队的开发周期大大缩短,并且测试人员需要在有限的时间之内完成测试计划并提供足够多的回归测试保证交付产品的产品质量。依赖手工测试完成充分的测试很不现实,GUI 自动化测试此时能发挥重要的作用。通过在每个迭代中频繁的执行自动化脚本来保证产品有足够的回归测试。

  GUI 自动化测试脚本完全模拟手工操作完成功能测试,单个脚本的运行时间远远多于 API 测试。当脚本越来越多的时候,传统的串行脚本运行消耗的时间相应的增加,便不能达到快速响应的目的。如何能够缩短整个 testsuite 的运行时间以尽快得到测试结果?并行自动化测试需求显而易见。

  在本文中,我们将详细介绍 LotusLive iNotes 并行自动化测试框架的实践,通过充分利用各种测试资源,并有效的提高自动化运行效率以满足快速交付的要求。

  回页首

  并行的自动化测试框架的诞生

  在传统的情况下,我们对脚本的并行运行通常是:

  把需要运行的整个自动化测试 testsuite 拆分成几块小的 testsuite

  每块小的 testsuite 提供不同的测试用户数据(在 Lotuslive iNotes 中指不同的测试用户)

  每块小的 testsuite 分别部署到不同的自动化测试环境上运行

  我们可以看到在这种方式下,总体运行时间的长短取决于需要最长时间的 testsuite,那么我们在拆分 testsuite 的时候需要了解每个脚本运行的时间。其次,每个小的 testsuite 必须提供最大的用户数量。再次,由于用户数量的限制,我们在划分 testsuite 的时候有可能不会使用到所有的自动化测试资源,测试资源空闲的时间比较多,利用不充分。最后,每个 testsuite 最后返回的结果需要进一步地分析统计才能在最终的测试报告中使用。有没有办法能够既实现并行又能最充分地利用自动化测试资源并且生成一个完整的测试报告呢?我们的解决方案如下:

  一个 testsuite,多线程运行脚本。TestCaller 会将 testsuite 中所有要运行的自动化测试脚本,按照顺序多线程并发启动。

  自动化资源的高效利用。单个脚本启动后请求运行所需要的自动化资源,在完成时释放掉所有的资源。测试资源包括但不限于测试机(物理机或虚机)信息,测试用户帐号信息等。

  测试执行工具,实际执行 GUI 自动化测试。在 LotusLive iNotes 中使用的是 selenium。各项目可以根据需要选择合适自己的工具。

  回页首

  并行的自动化测试方案的实现

  LotusLive iNotes 为一款在线网络电子邮件服务,其功能涵盖电子邮件、行程表、联络人名单、多层次管理等等。根据不同的角色,用户可以使用不同的功能。

  下图展示了完整的 LotusLive iNotes 自动化测试框架。并行的自动化测试(以下称 Automation Solution)属于其中的一部分。对于 Automation Solution 之外的其他工具,读者可以根据自己项目的实际情况选择其他产品

  图 1. 拓扑结构(查看大图)

拓扑结构

  上图中, Lotus Automator 做为启动和管理自动化测试任务的工具,并管理所有使用的测试资源(包括用户资源和自动化测试环境资源)。终端用户(End Users)首先向 Lotus Automator 提交一个请求(其中包含了需要运行的一系列脚本), 然后 Lotus Automator 给 Automation Solution 发送一个测试任务。Automation Solution 在收到任务之后,根据预估计的最大线程数(由用户数量总数和测试环境资源总数决定),依次启动多个脚本。脚本启动后从资源池中申请所需要的测试环境以及用户账号等测试资源(注 : 本方案中使用 Staf 的 Respool 服务统一管理资源);申请到必要的资源后,脚本会执行实际的测试步骤。单个脚本运行完成时,会释放掉所有的资源并由 Automation Solution 实时把结果加入报告中。整个过程对于终端用户都是透明的,用户不需要关心自己使用到了具体哪个资源以及这些资源的实时占用情况。

  下面我们看一下 Automation Solution 的具体实现细节:

  图 2. 框架结构(查看大图)

框架结构

  Parallel Caller,如上图,它是本自动化测试框架的核心部分,负责启动和管理并行的自动化测试,并收集和生成最后的测试报告。

  STAF ResPool 服务,STAF/STAX 是由 IBM 开发的自动化测试运行环境,由于其跨平台和扩展性强的特点,在各种测试工作中被越来越多的使用。在本自动化测试框架中我们只使用到它其中的 Respool 服务,用来管理测试资源的申请和释放。

  Selenium:Selenium 是 ThroughtWorks 公司一个强大的开源 Web 功能测试工具系列,包括 selenium-IDE、selenium-RC、selenium-Webdriver 以及 selenium-Grid。在本自动化测试框架中我们可以灵活组合应用到其中的 selenium-RC、selenium-Webdriver 和 selenium-Grid。

  多任务支持

  该自动化解决方案支持并行的自动化测试,并且能够高效的使用测试资源以在最快的速度下完成自动化测试任务。在这个自动化测试框架中,因为启动的最大线程数和各种测试资源的数量都是有关联的,我们把线程池的线程数做成了可配置的,这样我们就可以根据测试资源数量来灵活控制并行测试的线程数。

  从下面的流程图中我们可以看到该解决方案的工作原理:

  开始测试

  读取配置文件,创建一个线程池

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