物流研发-质量部
负责京东物流研发的全部产品线的质量保障工作,是京东集团最早开始全面实施自动测试的团队之一。经过多年的技术沉淀,围绕质量、效率、过程改进、技术提升等方面,去发现、挖掘工作中的难点&痛点,自主研发了一系列有关自动化、性能、持续集成系统和工具。
日常采用持续集成(单元、接口、UI)进行自动化回归测试,每周二、四上线前,会再次进行大面积的自动化回归测试。与此同时,测试人员还将部分自动化脚本开放给研发人员,通过这种方式来进行研发自测,进一步提高全员质量意识,降低缺陷的修复成本。
>>>> 背景
京东物流承载着订单生产的核心交易流程(订单履约,仓储、配送、客服等),专业高效的物流体系给用户带来良好的购物体验。随着物流子集团的成立,多平台、全渠道、一体化物流解决方案全面对外开放,在这种业务飞速增长的情况下,系统会不断涌入许多新的业务需求,不可避免地出现变更频繁,迭代快速的情况。传统的手工测试无法满足京东快速发展的需要,必须依靠自动化测试来降低重复劳动,提高测试效率。
>>>> 京东自动化测试平台的现状
时光荏苒,自动化测试平台已经伴随质量部有4年的时间,随着物流业务范围不断扩大、测试领域的不断纵深,使测试场景愈发多样复杂,在这种情况下,平台现有功能渐渐地满足不了我们的测试需求:
为了让各个业务条线测试人员更加方便地开展自动化测试工作,降低平台重复建设的成本,提高产品的自动化测试效率。我们对现有平台进行一次改造升级,玲珑,应运而生。
>>>> 新自动化测试平台—玲珑
玲珑,意为精巧细致、灵巧敏捷。升级后的平台具有以下新特性:
系统架构图
业务流程图
>>>> 核心功能介绍
测试用例与测试计划均采用树形结构的存储方式,被分别存储在两个集合中。一个测试用例可以被数个用例模块嵌套,一个测试任务也可以被数个测试计划嵌套。测试用例和测试任务作为树的叶子节点,一个节点作为一个文档来存放。下面以测试计划集合为例,进行说明。
根测试计划可以拥有数个测试子计划层级关系,根测试计划保存有相应测试项目的基础信息,hosts文件、配置文件、测试脚本代码库地址等。递归遍历该树形结构以JSON形式直接返回给前台页面方便展示。前台页面可以选择一个或多个节点下的测试任务进行执行。即可以按一个根计划执行,也可以按多个子计划执行,也可以多个测试任务执行。
复用测试计划时,会将该节点下的所有一级子节点链接到新节点下,即新的测试计划下的测试子计划与测试任务不再需要重新创建,修改源节点下的内容后,新节点下的内容会自动同步,避免再次修改。
丰富的层级结构,方便自动化用例实施人员对不同测试任务进行多级分类,方便对管理与维护。
测试场景的数据会随所选测试用例的变化而变化。测试场景数据作为一个子文档存放在测试任务文档中。测试场景的数据以List<Map>形式保存,List中的一个元素表示一个场景的相关数据,Map中的key表示场景数据的键名,value表示场景数据的键值。场景数据的键名来自所选测试用例中的扫描项中的键名的并集。测试场景数据用于串行相关的测试用例,同一个场景下的场景数据对该场景下的相关用例可见并可修改。
选择的多个测试任务会被一起执行,jenkins的job名称与测试任务的文档id一致,即测试用户修改任务名时不影响实际的执行任务。每一个jenkins的slave节点被限制为只能运行一个job且该slave节点只被限制绑定该执行机IP的job执行,这样设计解决了不同测试任务执行时会产生的互斥问题。随机执行时玲珑系统会根据空闲的执行机情况,将该任务分配到一台执行机运行,如果是绑定IP运行的任务,则会直接绑定到指定的IP上运行。
由jenkins的slave触发Agent程序执行,Agent程序获得测试结果集集合中的此次运行初始化的文档,根据结果集中的信息,初始化执行机的运行环境,host,配置文件等。然后获得结果集中的测试场景数据与测试用例数据,将测试场景与测试用例拼装为两个Excel文件,以shell调试方式执行自动化用例代码,这其中自动化用例代码会从这两个Excel中获得实际运行的用例信息和数据信息。
自动化测试用例运行结束后,Agent会收集测试日志,从测试日志中筛选出自动化用例检查点并更新到结果集中,同时还会将测试场景的excel数据(测试执行期间该文件也会被测试用例修改其中的场景数据)回写到结果集中,最将将该次运行对应的测试结果集更新到数据库中,结束自动化测试运行。对于运行过程中的日志,用户可以通过jenkins的构建日志分析并定位问题。
测试邮件的内容来自测试结果集中的数据,由于可以同时运行多个任务,一次运行的多个任务具有相同的分组,当分组内所有任务均执行完成时,会触发邮件的发送,邮件会展示该分组内的所有任务运行的结果集,每个任务运行时都会生成一份结果集与该任务对应,方便用户追溯任务的历史执行过程。
---------------------END---------------------