月度归档: 2020年5月

diffy做流量比对的实践和样例

例子代码的简单介绍

因为要想做这个流量比对,那得有前端代码,后端代码,nginx,测试同学想要熟悉diffy的功能,需要有修改前后端代码的能力,我们的AIMP项目部署起来相对复杂,所以我编写了一个小项目,用于同学们测试。
1.前端代码 vue架构:https://gitee.com/li_shuai520/diffy.example.frontend.git。提供一个页面,有输入框和按钮,供用户输入和触发http请求到后端
2.后端代码python3: https://gitee.com/li_shuai520/diffy.example.backend.git。里面包含4段代码,4段代码都运行起来,会占用5000,50001,5002,5003端口
3.nginx关键配置如下:
192.168.0.240 是运行diffy机器的IP,192.168.1.5是运行我本机的IP

location /api {
            mirror /mirror;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP              $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy      true;
            proxy_pass http://192.168.1.5:5000/getMsg;
    }
    location = /mirror {
            internal;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP              $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy      true;
            proxy_pass http://192.168.0.240:8880/getMsg;
    }

业务实践图

前端代码安装

1.把前端代码下载到本地,修改src\components\Lzw.vue里的const path 为自己的nginx后台路径
1.运行命令npm install ,npm run build。产生dist目录
2.把dist目录里的文件复制到nginx的/usr/share/nginx/html目录下

nginx配置

1.修改/etc/nginx/conf.d/default.conf。配置后端反向代理和流量镜像

后端代码安装

把4个代码run就完事了。new_code和old_code的区别,就在/getMsg这个接口的get请求的非返回结果中,多了一个“new”:随机数 。我们的目标,就是diffy要能比较并告诉我们,这个new在新老代码中是不同的
new_code有2个一样的,占用了5000和5001
old_code也有2个一样的,占用了5002和5003

diffy用docker安装

其中192.168.1.5是我自己电脑的IP地址

docker run -ti \
  -p 8880:8880 -p 8881:8881 -p 8888:8888 \
  diffy/diffy \
    -candidate=192.168.1.5:5001 \
    -master.primary=192.168.1.5:5002 \
    -master.secondary=192.168.1.5:5003 \
    -service.protocol=http \
    -serviceName="Test-Service" \
    -summary.email='zhenwei.li@sfere-elec.com' \
    -proxy.port=:8880 \
    -admin.port=:8881 \
    -http.port=:8888 \
    -allowHttpSideEffects=true \
    -rootUrl=localhost:8888

使用截图








twitter/diffy的使用

twitter/diify是twitter公司出的一款测试工具,号称是一款能够帮助软件开发人员寻找bug,测试bug,并且无须编写新代码,可直接用来比较代码运行以后的结果的工具。
为了赶时髦,我也安装试用了一下。可能能使用的情况为,用一台测试环境做代理,把http请求数据同时发给3台测试环境,比对response。但是此工具的限制还是很多的。
比如默认只支持get,其他的Post,put,delete请求需要开启-allowHttpSideEffects=true。再比如,不同测试环境,用的token也不一致,这个不好处理。
但是还是先试用再说吧


通过docker运行

其中192.168.95.243:8086是测试环境后台。192.168.95.246:8086是模拟线上环境后台

docker run -ti \
  -p 8880:8880 -p 8881:8881 -p 8888:8888 \
  diffy/diffy \
    -candidate=192.168.95.243:8086 \
    -master.primary=192.168.95.246:8086 \
    -master.secondary=192.168.95.241:8086 \
    -service.protocol=http \
    -serviceName="Test-Service" \
    -proxy.port=:8880 \
    -admin.port=:8881 \
    -http.port=:8888 \
    -allowHttpSideEffects=true \
    -rootUrl=localhost:8888

web浏览器访问http://192.168.0.244:8888/ 即可打开比较结果页面


测试

通过对192.168.0.244:8888/进行http请求,会把请求转发给不同的服务器,进行比对之后,会再输出结果

curl http://localhost:8880/api/v1/auth/login -H "Content-Type:application/json" -X  POST -d '{"username":"lizhenwei", "password":"123456"}'



苏ICP备18047533号-2