小巧“玲珑”—京东物流自动化测试平台核心功能首次曝光

物流研发-质量部

负责京东物流研发的全部产品线的质量保障工作,是京东集团最早开始全面实施自动测试的团队之一。经过多年的技术沉淀,围绕质量、效率、过程改进、技术提升等方面,去发现、挖掘工作中的难点&痛点,自主研发了一系列有关自动化、性能、持续集成系统和工具。

日常采用持续集成(单元、接口、UI)进行自动化回归测试,每周二、四上线前,会再次进行大面积的自动化回归测试。与此同时,测试人员还将部分自动化脚本开放给研发人员,通过这种方式来进行研发自测,进一步提高全员质量意识,降低缺陷的修复成本。

>>>> 背景

京东物流承载着订单生产的核心交易流程(订单履约,仓储、配送、客服等),专业高效的物流体系给用户带来良好的购物体验。随着物流子集团的成立,多平台、全渠道、一体化物流解决方案全面对外开放,在这种业务飞速增长的情况下,系统会不断涌入许多新的业务需求,不可避免地出现变更频繁,迭代快速的情况。传统的手工测试无法满足京东快速发展的需要,必须依靠自动化测试来降低重复劳动,提高测试效率。

>>>> 京东自动化测试平台的现状

时光荏苒,自动化测试平台已经伴随质量部有4年的时间,随着物流业务范围不断扩大、测试领域的不断纵深,使测试场景愈发多样复杂,在这种情况下,平台现有功能渐渐地满足不了我们的测试需求:

  1. 任务分配执行机容易超时,排查问题费时费力,降低回归测试的效率,另外,由于各系统使用不同浏览器版本、JDK版本,使得某些自动化测试需要绑定到指定的执行机,不能充分利用执行机资源
  2. 单任务执行,影响测试执行效率。每次回归测试需要验证系统在不同场景、不同业务分支系统功能的正确性,平台只支持单个任务执行,不能够按照所选的测试任务集合执行测试,只能够对测试计划下所有的任务一并执行,影响回归测试的整体效率
  3. 支持的开发语言相对单一。随着自动化测试技术的发展,出现很多优秀的不同语言的轻量级测试框架,但平台仅支持JAVA语言

为了让各个业务条线测试人员更加方便地开展自动化测试工作,降低平台重复建设的成本,提高产品的自动化测试效率。我们对现有平台进行一次改造升级,玲珑,应运而生。

>>>> 新自动化测试平台—玲珑

玲珑,意为精巧细致、灵巧敏捷。升级后的平台具有以下新特性:

  1. 新的任务调度机制,解决原系统执行机调度缓慢、Driver&JDK版本绑定执行机的问题
  2. 测试任务随意组合并可同时运行,提高自动化测试执行效率
  3. 支持多场景的数据驱动,让测试场景更加丰富
  4. 支持Python、移动端测试(开发中),满足多语言、不同测试类型的测试需求
  5. 支持物流业务流转的端到端的自动化测试(开发中)。基于流水线作业的方式,按照设定好的业务全流程场景进行测试

系统架构图

  • WebUI层:测试计划、任务、用例维护保留原有功能,将操作权限控制到每个三级部门,其部门下的信息共享,新增按部门、系统、人员维度的统计报表
  • 任务调度:弃用STAF调度框架,使用Jenkins下发测试任务,由于具备面向文档存储、灵活、支持索引等特点,将MongoDB作为系统数据库,同时还提供CI触发自动化测试的接口
  • 测试执行机:由于原执行机经常出现网络连接失败、并且已经无运维维护,所以,使用KVM生成的虚拟机作为测试执行机,同时将JDK升级到1.8,Driver升级到最新版本。结果采集的Agent也进行了改造,支持运行Python语言的测试框架并收集测试结果

业务流程图

>>>> 核心功能介绍

  • 测试用例:通过自动扫描的方式进行维护测试脚本,在测试用例类中以注释形式给出相应的待扫描项,这些扫描项包括用例的调用名称、场景数据键名、作者、所属系统、应用等信息,后台系统会自动扫描该目录及其子目录下的测试用例类,并把相应的基础信息保存到测试用例集合中。
  • 测试计划:将测试的相关配置信息进行统一设置

测试用例与测试计划均采用树形结构的存储方式,被分别存储在两个集合中。一个测试用例可以被数个用例模块嵌套,一个测试任务也可以被数个测试计划嵌套。测试用例和测试任务作为树的叶子节点,一个节点作为一个文档来存放。下面以测试计划集合为例,进行说明。

根测试计划可以拥有数个测试子计划层级关系,根测试计划保存有相应测试项目的基础信息,hosts文件、配置文件、测试脚本代码库地址等。递归遍历该树形结构以JSON形式直接返回给前台页面方便展示。前台页面可以选择一个或多个节点下的测试任务进行执行。即可以按一个根计划执行,也可以按多个子计划执行,也可以多个测试任务执行。

复用测试计划时,会将该节点下的所有一级子节点链接到新节点下,即新的测试计划下的测试子计划与测试任务不再需要重新创建,修改源节点下的内容后,新节点下的内容会自动同步,避免再次修改。

丰富的层级结构,方便自动化用例实施人员对不同测试任务进行多级分类,方便对管理与维护。

  • 测试场景:按照既定的测试场景将相关的用例、数据组合,生成自动化测试任务

