考拉线上业务接口自动化测试-用例设计与监控

接口测试想必大家都不陌生,每位测试同学应该都可能做过一些接口测试或者用例编写等等,那么在线上环境写接口测试,有没有什么区别呢?这些方法是否可以在测试环境的接口测试用例中使用嘛?今天我们就来说说这些事情,也是对自己之前工作内容的一点总结吧

一、考拉线上自动化测试范围
由于我参与的时间并不是很多,前期我负责的线上前台业务接口自动化测试主要包括以下几块,接口主要编写方式使用的是testng,目前好多童鞋已经逐渐使用gotest编写线上业务员接口啦(有需求的可以自行咨询他们哦~):

二、接口用例设计
与测试环境不同的是,线上业务接口测试很多时候的数据我们是无法预知的,例如我们不能选择固定的商品进行下单测试,商品参加的活动一段时间就会发生变化,商品金额也会随着活动、时间发生变化等等,针对这些问题,我们需要设计稳定的用例来执行接口测试,及时发现并反馈线上问题。下面也主要是针对上图中给出的几个模块进行用例设计说明,才疏学浅,有不足的地方希望大家一起交流交流~
  • 以商品详情页为例(品牌详情页、活动页都是类似的方法,根据url特征正则匹配出大量的可用链接进行校验):
测试环境中我们最常用的测试方法就是选择一个固定的商品进行接口测试(这种方法不推荐),校验商品的一些固定信息:标题、金额、活动信息等等,不出意外(不被别人乱动)的话,用例都可以正常运行;对于线上环境,我们无法固定一个可用的商品,而且作为线上业务接口测试,我们本质的目的是及时发现问题,针对商品详情页,我们从考拉主页、搜索、品牌页等各种途径通过正则匹配获取所有页面链接,设置校验标准(code、各种异常检查、价格判断等),循环遍历商品详情页列表,达到接口测试目的,主流程如下所示:

  • 下单接口(以普通下单流程为例)
线上环境的下单接口,我们无法固定某一个商品,每次执行测试的时候需要自动抽取一些商品进行下单校验,具体抽取规则可以自己指定,每次需要什么类型的商品,在正常下单之后,需要执行取消订单、删除订单的操作,不然会导致该账号下订单太多,手动访问页面时加载时间过长无法快速定位问题(当然这边是需要开发GG们优化的~),具体流程如下所示:


  • 下单接口(Abtest)
下单Abtest目的是比较一段时间段内下单之后返回的json信息是否存在异常,由于需要特定的商品进行校验,针对这种情况,我们是在线上建立了10种特定活动的隐藏商品,提前获取了所有商品下过程中的请求参数信息,存入参数信息库,每次进行接口测试,从信息库中直接获取商品请求信息,直接进行接口测试,测试完毕将商品返回的json信息存入klqa数据库,然后klqa平台通过定时任务进行商品信息比对,具体流程如下:


  • 添加商品接口
添加商品与下单类似,有些商品是不能直接加入购物车的(页面上没有加入购物车的按钮),所以我们不能随便从列表中获取到一个商品就加入购物车,必须先获取到可用的商品(具体根据商品详情页的接口寻找到特定的参数),流程如下:


  • 搜索接口
对于搜索的校验,这边设计的比较简单,主要是从关键词列表中每次选择一些关键词进行搜索,针对获取到结果,遍历商品列表,主要流程如下:


  • 个人中心
个人中心主要涉及到包括我的订单、考拉豆签到等业务校验,主要接口设计还是自动获取可用数据(例如自动获取我的订单信息、订单页列表数据等扥回归),完成接口校验,这里不再详说啦

三、接口异常监控
我们使用Jenkin实现线上业务持续集成,设置jenkins job定时执行(半小时一次),并在job中配置脚本,每次job执行结束,自动解析xml结果文件,获取接口执行情况,抽取用例失败信息,针对异常情况及时进行异常报警(现有杭研的jenkins 泡泡通知/易信通知也是可以失败报警的,可在这里配置一个接口进行调用),通过如下图所示的报警提示,可以快速定位问题,快速解决线上可能出现(偶尔时候由于上线会挂等原因)的问题
报警信息:


四、线上接口自动化定制执行
  • 自定义执行 -- 时间
Jenkins持续集成系统只能支持定时执行,不能自定义执行(例如我只想在中午的11-12点之间,让线上接口3分钟快速执行一遍;然后过了一天我又想在14-15点10分钟执行一次),这种自定义执行不能靠我们每次手动去修改定时执行策略(毕竟我们有些功能是提供给别人使用的,万一我不在,他人又没有权限改jenkins 配置,那岂不是耽误啦),为此我们结合klqa平台针实现了定义执行策略


  • 自定义执行 -- 数量
这个意思是每次希望执行的数量不一样,例如在运维发布工程的时候,希望1分钟快速回归线上业务,商品详情页的校验只要选择一个商品即可;然而在平时定时运行的时候还是需要跑全部商品详情页进行校验,这样的话,我们结合上述子进程方案,利用testng配置传参实现数量上的控制
<test name="活动页" junit="false" annotations="JDK">
<parameters>
<parameter name="sizeValue" value="1" />
<parameter name="flag" value="true" />
</parameters>
<classes>
<class name="com.netease.qa.kaola.testcase.web.online.activity.*" />
</classes>
</test>
如上图所示,在test中增加 parameters,从xml中向接口用例传递参数,接口用例根据传入的参数,获取相应的商品详情页数量,完成快速回归
总结:线上自动化接口测试是前期涉及到一块工作内容,后面由于主要精力在平台开发上,这块做的不是很好,写这篇也是想对这块内容进行简单总结,希望在接下来的时间中投入更多时间完善线上自动化测试以及线上监控的工作,有经验的同学欢迎一起来交流~

本文来自网易实践者社区,经作者朱珊珊授权发布