Twitter的开源自动化测试工具-Diffy

 

1.什么是Diffy

diffy是一种接口自动化测试工具。

传统的自动化测试是定义好接口的输入,比对输出是否和预期一致,传统自动化测试的优势是可以定义自己想要对比的字段,进行较为精准的自动化测试,缺点是前期投入的成本较高,另外对测试人员的要求较高。

接口经过测试没有问题,接口输出可以视为预期结果。这时代码如果有变更,能够保证接口的输出和预期结果一致,则可以保证该接口没有问题。

diffy的原理是发送相同入参到两个版本的代码对应的接口,对比接口返回的差异,从而判断接口出参是否符合预期。该种方式可以降低接口自动化成本。

具体可以参考如下链接:https://gitee.com/mirrors_opendiffy/diffy#what-is-diffy

2.Diffy的工作原理

Diffy充当一个代理,它接受请求并分发到不同版本的服务中,对比结果差异。

如上图所示,diffy需要分发请求给三个服务,分别为:

  1. candidate :该版本是待测版本。

  2. primary:该版本通常是已经上线版本,或者是已知功能正常的版本。

  3. secondary:该版本是primary的副本,和primary运行相同的代码,主要用于排除噪声。

diffy的运行过程为

  1. 对比candidate和primary版本的输出差异作为raw differences
  2. 对比primary和secodary的结果差异作为降噪non-deterministic noise
  3. 根据raw differences和non-deterministic noise输出最终结果,展示报告(non-deterministic noise无差异则展示raw differences,如果non-deterministic noise和raw differences都有差异,则测试过程中可能受到了环境等其他因素影响,最后展示结果为无差异)

具体可以参考如下链接:https://gitee.com/mirrors_opendiffy/diffy#how-does-diffy-work

3.Diffy安装、使用

1.安装

尝试使用windows编译diffy,但是会遇到各种问题导致不能编译成功,最后在阿里云 linux云服务器编译的,执行很顺利,可以参考如下步骤:

1.git clone https://gitee.com/mirrors_opendiffy/diffy.git 没有git的话,先安装git,sudo yum install git   注意:一定要使用git拉代码到本地,否则会报无法找到git文件的错误

2.下载完成后,进入diffy目录,执行./sbt assembly进行编译,编译过程很慢,

可以vim ~/.sbt/repositories 修改 repositories的内容如下:

[repositories]
local
my-maven-repo: http://maven.aliyun.com/nexus/content/groups/public/
central: http://repo1.maven.org/maven2/

然后在diffy目录下修改vim ./sbt  添加-Dsbt.override.build.repos=true

 重新执行./sbt assembly编译,整个过程就会快很多,编译完成后/diffy/target/scala-2.12目录下会生成diffy-server.jar文件,需要使用该jar包启动diffy代理服务。

 2.使用

 在diffy/example文件夹下有diffy启动的配置文件run.sh,主要参数如下:

-candidate='localhost:9200' \                  candidate环境的地址,为测试环境的服务地址
-master.primary='localhost:9000' \          primary环境的地址,通常是已经上线版本,或者是已知功能正常的版本
-master.secondary='localhost:9100' \     secondary环境的地址,和primary环境的地址一致即可
-responseMode='candidate' \                 diffy代理返回的结果为测试环境的结果
-service.protocol='http' \                         
-serviceName='ExampleService' \         diffy展示报告的名称
-summary.delay='1' \                             
-summary.email='example@diffy.ai' \    转发报告到XX邮件 如XX@qq.com
-maxHeaderSize='32.kilobytes' \
-maxResponseSize='5.megabytes' \
-isotope.config='/Users/puneetkhanduri/code/sn126/isodemo/local.isotope' \
-proxy.port=:8880 \                                 diffy的代理端口,请求需要发给该端口
-admin.port=:8881 \                                后台登录的端口
-http.port=:8888 & \                                展示报告的端口

修改好参数后可以通过 ./run.sh 启动diffy服务

整个过程可以参考如下链接:https://gitee.com/mirrors_opendiffy/diffy/blob/master/QUICKSTART.md

4.一个简单的Demo

1.json-server启动后端服务

在这个demo中将使用json-server代替后端服务。使用json-server启动后端服务的过程如下:

  1. 本地安装NodeJs,并输入npm -version验证是否安装成功
  2. 使用命令npm install -g json-server安装json-server
  3. 本地编写json文件,分别为candidate.json   primary.json
  4. 使用json-server --watch --host 0.0.0.0 --port 9001 XX.json,启动后端服务

 如下为本人启动的两个后端服务: 

 2.启动diffy服务

由于本人的阿里云linux服务器配置较低,我将diffy的配置文件和jar包拉到了windows,如下图所示:

执行run_diffy.bat启动diffy服务,run_diffy.bat的参数配置如下:

java -jar ./diffy-server.jar ^
-candidate=localhost:9006 ^
-master.primary=localhost:9007 ^
-master.secondary=localhost:9007 ^
-responseMode=candidate ^
-service.protocol=http ^
-serviceName=demo ^
-summary.delay=10 ^
-maxHeaderSize=32.kilobytes ^
-maxResponseSize=5.megabytes ^
-summary.email=info@diffy.ai ^
-rootUrl="localhost:5555" ^
-proxy.port=:5550 ^
-admin.port=:5551 ^
-http.port=:5555 ^


@pause

 3.发送请求给diffy

 

 

 注意:diffy可以对读类接口和写类接口进行对比,但是实际项目中对比写类接口往往伴随着数据库入侵等问题,会影响测试数据。对比写类接口时需要其他mock技术的支持。

 4.登录diffy查看报告

 登录http://localhost:5555/(diffy配置文件中定义的报告地址)

 

posted @ 2022-08-22 14:48  Tester-大壮  阅读(1206)  评论(0)    收藏  举报