干货 | 携程用户中心接口自动化实践
作者简介
高峰,携程用户平台研发部高级测试工程师,负责业务功能测试和相关测试工具的开发。目前主要负责的测试产品有用户积分系统、用户画像、首页、OCR及相关项目。
为了适应敏捷开发模式,同时解决接口测试遇到的问题,如冒烟测试不及时、人工回归成本高、自动化用例编写维护成本高、case依赖数据破坏等等,携程用户平台研发部做了接口自动化测试项目。
本文将从接口自动化的痛点解决实践方面,分享携程用户中心的接口自动化案例,希望能给遇到同样问题的小伙伴一些启发和借鉴。
一、整体介绍
携程接口自动化平台由三部分组成:无码录入平台、用例解析器、任务调度执行平台,数据均由DB存储。
无码录入平台:可以进行用例的编写、调试,实现接口服务管理、用例管理、接口用例数量图表展示;
用例解析器:无码录入用例后执行脚本和测试数据分离,用例解析器执行一系列的动作包括数据初始化、参数化数据替换、发送请求、检查点检验、日志报告记录、用例后置处理等;
调度管理平台:用例集管理、任务管理、执行机调度、测试报告管理,测试任务发起后,调度管理平台任务要求选择满足条件的执行机、调用用例解析器执行自动化用例并输出测试报告、邮件系统将测试报告通知任务归属人员,测试人员进行失败case分析;
DB:测试数据都存在db中,且测试脚本和数据相互分离,db存储解决了以往的excel参数化难以管理的难题;
二、生命周期
了解了各个组成部分的作用后,我们来看下平台中一个自动化测试任务的生命周期。
如图我们可以清晰地看出自动化测试的生命周期由四个阶段构成,细看下每个阶段的中间过程。
编写测试用例
执行自动化测试任务的前提是需要有自动化用例,自动化用例的编写工作不局限于自动化测试人员,功能测试人员在手工测试的同时可以完成。在无码自动化录入平台上web化操作,所有数据存储DB。用例完成后可以在调度管理平台创建用例集。
发起测试任务
调度管理系统目前支持三种测试任务,实时任务、定时任务、冒烟任务。
实时任务是手工创建任务,选定空闲的执行机随即执行;
定时任务是每天定时触发,调度选定的执行机用来监控测试代码的稳定性;
冒烟任务是消费发布系统发送的Hermes消息来触发自动化测试任务,当应用在测试环境更新立即触发冒烟。
执行测试
调度管理系统分配好执行机给自动化测试任务后,任务中每个case按照调度规则调用用例解析器执行,解析器依次初始化测试脚本数据、递归依赖的precase、替换参数化的内容、执行校验检查点、记录报告日志、数据后置处理,循环执行直到测试任务中所有case执行完成。
测试报告
用例全部执行结束后,调度管理平台的日志系统整合结果生成在线测试报告,mail模块将在线报告的链接发送给相关人员;到这里还没结束,测试人员查看并分析测试报告,也支持自动分析。失败case修复后可直接reRun。
三、实践解决方案
上述的自动化测试项目并非一蹴而就,在此之前经历了2个大版本的迭代。
初版测试脚本和数据全部用代码维护,第二版excel数据驱动、测试脚本与数据隔离,测试工程师在使用前两个版本时遇到些问题,如:测试用例需要code能力的测试工程师、写自动化用例需要额外的用例编写时间、用例编写维护麻烦、excel数据驱动多人操作难管理、测试用例执行过再次执行通常会因为数据原因失败等等。
以接口自动化测试项目投入产出比为核心评价指标,并针对这些问题我们给出了以下解决方案。
1、降低自动化用例编写难度
1)无码自动化
通常编写自动化测试用例的工程师都需要有code的能力,这在一定程度上对功能测试人员设定了门槛。若招聘专门的自动化工程师做自动化测试用例的编写,一方面会使企业成本提高,另一方面专门的自动化测试人员,可能没有功能测试工程师对系统功能的熟悉程度高,而导致自动化测试用例覆盖率低。
为解决这个问题,我们给出的解决方案是无码自动化,不需要用例编写人员具备code能力,你会简单的使用市场上流行的接口测试工具(如:jmeter、postman),就会使用我们的无码自动化平台。
测试用例的主体就是请求报文的编写和预期结果的设置。
2)用例可复制
同一个接口的用例通常大部分是入参的不同,我们提供了用例复制功能,测试用例的一些要素包括参数化内容不用每次都手工填写,只要修改不同点,这样达到减少用例编写的时间的目的;
3)自动生成用例
一些固定的校验某些入参空值的用例,我们提供了用例批量生成工具;
测试用例执行过一次,就因为依赖环境、数据的变化导致不能重复使用,那是不可取的。为了保证测试用例的健壮性就必须保证测试数据的鲜活度。
1)测试数据参数化
同一个用例在不同环境执行,不同环境可以设置不同的参数化数据;
请求报文和预期结果都可以进行参数;
参数化的value可以通过sql取DB中的值;
2)数据初始化
可以通过操作db、redis将用例依赖数据初始化;
3)定义precase
当一个接口的执行参数依赖另外一个接口的返回,我们是无法通过操作db或redis获得case的入参数的,我们可以在本来的case(称为case A)中定义一个precase(称为case B),case A会自动获取caseB 的结果进行参数化替换,当然如果依赖的接口较多,我们可以设定case C、case D、设置更多;如此也覆盖了复杂调用场景的用例;
4)用例后置处理
case执行结束后,可以通过操作db、redis将数据还原;
5)提供常用函数API
case的请求报文入参有时候需要一些特定数据,如随机数、uuid、加密签名算法、当前时间等,定义API的关键字FUN_APIName并以参数化的形式输入;
我们在用例编写页加入了实时调试功能,这个功能不仅可以在自动化用例执行有问题时进行调试,而且可以利用这个功能进行手工测试,保存每个手工测试用例测试完成即自动化测试用例编写完成,节省了额外编写自动化用例的时间。
自动化任务执行后查看报告,或多或少有些失败的case,分析失败case通常会占据测试工程师大部分时间,平台提供了自动化分析功能,可以自动分类出一部分非接口功能问题,这样可以节省分析时间让测试工程师把关注的重点放在接口功能上;
四、其他
三种用例类型
自动化测试项目实践运行过程中,通用的校验响应报文的方式(caseType-O)满足不了100%的接口测试需求,我们又新增支持另外两种case类型。
caseType-N
与O型不一样的是这种类型面向的为新增、删除类功能的接口,这种类型的接口通常响应报文只会返回success或fail,只校验响应报文显示是不行,N型caseType可以对db数据变化进行校验;
compareCase
顾名思义是比较型case,现在试用的是两种场景:一种是聚合型的接口,比如我们用户中心的订单查询的接口,该接口下发的数据来源基本都是调用BU的订单接口下发的内容,通过比较两接口的响应关键字段值来达到校验case预期值,compareCase就是为第一种类型设计;第二种是版本比较,可以将同一case的两个不同测试版本进行比较校验预期值;
平台部分页面展示
无码录入平台的首页以柱状图展示了接口数量和自动化用例数量,按类型、业务区分一目了然目前的用例情况;
接口管理页面。可以增删改查接口信息,有一键生成特殊自动化用例功能;
测试用例编写页面,无需编码,参数化,数据初始化、precase、校验点、debug等都在该页面设置;
用例查询管理页面,可以查询、复制、删除用例;
自动化结果在线报告页,展示一次测试任务的测试报告,包括通过率、执行记录、用例集信息、分析功能;
自动化分析结果查询页,失败用例的分析结果整体查询;
五、总结
以上为用户中心接口自动化测试项目的实践介绍,总结如下:
目前用户中心的接口自动化已稳定运行两年半,为了更好的满足用户需求,仍在持续迭代中。
【推荐阅读】