网站首页 > 技术文章 正文
对于没有副作用的接口(重复发送不会产生两份数据、不会产生多余的监控统计等等),就可以用这种方式方便的做回归测试。 部署三个不接外部流量的服务,两份老版本、一份新版本,把生产环境的流量复制到 Diffy 上。 如果生产环境支持通过请求头之类的方式区分测试流量和真实流量,就可以扩大使用范围。
启动serverA-8000
# 启动服务
docker run --detach --publish=8000:80 --name=serverA nginx
docker exec -it serverA bash
apt update
apt install vim
vim /etc/nginx/conf.d/default.conf
# 添加一个 Path
location /testerhome {
default_type application/json;
return 200 '{"tag":"old","noise":"1"}';
}
# :wq 保存退出,重载 Nginx
nginx -s reload
# 退出容器
exit
# 输出 Nginx log 到终端上
docker logs -f serverA
访问 http://127.0.0.1:8000/testerhome
curl http://127.0.0.1:8000/testerhome
# 可以看到返回了 {"tag":"old","noise":"1"},终端也输出了如下日志
172.17.0.1 - - [13/Oct/2019:07:04:04 +0000] "GET /testerhome HTTP/1.1" 200 28 "-" "curl/7.54.0" "-" "-"
启动serverB-8010
# 启动服务
docker run --detach --publish=8010:80 --name=serverB nginx
docker exec -it serverB bash
apt update
apt install vim
vim /etc/nginx/conf.d/default.conf
# 添加一个 Path
location /testerhome {
default_type application/json;
return 200 '{"tag":"old","noise":"1"}';
}
# :wq 保存退出,重载 Nginx
nginx -s reload
# 退出容器
exit
# 输出 Nginx log 到终端上
docker logs -f serverB
# 再打开一个终端,启动gor流量复制
sudo ./gor --input-raw :8000 --output-http http://127.0.0.1:8010
访问 http://127.0.0.1:8000/testerhome
curl http://127.0.0.1:8000/testerhome
# 可以看到 8010 端口上的 serverB 也产生了访问日志
172.17.0.1 - - [13/Oct/2019:07:14:04 +0000] "GET /testerhome HTTP/1.1" 200 28 "-" "curl/7.54.0" "-" "-"
启动serverC-8020
# 响应是 {"tag":"old","noise":"2"}
# 启动服务
docker run --detach --publish=8020:80 --name=serverC nginx
docker exec -it serverC bash
apt update
apt install vim
vim /etc/nginx/conf.d/default.conf
# 添加一个 Path
location /testerhome {
default_type application/json;
return 200 '{"tag":"old","noise":"2"}';
}
# :wq 保存退出,重载 Nginx
nginx -s reload
# 退出容器
exit
# 输出 Nginx log 到终端上
docker logs -f serverC
启动serverD-8030
# 响应是 {"tag":"new","noise":"3"}
# 启动服务
docker run --detach --publish=8030:80 --name=serverD nginx
docker exec -it serverD bash
apt update
apt install vim
vim /etc/nginx/conf.d/default.conf
# 添加一个 Path
location /testerhome {
default_type application/json;
return 200 '{"tag":"new","noise":"3"}';
}
# :wq 保存退出,重载 Nginx
nginx -s reload
# 退出容器
exit
# 输出 Nginx log 到终端上
docker logs -f serverD
访问 http://127.0.0.1:8000/testerhome
curl http://127.0.0.1:8000/testerhome
# 可以看到 8010 端口上的 serverB 也产生了访问日志
172.17.0.1 - - [13/Oct/2019:07:14:04 +0000] "GET /testerhome HTTP/1.1" 200 28 "-" "curl/7.54.0" "-" "-"
启动diffy服务
# primary 主要版本返回的结果
# secondary 如果开启降噪处理,会认同这个版本接口返回的结果
# candidate 要对比的版本
docker run -d --name diffy-01 \
-p 8880:8880 -p 8881:8881 -p 8889:8889 \
diffy/diffy \
-candidate=10.2.76.154:8030 \
-master.primary=10.2.76.154:8010 \
-master.secondary=10.2.76.154:8020 \
-service.protocol=http \
-serviceName=My-Service \
-proxy.port=:8880 \
-admin.port=:8881 \
-http.port=:8889 \
-rootUrl='localhost:8889' \
-summary.email="happy@a.com"访问 [http://127.0.0.1:8889]访问 [http://127.0.0.1:8889]
访问 [http://127.0.0.1:8889]
看到展示 Diffy 结果的界面
重启 gor
这次把将 8000 端口监听到的请求复制一份转发到 Diffy 的 8880 端口
sudo ./gor --input-raw :8000 --output-http http://127.0.0.1:8880
访问http://127.0.0.1:8000/testerhome
可以看到 8010、8020、8030 端口上的三个服务都产生了访问日志
对比diffy上面的结果
如果一个字段在 master.primary 和 master.secondary 上不一致,很有可能不是 bug,时间戳或者个性推荐之类的数据会这样。这时候可以 把 Exclude Noise 开关打开,排除这些“噪声”。如果一个请求过去,返回的value可以是不同的场景
猜你喜欢
- 2024-10-23 微软发布6月Win11累积更新KB5039212/KB5039213
- 2024-10-23 Colbie Caillat: Try(colbiecaillattry歌词)
- 2024-10-23 基于阿里云 ASK 的 Istio 微服务应用部署初探
- 2024-10-23 浅谈ElasticSearch 集群部署(elastic集群配置)
- 2024-10-23 Python项目中跟踪系统导入Zipkin(基于python的目标跟踪算法)
- 2024-10-23 JVM参数及调优(jvm调优常用参数)
- 2024-10-23 Elasticsearch的路由routing的应用技巧
- 2024-10-23 如何将Elasticsearch的快照备份至OSS
- 2024-10-23 利用工具curl来查看http请求和https请求
- 2024-10-23 一些超实用的 Kubernetes 日常运维常用命令,建议收藏
- 11-27echarts图形报表的入门案例
- 11-27Echarts仿电梯运行图
- 11-27微信小程序开发之wepy 引入echarts统计图方法 亲测可用
- 11-27yarn安装echarts教程
- 11-27微信小程序使用 ECharts
- 11-274、echarts 如何画图?(必会)
- 11-27JavaScript 前端数据可视化——ECharts.js
- 11-27vue+echarts使用
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)