一、前言
当初我们为什么想到要开发比对平台,主要遇到以下几个问题:
1)很多.net 应用转 java 返回的报文相差不大;
2)采用常规的方法测试测试量太大,测试时间太长;
3)可以补充多的测试场景;
4)自动化测试的补充;
5)实现比对监控;
为此我们根据以上测试问题设计开发了接口比对平台。在使用过程中极大的提高了测试效率,在此基础上根据业务人员需求相继开发了数据库比对模块,埋点比对模块,缓存比对模块。
本文将从各模块如何实现比对以及各个模块相互关系的方面,分享携程酒店比对平台,希望能给遇到同样问题的小伙伴带来一些启发和借鉴。
二、整体介绍
1、比对流程图
2、相关技术
比对中我们主要采用流的报文解析方式,以及分布式多线程运行。
通过该方式可以解决以前比对中以下一些瓶颈:
1)不能忽略节点比对;
2)不能忽略节点排序比对;
3)不能选择节点比对;
4)不能比对大于 10M 的报文;
5)比对速度比较慢;
3、模块关系图
比对平台由四个模块组成:接口比对、数据库比对、埋点比对,缓存比对。
根据用户配置,接口比对的同时可以生成数据库比对用例,当接口用例集比对完成接下来就运行数据库比对用例集,极大提高了测试效率,当然数据库比对也可以独立使用。
根据用户配置,接口比对的同时也可以生成埋点比对用例,当接口用例集比对完成接下来就运行埋点比对用例集,埋点比对也可以独立使用。
缓存比对模块目前是单独使用的,主要比对数据库数据和缓存数据,增,删,改,查等操作。
三、模块介绍
1、接口比对
比对原理:同一个请求报文,访问二个部署在不同机器的不同版本服务,比较二个服务的返回报文。
比对用例数据来源:
手动配置
ES 保留
ES 实时拉取
数据库拉取
用例集可以配置以下规则对报文处理后进行比较:
忽略大小写:节点值比对时,忽略配置节点值的大小写
忽略节点排序:对报文中 list 需要忽略排序的,可以配置节点忽略排序,list 比较的时候我们会进行排序处理然后进行报文比对
忽略节点:忽略配置的节点(以及所有子节点)的比较
忽略属性:忽略配置的节点中属性的比较
数值比较:将配置节点值转化为数值进行比较
属性数值比较:将配置的属性值转化为数值进行比较
白名单:只比较配置了白名单的节点(以及所有子节点)
节点替换:将返回报文的节名称进行替换
ES 用例集详情页配置点
获取用例环境
拉取用例数
ES 请求地址
ES 查询语句
DB 用例集详情页配置点
DB 名称
拉取用例个数
数据库服务地址
SQL 查询语句
用例详情页面也可以选择手动用例或者新加手动用例进入用例集。
比对运行方式
CI 自动运行(和自动化体系打通,服务发布后自动运行)
CI 手动运行
手动运行场景用例集
定时器运行(可实现比对监控)
单用例手动运行
执行方式
分布式
多线程
运行结果查看页
根据接口,运行状态筛选运行用例
根据用例差异节点统计个数筛选运行用例
差异信息展示节点值不同的列表
比对日志展示返回比对报文
请求报文展示当时请求报文信息
可以重新运行失败用例
可以下载失败用例报文日志
2、数据库比对
比对原理:二个相同类型订单在数据库中各个需要比较的字段进行比较。
比对用例数据来源:
手动配置
接口比对生成
用例集配置点
比较的库表
忽略比较的库表字段(可不填)
需要比较的库表字段(可不填)
比对运行方式
手动执行
接口比对完成触发数据库比较执行
执行方式
分布式
多线程
运行结果查看页
根据表比较不同个数展示筛选运行用例
差异信息展示用例表字段具体比较不同详细信息
3、埋点比对
比对原理:接口比对生成的埋点用例,根据埋点 key 从 ES 中获取埋点信息进行报文比对。
比对用例数据来源:
接口比对生成
用例集配置点
应用 ID
公共规则(可以不填)
比对运行方式
接口比对完成触发埋点比较执行
执行方式
分布式
多线程
运行结果查看页
根据用例差异节点统计个数筛选运行用例
差异信息展示节点值不同的列表
比对日志展示返回比对报文
可以重新运行失败用例
4、缓存比对
比对原理:数据库查询的数据和缓存中数据进行比较。
比对用例数据来源:
手动配置
用例配置点:
查询 SQL
缓存 Key
比较的字段
等等(和具体业务相关就不具体描述)
比对运行方式
定时运行
手动运行
运行结果查看页
具体错误信息展示弹出层中
四、总结
目前比对平台已稳定运行一年多:
用例基本不需要维护,每次拉最新(除手动用例)
用例基本都是 ES,DB 实时拉取不需要编写(除手动用例)
场景配置简单,基本不需要学习成本
失败用例自动归类降低分析成本
用户接入简单方便
比对测试丰富了测试场景,构成自动化测试体系中重要一环
1000 个用例平均 4 分钟内运行完成
目前 Case 量 50 万+
到目前发现 BUG 数 1000+
节省测试时间 55%+
为了更好的满足用户需求,仍在持续迭代中。
作者介绍:
黄文杰,携程酒店研发部高级测试经理,主要从事测试框架和平台的研发,现在负责自动化与工具平台,热衷于研究技术提升测试工作效率。
本文转载自公众号携程技术(ID:ctriptech)。
原文链接:
https://mp.weixin.qq.com/s/vsSY-p2QIolgElAalDOQuA
评论