在上一篇diffy背景及简介中已经介绍了diffy的功能,它能帮助我们做的事,接下来我们就介绍怎样安装使用diffy.
java -jar diffy-server.jar \
-candidate='localhost:9200' \
-master.primary='localhost:9000' \
-master.secondary='localhost:9100' \
-service.protocol='http' \
-serviceName='My Service' \
-proxy.port=:8880 \
-admin.port=:8881 \
-http.port=:8888 \
-rootUrl='localhost:8888'
各参数详细说明:
candidate='localhost:9200' (待上线版本部署地址)
master.primary='localhost:9000' (已上线版本地址1)
master.secondary='localhost:9100' (已上线版本地址2)
service.protocol='http' (http协议或https)
serviceName='My Service' (服务名称,无影响)
proxy.port=:8880 (diffy代理端口,所以请求都应从这个端口访问)
admin.port=:8881 ( 通过http://localhost:8881/admin可以查看请求状况)
http.port=:8888 (查看界面,在这里可以比较差异)
rootUrl='localhost:8888' (同上)
responseMode=primary (代理服务器是否返回结果,默认(empty)无返回,可指定primary返回线上版本,secondary(同线上版本,用于噪音消除),candidate(待测试版本)
excludeHttpHeadersComparison=false (是否排除header的差异,不同服务器,cookie,nginx版本可能有所差异,设置为true可以忽略这些差异)
notifications.targetEmail=123@emal.com (对差异发送到指定邮箱)
需要注意的是,为了防止测试对数据造成不必要的影响,diffy默认只支持读,即Post及Delete影响数据的等请求不会转发,如果需要支持这样的请求,需要增加参数
allowHttpSideEffects=true
命令模板:(根据实际情况修改参数值即可)
java -jar diffy-server.jar -candidate=localhost:8086 -master.primary=localhost:85 -master.secondary=localhost:85 -service.protocol=http erviceName=My-Service -proxy.port=:8880 -admin.port=:8881 -http.port=:8888 -rootUrl='localhost:8888' -allowHttpSideEffects=true
diffy配置需要三台服务器,为了简化部署环境,我这里将master和secondary设置成了同一个服务器,我们启动diffy后,再启动已上线版本和待上线版本的实例.
然后模拟一个web请求信息,可用curl,wget,httpclient,postman,rest client,jmeter等工具发送请求测试.
比如我这里模拟了一个获取地区的请求,
然后我们通过 http://localhost:8888 去查询diff结果,
因为两个服务器返回的结果没有任何差异,所以对比是成功的.
然后我们在返回结果中加入一个随机数,
int random = new Random().nextInt(100);
result.put("random", random);
再发送一次请求,再次查看diffy的结果,因为我们刚才点了两次,这里可以看到失败信息,差异是random是一个88,一个为28.
上篇我们提到过,线上版本需要提供两台实例两台服务器,像随机数,timestamp这样的差异是正常的,diffy也考虑到了这点,所以左边有个噪音消除开关,当我们开启这个开关后,就会发现,成功率又是100%了.
我们再在两台服务上增加确实存在的差异,
分别在结果中增加
result.put("env","dev");
以及
result.put("env","prod")
这样无论我们是否开启噪音消除,都会看到差异了.
通过这些差异的比较,我们就可以快速判断我们新增和修改的功能对系统原有功能的影响了.