背景介绍
在软件业十分成熟的今天,敏捷(Agile)开发在业界日益流行,而面临的挑战也日益增多,不断变化的用户需求、缩短的开发周期、频繁的部署上线、复杂的产品架构和团队组织,如何继续保证软件的质量是一个不能回避的课题。
许多企业级规模的项目常常按照功能模块将庞大的团队分为多个独立的 Scrum 团队。在这种情况下,每个 Scrum 团队各自负责其所属功能模块的开发和测试。在 Scrum 团队中各种角色在不同的时间点有针对性不同的测试需求。其次,Build 部署以及测试频率大幅增加。测试类型和阶段也更加细化。
而现有的自动化测试,常常由独立的自动化测试团队来执行和维护。其他的 Scrum 团队成员除非十分了解自动化测试包的细节,否则无法按照自身多类型的测试需求来执行自动化脚本。并且有些项目自动化测试包涵盖了成百上千的测试用例,仅仅因为需要验证某个模块或某几个功能点是否成功而执行整个测试包不仅费时且没有必要。
本文针对以上涉及的问题,提出以下的解决方案:利用 Jenkins 和 TestNG 搭建“自助式”自动化测试平台,充分利用了 Jenkins 成熟的平台及其插件, 以及 TestNG 对选择测试用例的内在支持。
该平台具有以下优点:
基于成熟的测试工具。Jenkins 是目前业内最流行的快速持续集成工具之一, 其稳定的性能和丰富的扩展性, 使得很多的团队都优先选择它作为项目的主要支持工具。TestNG 作为一款强大的 Java 测试框架,其在 Junit,NUnit 的基础上做了广泛的增强,从单元测试、功能测试到集成测试,都能提供良好的支持。这两个工具一方面功能稳定,有大量的实际使用案例和文档支持,另一方面由于其属于主流工具,很多团队已经有过相应的经验,可以大大缩短学习曲线和成本。
灵活地定制自动化测试。团队成员通过登陆平台 Web 界面,按照需求任意选择部署在平台上的自动化测试包,目标测试环境,测试集和测试用例。提交定制化的自动化执行请求,执行结束系统自动发邮件通知。不同人员的请求可以实现并行执行。
所有的自动化执行历史记录都可以保存在平台上。可以通过 Web 的方式随时查阅。
Jenkins 支持丰富的插件,用户可以按照需求进行选择安装和配置,以实现生成执行状态表格,自动部署/更新自动化测试包等高级功能。
方案设计概述
本文将使用一个简化后的“自助式”自动化测试应用场景以介绍本方案的核心设计思想。首先列举出该平台需要满足的各项需求:
用户权限管理,用户可以使用自己的帐号进行登陆访问,提交请求。
用户根据自身的具体需求,灵活的选择已经部署在平台上的自动化测试包,并且可以对测试环境,测试集和测试用例进行定制化选择。
多用户并发请求的执行,彼此之间相互独立,互不干扰
请求执行完毕后的 email 通知
执行状态和历史纪录的查询
用户体验良好的 Web 页面访问模式
针对以上的需求,我们可以用图 1 来简要说明该方案的主要功能组件以及彼此之间的联系。
软件测试交流群:747981058
图 1. 平台主要功能组件
Web 前端:Jenkins 平台自身提供一套统一标准的 web 界面,用户可以根据需求通过其完成各种系统配置,任务提交,查询等工作。
用户登录与权限控制:Jenkins 平台默认支持若干种用户验证机制,比如 LDAP, Jenkins own database, servlet container authenticate 等等,也可以通过其它插件实现更加复杂的验证。本文将采用最简单的 Jenkins own database 来管理帐户的权限。
任务请求定制化模块:一般来说,Jenkins 大部分情况下只需要完成预定义执行内容的任务。所以在参数定制化请求方面只具备最基本的支持。为了满足更好的“自助式”的用户体验和需求,实现预定义任务对不同用户需求的灵活响应,我们在还需要借助一款 Jenkins 插件“Extended Choice Parameter plugin”的辅助。利用该插件,用户可以在提交请求时在页面上输入多选式参数,这些动态输入将以环境变量的形式传递给执行模块影响最终请求的行为。
任务提交与执行模块:Jenkins 支持稳定的任务管理机制,管理员可以通过配置使同一个任务支持并发响应多个请求,彼此之间独立且互不干扰。
任务状态与历史纪录查询:对于任务请求的状态信息跟踪,Jenkins 默认只支持控制台输出的监控,而且每一次请求记录,Jenkins 只提供一个数字 ID 和时间戳进行标识。对于一个多用户的自助式平台这是远远不够的。我们利用插件“HTML Publisher Plugin”,保存请求生成的 html 格式的运行报告。这样可以在页面上对任意历史请求的执行纪录和报告进行查询和检索;同时利用“EnvInject Plugi