当前位置:   article > 正文

接口测试-录制回放-diffy_接口录制回放

接口录制回放

什么是Diffy

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

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

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

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

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

Diffy的工作原理

Diffy充当一个代理,它接受请求并分发到不同版本的服务中,对比结果差异。
在这里插入图片描述

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

candidate :该版本是待测版本。

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

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

diffy的运行过程为:

对比candidate和primary版本的输出差异作为raw differences
对比primary和secodary的结果差异作为降噪non-deterministic noise
根据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

Diffy安装、使用

安装

尝试使用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代理服务。

使用

在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

一个简单的Demo

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

本地安装NodeJs,并输入npm -version验证是否安装成功
使用命令npm install -g json-server安装json-server
本地编写json文件,分别为candidate.json primary.json
使用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配置文件中定义的报告地址)

在这里插入图片描述

工作实践

工作中主要可以基于两点对其进行二次开发:

  1. 批量发起请求,可以对用户进行分组,获取不同用户的请求信息,发起登录请求,获取到token或者cookie,存到指定的请求头中,然后使用多线程批量发起不同接口不同传参的请求
  2. 对结果的排序,diffy的排序功能有限,有时候结果返回的字段过多,导致expected和actual的字段排序顺序不一致,对对比结果产生影响,需要根据业务的需求,进行二次开发。可以开发一个排序服务(主要使用到了python的sorted函数),和diffy代理端口一致。维护排序接口的url信息和排序字段在一个excel中,排序服务根据发来的请求的url判断是否需要排序,根据排序字段排序。
    在这里插入图片描述
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/606923
推荐阅读
相关标签
  

闽ICP备14008679号