前段时间,公司运维又双叒叕在迁移机房,带来的又是大量的回归测试,虽然负责的项目case还算健全,但是被迁移机房仍然存在大量的历史接口,有些甚至不知道是什么业务在用,但仍然在有少量请求,既然还在为少量用户提供服务,那就不能断然下线,但是这种服务该怎么回归呢?
这种情况最简单的方案就是copy线上流量,通过工具diff结果来回归;之前配合部门的开发做了一个结果diff工具,但是功能简陋,无界面,操作十分复杂,结果diff全靠手动,用了几次实在忍不了;加上之前忘记在哪个公众号看到过diffy平台,所以决定试一下;
diffy平台是Twitter开源的一个工具,通过配置可进行快速的结果对比,而且自带噪声过滤功能;工具原理参见下图:
关于部署,google百度之后发现没有一个可以说的明明白白的,希望本文能描述清楚;github上有两个版本
twitter/diffy
:https://github.com/twitter/diffyopendiffy/diffy
:https://github.com/opendiffy/diffytwitter/diffy
猜测是有内部依赖,所以无法编译成功;所以使用opendiffy/diffy
进行编译;由于搜到的使用方法里能看到启动用的是个jar包,所以一直以为是java开发的,但实际上diffy平台使用的是scala
语言,运行环境是java虚拟机,所以需要安装jdk,这里建议安装java8;编译命令:
./sbt assembly
(这个过程十分漫长,有条件的同学建议挂个代理)编译好之后:diffy/target/scala-2.12/diffy-server.jar
(diffy根目录的相对路径下)
java -jar ./target/scala-2.12/diffy-server.jar\
-candidate='127.0.0.1:80'\
-master.primary='127.0.0.1:81'\
-master.secondary='127.0.0.1:82'\
-service.protocol='http'\
-serviceName='ExampleService'\
-summary.delay='3'\ #重试的延迟时间
-summary.email='example@diffy.ai'\ #邮件地址必填参数,但是貌似没啥用
-proxy.port=:8880\ #http服务端口,结果查看页面
-admin.port=:8881\ #查看请求状况http://localhost:8881/admin
-http.port=:8888\ #proxy端口
-allowHttpSideEffects=true #无此参数只支持get请求
-excludeHttpHeadersComparison=false #是否排除header的差异,不同服务器,cookie,nginx版本可能有所差异,设置为true可以忽略这些差异
测试case可使用大量线上流量(通过goreplay等工具)进行回放;或已有的接口测试用例;或构造大量随机用例;优点是不用关注结果正确性;
作者对此问题的解释是:大部分请求都包含请求参数,如果将所有参数展现到页面会大大降低用户体验,所以建议用户自定义uri