前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小巧“玲珑”—京东物流自动化测试平台核心功能首次曝光

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

作者头像
京东技术
发布2018-07-30 16:15:59
1.1K0
发布2018-07-30 16:15:59
举报
文章被收录于专栏:京东技术京东技术

物流研发-质量部

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

日常采用持续集成(单元、接口、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---------------------

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 京东技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
持续集成
CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档