自动化接口差异测试-diffy 回归测试 charles rewrite 请求

1、前言

大家好,今天小编向大家介绍一款自动化接口diff平台–diffy。diffy是twitter的开源项目,通过同时运行新/老代码,对比运行结果,发现潜在bug。diffy的原理是作为代理,截取请求并发送至所有运行的服务实例,通过对比响应结果来发现每次迭代代码中可能存在的问题。

2、diff测试

什么是diff测试呢?

diff就是对比,在这里是对代码输出结果的对比,具体来说,就是通过对比相同输入,相同接口,不同代码的测试,对比其结果的差异,从而发现潜在的bug。

为什么要做diff?

①、场景验证:

比如某个接口返回的数据中的”name”字段获取由user数据库表改为mobile_user数据库表,那么从接口角度来讲,通过对比这个接口在新老版本代码的返回结果,就可以知道其字段的基本正确性与差异性。

②、提升回归效率:

就一般的接口测试来说,每次代码迭代,除了对新接口的测试,还包括对老接口的回归。如果通过手工回归,那么随着接口数量的增加,测试人员的工作量将同样地线性增长,且效率将大幅降低。通过diff测试,可以发现相同接口下内部代码逻辑变更对其输出的影响,测试人员只需要对比diff接口的差异之处(或自动对比),从而大幅减少人工作业的工作量。

diff测试的一般方案

①、分别部署新、老代码:其中老代码为线上稳定版本,新代码为新迭代的测试版本

②、构造测试数据:我们可以手工构造测试数据,也可以对线上的数据进行抽样,用于diff测试

③、运行测试:使用测试数据分别在新、老代码中运行,并捕获测试结果

④、结果对比:对比新、老代码,相同接口下的输出,如果出现差异,则可以通过接口反向定位问题

diff测试的问题

在实际diff测试中,你会发现大部分的接口都会有一定差异,原因是这些响应中存在了噪音,噪音可能包括:

  • server响应中生成的时间戳

  • 随机生成的数字

  • 系统服务间的有条件竞争

这些噪音难以完全清除,根据内部逻辑、接口定义的不同,噪音的类型也难以枚举,那么怎么办么?diffy能够通过一定的方式,清除这类噪音,保证diff结果不被影响。

3、diffy平台

diffy的原理

根据diffy的github文档,diffy可以作为代理,截取请求并发送至所有运行的服务实例,通过对比响应结果来发现每次迭代代码中可能存在的问题。其中,diffy上运行了三类代码实例:

①、线上稳定版本:一个运行线上稳定版本代码的节点

②、线上稳定版本备份:同样运行了线上的稳定版本,用于消除噪音

③、测试版本:待上线的测试版本,用于和线上环境代码进行对比

整体架构如下:

如图所示,diffy能够比较primary(线上稳定版本)和secondary(线上稳定版本备份)的差异值,通过对这些差异值做减法来消除噪声;通过比较candidate(测试版本)和primary(线上稳定版本)得到基本的diff结果;最后通过比对基本的diff结果与消除噪声后的结果,得到最终的diff结果。

diffy部署 
1、克隆代码并构建

git clone https://github.com/twitter/diffy.git

cd diffy

./sbt assembly

2、在localhost:9990部署primary(线上稳定版本)的代码

3、在localhost:9991部署secondary(线上稳定版本备份)的代码

4、在localhost:9992部署candidate(测试版本)的代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值