测试场景的数据会随所选测试用例的变化而变化。测试场景数据作为一个子文档存放在测试任务文档中。测试场景的数据以List<Map>形式保存,List中的一个元素表示一个场景的相关数据,Map中的key表示场景数据的键名,value表示场景数据的键值。场景数据的键名来自所选测试用例中的扫描项中的键名的并集。测试场景数据用于串行相关的测试用例,同一个场景下的场景数据对该场景下的相关用例可见并可修改。

  • 多任务执行:执行机可以按照指定或随机的方式分配,如果被占用,则进入等待队列,待执行机空闲后执行测试任务

选择的多个测试任务会被一起执行,jenkins的job名称与测试任务的文档id一致,即测试用户修改任务名时不影响实际的执行任务。每一个jenkins的slave节点被限制为只能运行一个job且该slave节点只被限制绑定该执行机IP的job执行,这样设计解决了不同测试任务执行时会产生的互斥问题。随机执行时玲珑系统会根据空闲的执行机情况,将该任务分配到一台执行机运行,如果是绑定IP运行的任务,则会直接绑定到指定的IP上运行。

  • 采集调度Agent程序:负责组装自动化测试用例、用例执行和结果收集,该功能对于用户而言是透明的。

由jenkins的slave触发Agent程序执行,Agent程序获得测试结果集集合中的此次运行初始化的文档,根据结果集中的信息,初始化执行机的运行环境,host,配置文件等。然后获得结果集中的测试场景数据与测试用例数据,将测试场景与测试用例拼装为两个Excel文件,以shell调试方式执行自动化用例代码,这其中自动化用例代码会从这两个Excel中获得实际运行的用例信息和数据信息。

自动化测试用例运行结束后,Agent会收集测试日志,从测试日志中筛选出自动化用例检查点并更新到结果集中,同时还会将测试场景的excel数据(测试执行期间该文件也会被测试用例修改其中的场景数据)回写到结果集中,最将将该次运行对应的测试结果集更新到数据库中,结束自动化测试运行。对于运行过程中的日志,用户可以通过jenkins的构建日志分析并定位问题。

  • 测试邮件:将测试结果进行收集汇总,邮件内容显示摘要及详情信息。

测试邮件的内容来自测试结果集中的数据,由于可以同时运行多个任务,一次运行的多个任务具有相同的分组,当分组内所有任务均执行完成时,会触发邮件的发送,邮件会展示该分组内的所有任务运行的结果集,每个任务运行时都会生成一份结果集与该任务对应,方便用户追溯任务的历史执行过程。

---------------------END---------------------

原文发布于微信公众号 - 京东技术(jingdongjishu)

原文发表时间:2018-07-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Crossin的编程教室

【我问 Crossin】Crossin 这个名字是什么意思?

1 新建 git 项目是用 git init 还是 git clone,git init 和 git clone 都是创建新仓库,两个有什么区别? git in...

3719
来自专栏腾讯云数据库(TencentDB)

5分钟学会如何玩转云数据库组件(迁移,审计,订阅)

传统企业在建设数据库初期,不仅建设服务器,还要保证数据库能够稳定和可靠的运行。当业务数据增长到一定大小的时候,就需要增加服务器CPU及内存以及磁盘相关资源。为了...

9.1K4
来自专栏FreeBuf

魔兽世界中招:一条命令行就能劫持你的游戏!

最近出现了一种涉及社工技术的新型游戏攻击骗局,攻击者利用了魔兽世界(World of Warcraft,WoW)游戏插件中一个隐藏的功能。 新型攻击 想象一下这...

4628
来自专栏云服务器购买流程

腾讯云服务器怎么购买,腾讯云服务器购买流程教程

腾讯云服务器怎么购买?腾讯云服务器购买其实很简单的。首先打开腾讯云服务器官网的购买地址

1.3K4
来自专栏数据派THU

【独家】一文读懂非关系型数据库(NoSQL)

本文共11000字,阅读全文约需30分钟。 本文为大家解析非关系型数据库(NoSQL)。[ 在数据派THU后台(非留言区)回复"综述"即可获取资源。] 前言 N...

83110
来自专栏FreeBuf

基于代理IP的挖掘与分析

? 废话不多说,直入主题。关于代理IP的挖掘与分析,个人的一些分析与总结。 1. 思路 1、获取代理地址 2、对获取的代理地址进行验证,提取出真实可用的代理地...

6207
来自专栏技术小黑屋

Google Play Services 7.5新增API及多项特性

本文为 InfoQ 中文站特供稿件,首发地址为:文章链接。如需转载,请与 InfoQ 中文站联系。

1282
来自专栏UDNZ

软件系统的黑匣子:我们要怎样写日志

作为一个软件系统,需要写日志,这是不言而喻的,这是大家都会不假思索地说“那当然”的事。不论是什么语言,写日志的专用框架也不一而足,写到文本的,写到数据库的,写到...

5769
来自专栏FreeBuf

经验分享 | 企业如何做好安全基线配置

一、为什么要做基线配置管理 一个组织在不同的时期部署了不同的业务系统,承载业务系统的是不同的操作系统和支持系统。业务系统在运行期间,基本上很少做操作系统的升级或...

5375
来自专栏*坤的Blog

提高效率

1192

扫码关注云+社区

领取腾讯云代金券