大家好,今天小编向大家介绍一款自动化接口diff平台–diffy。diffy是twitter的开源项目,通过同时运行新/老代码,对比运行结果,发现潜在bug。diffy的原理是作为代理,截取请求并发送至所有运行的服务实例,通过对比响应结果来发现每次迭代代码中可能存在的问题。
diff测试什么是diff测试呢?
diff就是对比,在这里是对代码输出结果的对比,具体来说,就是通过对比相同输入,相同接口,不同代码的测试,对比其结果的差异,从而发现潜在的bug。
为什么要做diff?
①、场景验证:
比如某个接口返回的数据中的”name”字段获取由user数据库表改为mobile_user数据库表,那么从接口角度来讲,通过对比这个接口在新老版本代码的返回结果,就可以知道其字段的基本正确性与差异性。
②、提升回归效率:
就一般的接口测试来说,每次代码迭代,除了对新接口的测试,还包括对老接口的回归。如果通过手工回归,那么随着接口数量的增加,测试人员的工作量将同样地线性增长,且效率将大幅降低。通过diff测试,可以发现相同接口下内部代码逻辑变更对其输出的影响,测试人员只需要对比diff接口的差异之处(或自动对比),从而大幅减少人工作业的工作量。
diff测试的一般方案①、分别部署新、老代码:其中老代码为线上稳定版本,新代码为新迭代的测试版本
②、构造测试数据:我们可以手工构造测试数据,也可以对线上的数据进行抽样,用于diff测试
③、运行测试:使用测试数据分别在新、老代码中运行,并捕获测试结果
④、结果对比:对比新、老代码,相同接口下的输出,如果出现差异,则可以通过接口反向定位问题
diff测试的问题在实际diff测试中,你会发现大部分的接口都会有一定差异,原因是这些响应中存在了噪音,噪音可能包括:
server响应中生成的时间戳随机生成的数字系统服务间的有条件竞争这些噪音难以完全清除,根据内部逻辑、接口定义的不同,噪音的类型也难以枚举,那么怎么办么?diffy能够通过一定的方式,清除这类噪音,保证diff结果不被影响。
diffy平台diffy的原理根据diffy的github文档,diffy可以作为代理,截取请求并发送至所有运行的服务实例,通过对比响应结果来发现每次迭代代码中可能存在的问题。其中,diffy上运行了三类代码实例:
①、线上稳定版本:一个运行线上稳定版本代码的节点
②、线上稳定版本备份:同样运行了线上的稳定版本,用于消除噪音
③、测试版本:待上线的测试版本,用于和线上环境代码进行对比
整体架构如下:如图所示,diffy能够比较primary(线上稳定版本)和secondary(线上稳定版本备份)的差异值,通过对这些差异值做减法来消除噪声;通过比较candidate(测试版本)和primary(线上稳定版本)得到基本的diff结果;最后通过比对基本的diff结果与消除噪声后的结果,得到最终的diff结果。
diffy部署克隆代码并构建gitclonegit
github.转载请注明:http://www.0431gb208.com/sjszyzl/530.html