什么是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配置文件中定义的报告地址)
文章来源:https://www.toymoban.com/news/detail-446676.html
工作实践
工作中主要可以基于两点对其进行二次开发:文章来源地址https://www.toymoban.com/news/detail-446676.html
- 批量发起请求,可以对用户进行分组,获取不同用户的请求信息,发起登录请求,获取到token或者cookie,存到指定的请求头中,然后使用多线程批量发起不同接口不同传参的请求
- 对结果的排序,diffy的排序功能有限,有时候结果返回的字段过多,导致expected和actual的字段排序顺序不一致,对对比结果产生影响,需要根据业务的需求,进行二次开发。可以开发一个排序服务(主要使用到了python的sorted函数),和diffy代理端口一致。维护排序接口的url信息和排序字段在一个excel中,排序服务根据发来的请求的url判断是否需要排序,根据排序字段排序。
到了这里,关于接口测试-录制回放-diffy的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!