集成 Jenkins 和 TestNG 实现自助式自动化测试平台

发表于:2017-12-26 14:42

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

 作者:鲁晓丹和刘婵    来源:51Testing软件测试网采编

  背景介绍
  在软件业十分成熟的今天,敏捷(Agile)开发在业界日益流行,而面临的挑战也日益增多,不断变化的用户需求、缩短的开发周期、频繁的部署上线、复杂的产品架构和团队组织,如何继续保证软件的质量是一个不能回避的课题。
  许多企业级规模的项目常常按照功能模块将庞大的团队分为多个独立的 Scrum 团队。在这种情况下,每个 Scrum 团队各自负责其所属功能模块的开发和测试。在 Scrum 团队中各种角色在不同的时间点有针对性不同的测试需求。其次,Build 部署以及测试频率大幅增加。测试类型和阶段也更加细化。
  而现有的自动化测试,常常由独立的自动化测试团队来执行和维护。其他的 Scrum 团队成员除非十分了解自动化测试包的细节,否则无法按照自身多类型的测试需求来执行自动化脚本。并且有些项目自动化测试包涵盖了成百上千的测试用例,仅仅因为需要验证某个模块或某几个功能点是否成功而执行整个测试包不仅费时且没有必要。
  本文针对以上涉及的问题,提出以下的解决方案:利用 JenkinsTestNG 搭建“自助式”自动化测试平台,充分利用了 Jenkins 成熟的平台及其插件, 以及 TestNG 对选择测试用例的内在支持。
  该平台具有以下优点:
  ●基于成熟的测试工具。Jenkins 是目前业内最流行的快速持续集成工具之一, 其稳定的性能和丰富的扩展性, 使得很多的团队都优先选择它作为项目的主要支持工具。TestNG 作为一款强大的 Java 测试框架,其在 Junit,NUnit 的基础上做了广泛的增强,从单元测试功能测试到集成测试,都能提供良好的支持。这两个工具一方面功能稳定,有大量的实际使用案例和文档支持,另一方面由于其属于主流工具,很多团队已经有过相应的经验,可以大大缩短学习曲线和成本。
  ●灵活地定制自动化测试。团队成员通过登陆平台 Web 界面,按照需求任意选择部署在平台上的自动化测试包,目标测试环境,测试集和测试用例。提交定制化的自动化执行请求,执行结束系统自动发邮件通知。不同人员的请求可以实现并行执行。
  ●所有的自动化执行历史记录都可以保存在平台上。可以通过 Web 的方式随时查阅。
  ●Jenkins 支持丰富的插件,用户可以按照需求进行选择安装和配置,以实现生成执行状态表格,自动部署/更新自动化测试包等高级功能。
  方案设计概述
  ●本文将使用一个简化后的“自助式”自动化测试应用场景以介绍本方案的核心设计思想。首先列举出该平台需要满足的各项需求:
  ●用户权限管理,用户可以使用自己的帐号进行登陆访问,提交请求。
  ●用户根据自身的具体需求,灵活的选择已经部署在平台上的自动化测试包,并且可以对测试环境,测试集和测试用例进行定制化选择。
  ●多用户并发请求的执行,彼此之间相互独立,互不干扰
  ●请求执行完毕后的 email 通知
  ●执行状态和历史纪录的查询
  ●用户体验良好的 Web 页面访问模式
  针对以上的需求,我们可以用图 1 来简要说明该方案的主要功能组件以及彼此之间的联系。
  图 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 Plugin”,“Build User Vars Plugin”和“Build Name Setter Plugin”为每一次请求动态生成包含用户姓名等多方面信息的 ID 以区分,大大方便信息的管理和测试结果数据的追溯。
  Email 提醒:Jenkins 默认只支持最基本的 email 通知机制。我们使用插件“Email-ext plugin”进行扩展,以支持更加强大的通知机制,灵活定制 email 标题和内容, 添加附件,定制收件人名单等。
  TestNG 自动化测试框架:TestNG 是一款强大的自动化测试框架,适用于 Unit 测试,功能测试,集成测试等多类型的自动化测试。其拥有一整套成熟的 API 和 Annotation, 支持数据驱动,测试周期和依赖控制,多线程执行等一系列特性。本方案采用 TestNG 还因为其具有对测试脚本集进行灵活选择的特性。TestNG 利用 xml 文件来组织测试脚本集,在运行的时候,我们可以通过参数指定需要运行的脚本,把 Jenkins 任务与建立在这一框架之上的自动化测试包进行连接,就可以轻松实现用户在页面上选择测试集。
  平台的实现与配置
  本章介绍该平台具体的实现和配置流程,主要包含以下步骤:
  1.安装 Jenkins 及必要的第三方插件
  2.建立新用户及配置权限
  3.为自动化测试建立和配置新任务
  a.配置用户输入定制化选项
  b.配置执行报告保存
  c.配置 email 提醒
  Jenkins 及相关插件的安装 (本文以 jenkins-ver.1.524 为例)
  Jenkins 是一款成熟强大的开源软件,对大部分主流的操作系统平台(LinuxWindows, Mac OS)都提供支持,在其官方网站上可以直接下载到最新的安装包和每一个平台的安装流程文档。
  安装完毕之后,我们可以以后台服务的形式将其启动,这个时候我们就可以用浏览器通过 http://localhost:8080 访问其默认主页面进行平台定制化配置。
  图 2.Jenkins 主页面
  初始安装后的 Jenkins 并没有默认管理员帐户,第一次打开主页面就可以直接对其进行系统配置,在页面的左端可以通过点击“Manage Jenkins”打开 Jenkins 系统管理界面。
  图 3.Jenkins 管理界面
  
  我们可以通过“Manage Plugins”来安装第三方插件。其中本方案建议安装的六个插件分别是“Extended Choice Parameter plugin”,“EnvInject Plugin”,“Build User Vars Plugin”,“Build Name Setter Plugin”,“HTML Publisher Plugin”和“Email-ext plugin”。
  图 4.Jenkins 插件管理
  安装插件的方法十分简单,在“Manage Plugins”页面的“Available”选项卡中,勾选所需要的目标插件,点击页面下方的相应安装按钮即可。
  新建用户和配置权限
  前面我们提到 Jenkins 在初次安装时默认并没有用户验证的环节,所有打开主页面的用户都具有系统管理员权限。对于一个要在正式项目中被整个团队所公用的测试平台,我们需要严格的建立用户验证和权限配置。
  首先在“Manage Jenkins ->Configure Global Security”页面中勾选“Enable security”。页面刷新之后在“Security Realm”项选择“Jenkins' own user database”,“Authorization”项选择“Matrix-based security”,同时暂时赋给 Anonymous“Overall Admin”权限. 每一个项目也可以根据自身的需要选择其它的认证方式。
  图 5. 安全管理
  保存设置之后,回到 Jenkins 主页面,此时我们点击右上角 sign up 链接可以进入创建用户页面,输入新建用户的基本信息。通过这种方式可以为需要使用该平台的所有成员创建属于他们自己的专用账号。
  图 6. 帐号创建
  新建账号完毕之后,用专门为管理员创建的账号重新登陆,再次进入“Manage Jenkins ->Configure Global Security”,为我们刚才创建的团队成员账号设置权限,同时禁用 Anonymous 的所有权限,具体方式如图 7 所示,保存之后即可生效。
  图 7. 权限配置
  为自动化测试建立和配置新任务。当以上工作都准备完毕之后,就可以开始在 Jenkins 平台上为自动化测试创建新的任务。首先在主界面的左上方点击“New Job”, 选择“Build a free-style software project”类型,并且提供一个合适的任务名如“ProjectA RESTAPI automation”。
  图 8. 新 Job 创建
  点击 OK 之后就可以开始对 Job 内容进行定义和配置。传统的 Jenkins 平台应用主要集中在持续集成(CI)领域,所以在配置页面提供了大量的关于源代码获取,Build 创建等传统配置选项。而本文从全新的角度利用 Jenkins 平台的特性搭建自助式平台,基于篇幅所限,这里只介绍和本方案相关的主要配置项。
  首先,为了让自动化任务在提交请求的时候都能够接收不同用户的选择,我们需要勾选“This build is parameterized”。在接下来的“Add Parameter”下拉菜单中,Jenkins 提供多种类型的用户输入,在这里我们选择“Extended Choice Parameter”(这是由上文中提到的插件“Extended Choice Parameter plugin”新增出的支持类型),同时 Jenkins 每一个 Job 支持多个用户输入选项,并且彼此之间可以属于不同类型,管理员可以根据项目需要进行灵活搭配。
  图 9. 参数化配置
 
  在这里为了简单起见,本文新建了两个参数化输入选项以说明问题。其中第一个为单选项,提供用户对目标测试环境的选择,另一个为多选项,提供对具体测试用例的选择。每一个输入项在配置时需要提供唯一标识的名字, 不仅会显示在输入页面上,同时用户提交请求时真实的输入将会以同样命名的环境变量的形式传递给具体的执行脚本。其次对于备选项列表的配置,系统提供两种方式。第一种是直接在“Value”项中提供所有备选项的列表,并以逗号隔开(如图 10 中对环境选项 ENVIRONMENT 的配置),另一种是当备选列表比较长的时候我们可以以文件的形式来提供(如图 11 中对测试用例 SELECTED_TESTCASE 选项的配置)。备选列表文件的内容格式如清单 1 所示:

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号