当前位置:叉车网首页 > 技术中心 > 应用案例

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

2018/7/19 16:27:58来源:作者:

  背景

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

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

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

  任务分配执行机容易超时,排查问题费时费力,降低回归测试的效率,另外,由于各系统使用不同浏览器版本、JDK版本,使得某些自动化测试需要绑定到指定的执行机,不能充分利用执行机资源。

  单任务执行,影响测试执行效率。每次回归测试需要验证系统在不同场景、不同业务分支系统功能的正确性,平台只支持单个任务执行,不能够按照所选的测试任务集合执行测试,只能够对测试计划下所有的任务一并执行,影响回归测试的整体效率。

  支持的开发语言相对单一。随着自动化测试技术的发展,出现很多优秀的不同语言的轻量级测试框架,但平台仅支持JAVA语言。

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

  新自动化测试平台—玲珑

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

  新的任务调度机制,解决原系统执行机调度缓慢、Driver&JDK版本绑定执行机的问题。

  测试任务随意组合并可同时运行,提高自动化测试执行效率。

  支持多场景的数据驱动,让测试场景更加丰富。

  支持Python、移动端测试(开发中),满足多语言、不同测试类型的测试需求。

  支持物流业务流转的端到端的自动化测试(开发中)。基于流水线作业的方式,按照设定好的业务全流程场景进行测试。

  (系统架构图)

  WebUI层:测试计划、任务、用例维护保留原有功能,将操作权限控制到每个三级部门,其部门下的信息共享,新增按部门、系统、人员维度的统计报表。

  任务调度:弃用STAF调度框架,使用Jenkins下发测试任务,由于具备面向文档存储、灵活、支持索引等特点,将MongoDB作为系统数据库,同时还提供CI触发自动化测试的接口。

  测试执行机:由于原执行机经常出现网络连接失败、并且已经无运维维护,所以,使用KVM生成的虚拟机作为测试执行机,同时将JDK升级到1.8,Driver升级到最新版本。结果采集的Agent也进行了改造,支持运行Python语言的测试框架并收集测试结果。

  (业务流程图)

  核心功能介绍

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

  测试计划:将测试的相关配置信息进行统一设置。

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

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

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

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

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

  测试场景的数据会随所选测试用例的变化而变化。测试场景数据作为一个子文档存放在测试任务文档中。测试场景的数据以List形式保存,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的构建日志分析并定位问题。

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

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

  写在最后

  经过第一阶段的功能优化,玲珑系统能够在物流业务迅速发展的趋势下,为测试人员提供更加丰富、稳定、高效的自动化测试服务。第二阶段京东物流将开始着手进行业务链条端到端的自动化,移动端自动化等功能。