赞
踩
Diffy是一个twitter开源的自动化测试工具,是一种自动 Diff 的测试技术。它能够自动检测基于 Apache Thrift 或者基于 HTTP 的服务。通过同时运行新/老代码,对比运行结果,发现潜在 bug。并且使用 Diffy,只需要进行简单的配置,而不需要再编写测试代码。
diffy的使用场景主要有以下两种:
1.代码重构中保证新老代码接口返回值字段的差异;数据来源改变的时候代码的差异。比如:迁微服务的时候我们代码进行了重构,接口的返回值进行了结构体的改变;再比如某个接口返回的数据的来源库做了改变但是结构不变。原始的测试方式是通过接口在不同环境调用然后拿出接口返回值再人工进行json对比。
2.就一般的接口测试来说,每次代码迭代,除了对新功能也就是新接口的测试,还包括对老功能也就是老接口的回归。如果通过手工回归,那么随着接口数量的增加,测试人员的工作量将同样地线性增长,且效率将大幅降低。通过diff测试,可以发现相同接口下内部代码逻辑变更对其输出的影响,测试人员只需要对比diff接口的差异之处(或自动对比),从而大幅减少人工作业的工作量。
图片来源于diff官网:https://github.com/twitter-archive/diffy/blob/master/README.md
通过diff的官网可以看到以上工作流程,那么候选版本、稳定版本、稳定版本副本是什么呢,根据官网解释一下三个名词概念:
候选版本(candidate):该版本为待测版本,有着最新待测代码。
稳定版本(primary):该版本通常是已经上线版本,或者是已知功能正常的版本。
稳定版本副本(secondary):该版本是稳定版本的副本,和稳定版本运行相同的代码,主要用于排除噪声。
主要工作步骤:
第一步,发送请求。diffy本身作为一个代理服务(proxy),需要人为构造或引流 http 请求,发到 proxy 代理服务中。
第二步,代理转发。当 proxy 代理服务接收到请求后,会把请求分发到三个地方:被测服务,通常称之为侯选版本(candidate)、稳定版本(primary)服务、稳定版本副本(secondary)服务;
第三步,对比结果。接着,侯选版本服务与稳定版本服务的返回结果进行 diff,生成原始 diff 结果(raw differences),即原始区别;
第四步,降噪。对稳定版本与稳定版本副本的返回结果进行 diff,生成噪声 diff 差异值结果(non-deterministic noise),即噪声,通过对这些差异值做减法来消除噪声。
最后,通过比对原始的 diff 结果与消除噪声后的结果,得到最终的 diff 结果通过去噪声,得到最终过滤后的 diff 结果(filtered differences)展示在html页面;
1.首先,安装diffy
准备工作:由于我们最终是需要用到diffy编译成功生成的jar包(实际上diffy平台使用的是scala语言),此时运行环境需要安装JDK,这里建议安装Java 8,编译环境安装好之后,克隆diffy源码并进行编译构建。
两种方式运行diffy-service,一种是jar包一种是docker,本次笔者以jar包方式运行。docker官方文档有介绍。参考开源代码地址:https://github.com/twitter-archive/diffy
-
- git clone https://github.com/twitter/diffy.git
- cd diffy
- ./sbt assembly
下载完成后到目录找到运行的jar包:diffy/target/scala-xx/diffy-server.jar
2、执行命令相关格式如下:
使用命令运行diffy环境的命令格式/解释如下:
java -jar diffy-server.jar \
-candidate=localhost:9992 \ //候选版本的地址
-master.primary=localhost:9990 \ //稳定版本的地址
-master.secondary=localhost:9991 \ //稳定版本副本的地址
-service.protocol=http \ //http协议或者https协议
-serviceName=My-Service \ //你的diff代理服务名称
-proxy.port=:8880 \ //diff代理端口,所有的请求都从这个端口访问
-admin.port=:8881 \ //diff管理控制后台的端口,可以访问http://localhost:8881/admin
-http.port=:8888 \ //diff后台界面可以看到请求差异,通过访问http://localhost:8888
-rootUrl='localhost:8888’
以上就是笔者使用diff工具的基本实操过程了,大家有疑问/建议可以在评论区一起讨论~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。