-
Notifications
You must be signed in to change notification settings - Fork 1.4k
如何执行全链路自动化模拟流程测试
本文档只适用于Discovery 6.12.0及以上版本的集成方式
使用者集成框架后,需要通过Postman调用一下去验证是否成功集成,该方式比较繁琐,可以通过“全链路自动化模拟流程测试”方式进行验证
采用全链路智能编排 + 流量侦测相结合的做法,支持网关和服务为侦测入口两种方式,用于测试环境或者开发环境通过自动化测试手段验证全链路蓝绿灰度方式的准确性
禁止事项
禁止在生产环境使用
注意事项
服务必须引入discovery-plugin-admin-center-starter依赖
执行步骤
① 启动控制台
执行之前,需要先启动控制台,请参考
- Github Wiki :如何部署对接DevOps运维平台的控制台
- Gitee Wiki :如何部署对接DevOps运维平台的控制台
② 修改application.properties配置文件
- console.url替换成相应的地址
- testcase.group和testcase.service替换成相应的订阅的组名和服务名
- 网关侦测入口或者服务侦测入口任选一种,把testcase.inspect.url替换成相应的网关地址或者服务地址
- 当选择网关作为侦测入口,testcase.inspect.context.service替换成网关后第一跳的服务名
- 当选择服务作为侦测入口,testcase.inspect.context.service禁止配置
- 其它参数可以遵照默认设置,也可以视具体使用场景做改动
# 测试用例的配置内容推送的控制台地址
console.url=http://localhost:6001
# 测试用例的配置内容推送后,等待生效的时间。推送远程配置中心后,再通知各服务更新自身的配置缓存,需要一定的时间。缺失则默认为5000
# console.operation.await.time=5000
# 订阅的组名
testcase.group=discovery-guide-group
# 订阅的服务名
testcase.service=discovery-guide-gateway
# testcase.service=discovery-guide-service-a
# 网关侦测入口地址
testcase.inspect.url=http://localhost:5001/discovery-guide-service-a/inspector/inspect
# 网关侦测入口转发服务
testcase.inspect.context.service=discovery-guide-service-a
# 服务侦测入口地址
# testcase.inspect.url=http://localhost:3001/inspector/inspect
# 每个测试用例执行循环次数。缺失则默认为1
# testcase.loop.count=1
# 测试用例的蓝绿采样总数。采样总数越大,准确率越高,但耗费时间越长。缺失则默认为100
# testcase.bluegreen.sample.count=100
# 测试用例的灰度权重采样总数。采样总数越大,灰度权重准确率越高,但耗费时间越长。缺失则默认为1000
# testcase.gray.sample.count=1000
# 测试用例的灰度权重准确率偏离值。采样总数越大,灰度权重准确率偏离值越小。缺失则默认为5
# testcase.gray.weight.offset=5
# 开启和关闭版本偏好部署模式下的测试用例。网关和服务基于非域网关模式的部署,存在这多个网关并行发布的场景。缺失则默认为false
# testcase.version.prefer.enabled=true
# 开启和关闭测试用例中第二次蓝绿灰度发布的自动化测试。一般情况下,第一次蓝绿灰度发布测试通过,第二次发生问题的概率较低。缺失则默认为true
# testcase.second.release.enabled=false
# 测试用例抛错,通过Debug方式定位问题
# testcase.debug.enabled=false
③ 修改规则策略文件
在如下三个文件
- mock-version-release-basic.yaml
- mock-version-release-1.yaml
- mock-version-release-2.yaml
如下服务列表替换成测试环境要模拟蓝绿灰度发布的服务列表
service:
- discovery-guide-service-a
- discovery-guide-service-b
④ 参考模拟流程部分结果
【模拟场景3】蓝绿策略,测试全链路侦测,Header : 无...
侦测次数 : 100
侦测结果 : discovery-guide-service-a@@1.0 命中次数=100
侦测结果 : discovery-guide-service-a@@1.1 命中次数=0
侦测结果 : discovery-guide-service-b@@1.0 命中次数=100
侦测结果 : discovery-guide-service-b@@1.1 命中次数=0
测试耗时 : 1 秒
【模拟场景3】蓝绿策略,测试全链路侦测,Header : {xyz=1}...
侦测次数 : 100
侦测结果 : discovery-guide-service-a@@1.0 命中次数=100
侦测结果 : discovery-guide-service-a@@1.1 命中次数=0
侦测结果 : discovery-guide-service-b@@1.0 命中次数=100
侦测结果 : discovery-guide-service-b@@1.1 命中次数=0
测试耗时 : 1 秒
【模拟场景3】蓝绿策略,测试全链路侦测,Header : {xyz=2}...
侦测次数 : 100
侦测结果 : discovery-guide-service-a@@1.0 命中次数=0
侦测结果 : discovery-guide-service-a@@1.1 命中次数=100
侦测结果 : discovery-guide-service-b@@1.0 命中次数=0
侦测结果 : discovery-guide-service-b@@1.1 命中次数=100
测试耗时 : 1 秒
【模拟场景3】灰度策略,测试全链路侦测,Header : 无...
侦测次数 : 500
侦测进度 : 第100次...
侦测进度 : 第200次...
侦测进度 : 第300次...
侦测进度 : 第400次...
侦测进度 : 第500次...
侦测结果 : discovery-guide-service-a@@1.0 命中次数=500
侦测结果 : discovery-guide-service-a@@1.1 命中次数=0
侦测结果 : discovery-guide-service-b@@1.0 命中次数=500
侦测结果 : discovery-guide-service-b@@1.1 命中次数=0
期望结果 : 旧版本路由权重=100%, 新版本路由权重=0%
最终结果 : 旧版本路由权重=100.0%, 新版本路由权重=0.0%
测试耗时 : 9 秒
【模拟场景3】灰度策略,测试全链路侦测,Header : {xyz=3}...
侦测次数 : 500
侦测进度 : 第100次...
侦测进度 : 第200次...
侦测进度 : 第300次...
侦测进度 : 第400次...
侦测进度 : 第500次...
侦测结果 : discovery-guide-service-a@@1.0 命中次数=448
侦测结果 : discovery-guide-service-a@@1.1 命中次数=52
侦测结果 : discovery-guide-service-b@@1.0 命中次数=448
侦测结果 : discovery-guide-service-b@@1.1 命中次数=52
期望结果 : 旧版本路由权重=90%, 新版本路由权重=10%
最终结果 : 旧版本路由权重=89.6%, 新版本路由权重=10.4%
测试耗时 : 7 秒
【模拟场景3】灰度策略,测试全链路侦测,Header : {xyz=4}...
侦测次数 : 500
侦测进度 : 第100次...
侦测进度 : 第200次...
侦测进度 : 第300次...
侦测进度 : 第400次...
侦测进度 : 第500次...
侦测结果 : discovery-guide-service-a@@1.0 命中次数=353
侦测结果 : discovery-guide-service-a@@1.1 命中次数=147
侦测结果 : discovery-guide-service-b@@1.0 命中次数=353
侦测结果 : discovery-guide-service-b@@1.1 命中次数=147
期望结果 : 旧版本路由权重=70%, 新版本路由权重=30%
最终结果 : 旧版本路由权重=70.6%, 新版本路由权重=29.4%
测试耗时 : 8 秒
测试结果 : * 通过
【模拟场景3】结束
全链路自动化模拟流程测试,包括全链路自动化模拟流程本地测试和全链路自动化模拟流程云上测试两种模式
执行过程,有两种方式
- 通过https://github.com/Nepxion/DiscoveryTool/releases下载最新版本的Discovery Automation Simulator
- 解压后,根据上文提示做相应修改
- 运行startup.bat或者startup.sh
- 编译https://github.com/Nepxion/DiscoveryTool/tree/automation-springboot-2.x.x,分支为automation-springboot-2.x.x,或者https://github.com/Nepxion/DiscoveryTool/tree/automation-springboot-3.x.x,分支为automation-springboot-3.x.x
- 下载后,根据上文提示做相应修改
- 执行mvn clean install -DskipTests,在discovery-automation-simulator-application/target/discovery-automation-simulator-${version}-release目录下,运行startup.bat或者startup.sh
云上测试,即把原来本地测试的过程部署到云上Web服务器,执行逻辑和过程不变。具体功能包括
- 并行控制测试用例,通过线程安全的锁组件(本地锁或者分布式锁)并行控制测试用例,根据Key(group@@serviceId)进行判断,不允许有多个Key相同的测试用例同时运行
- 单服务器模式下,通过基于StampedLock的Caffeine实现本地锁,并提供锁过期释放机制
- 集群服务器模式下,通过基于Redis的Redisson实现分布式锁,并提供锁过期释放机制
- 测试用例执行过程中,每一步成功和失败,都提供日志输出,使用者可以实现基于Web界面的测试操作
- 测试控制台提供两种方式的Rest接口,返回为全局唯一的
testcase-id
- 测试控制台需要通过Logback输入带有
testcase-id
的日志,参考discovery-automation-console/src/main/resouces下的logback.xml和logback-all.xml - 整合日志服务器,采集和输出测试日志到指定的分布式存储上
- 通过
testcase-id
获取和显示属于指定Web界面终端的日志
- 测试控制台提供两种方式的Rest接口,返回为全局唯一的
- 支持Properties和Yaml格式的两种调用接口
① 启动测试控制台
默认把Simulator和Inspector集成在一起,使用者可以视具体场景把它们分开部署
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-automation-inspector-starter-console</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-automation-simulator-starter-console</artifactId>
</dependency>
使用者可以视具体场景选择Caffeine本地锁或者Redisson分布式锁
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-automation-concurrent-starter-caffeine</artifactId>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>discovery-automation-concurrent-starter-redisson</artifactId>
</dependency>
执行过程,有两种方式
- 通过https://github.com/Nepxion/DiscoveryTool/releases下载最新版本的Discovery Automation Console
- 解压后,运行startup.bat或者startup.sh
- 编译https://github.com/Nepxion/DiscoveryTool/tree/automation-springboot-2.x.x,分支为automation-springboot-2.x.x,或者https://github.com/Nepxion/DiscoveryTool/tree/automation-springboot-3.x.x,分支为automation-springboot-3.x.x
- 下载后,执行mvn clean install -DskipTests,在discovery-automation-console/target/discovery-automation-console-${version}-release目录下产生第一种方式的包,运行startup.bat或者startup.sh
② 修改application.properties配置文件
# Spring boot config
spring.application.name=automation-console
server.port=6002
# Console automation thread config for inspector and simulator
# spring.application.thread.core-pool-size=
# spring.application.thread.max-pool-size=
# spring.application.thread.queue-capacity=
# spring.application.thread.keep-alive-seconds=
# spring.application.thread.await-termination-seconds=
# Console automation caffeine config for simulator
# spring.application.caffeine.initial-capacity=10
# spring.application.caffeine.maximum-size=100
# spring.application.caffeine.expire-seconds=900
# Console automation redisson config for simulator
# spring.application.redisson.wait-seconds=0
# spring.application.redisson.expire-seconds=900
# Refer to https://github.com/redisson/redisson/blob/master/redisson-spring-boot-starter/README.md
singleServerConfig.address=redis://127.0.0.1:6379
# spring.application.logger.mdc.key.shown=true
③ 启动测试
使用者可以自研自动化测试平台界面来代替Swagger界面,下面以Swagger界面为例,介绍如何操作
全链路自动化模拟流程测试,有两种接口
配置文件为Properties格式
访问接口
http://localhost:6002/simulator-test/test-config-properties
传输内容,按照次序,由application.properties、mock-version-release-basic.yaml、mock-version-release-1.yaml、mock-version-release-2.yaml组成,中间用10个"-"组成换行分隔。例如:
testcase.console.url=http://localhost:6001
testcase.group=discovery-guide-group
testcase.service=discovery-guide-gateway
testcase.inspect.url=http://localhost:5001/discovery-guide-service-a/inspector/inspect
testcase.inspect.context.service=discovery-guide-service-a
----------
service:
- discovery-guide-service-a
- discovery-guide-service-b
sort: version
----------
service:
- discovery-guide-service-a
- discovery-guide-service-b
blueGreen:
- expression: "#H['xyz'] == '1'"
route: green
- expression: "#H['xyz'] == '2'"
route: blue
gray:
- expression: "#H['xyz'] == '3'"
weight:
- 90
- 10
- expression: "#H['xyz'] == '4'"
weight:
- 70
- 30
sort: version
----------
service:
- discovery-guide-service-a
- discovery-guide-service-b
condition: true
sort: version
配置文件为Yaml格式
访问接口
http://localhost:6002/simulator-test/test-config-yaml
传输内容,按照次序,由application.yaml、mock-version-release-basic.yaml、mock-version-release-1.yaml、mock-version-release-2.yaml组成,中间用10个"-"组成换行分隔。例如:
testcase:
console:
url: http://localhost:6001
group: discovery-guide-group
service: discovery-guide-gateway
inspect:
url: http://localhost:5001/discovery-guide-service-a/inspector/inspect
context:
service: discovery-guide-service-a
----------
service:
- discovery-guide-service-a
- discovery-guide-service-b
sort: version
----------
service:
- discovery-guide-service-a
- discovery-guide-service-b
blueGreen:
- expression: "#H['xyz'] == '1'"
route: green
- expression: "#H['xyz'] == '2'"
route: blue
gray:
- expression: "#H['xyz'] == '3'"
weight:
- 90
- 10
- expression: "#H['xyz'] == '4'"
weight:
- 70
- 30
sort: version
----------
service:
- discovery-guide-service-a
- discovery-guide-service-b
condition: true
sort: version
传输内容,自上而下,分别是基本配置属性、兜底规则策略、第一次蓝绿灰度发布规则策略、第二次蓝绿灰度发布规则策略。使用者可以直接使用上述示例规则策略(只需要改动服务列表),也可以把实际规则策略填入进去
自动化测试模式下的规则策略有两个限制
- 蓝绿灰度混合发布模式下,灰度兜底策略不允许配置
- 尽量使用“等于”表达式
④ 获取当前正在运行的测试用例列表
访问接口
http://localhost:6002/simulator-test/testcases-running
查看测试平台目前正在运行哪些测试用例,用例名称的格式为group@@serviceId
2017-2050 ©Nepxion Studio Apache License
- 如何对接Foundation基础平台实施收敛集成
- 如何对接DevOps运维平台实施流量管控
- 如何部署对接DevOps运维平台的控制台
- 如何对接DevOps运维平台执行半自动化蓝绿灰度发布
- 如何使用DevOps运维平台对接的公共接口
- 如何设计Nepxion Discovery应用界面
- 如何实现Windows10下GraalVM本地镜像化
- 蓝绿灰度发布
- 流量染色
- 隔离路由
- 故障转移
- 多活单元化
- 限流熔断降级权限
- 网关动态路由
- 可观测监控
- 如何操作配置中心
- 如何理解框架开关配置
- 如何理解规则策略里内容格式配置
- 如何操作网关和服务的蓝绿灰度发布规则策略配置
- 如何操作网关动态路由规则策略配置
- 如何操作Sentinel规则策略配置
- 如何实施规则策略配置和业务配置在配置中心的合并和分离
- 如何理解自动扫描目录
- 如何自定义流量管控
- 如何自定义实现组合式的防护
- 如何自定义高级配置订阅功能
- 如何自定义订阅框架事件
- 如何自定义解决业务自身跨线程上下文切换的问题
- 如何自定义重用框架内置的Swagger模块
- 如何自定义Header全链路传递
- 如何遵循Nepxion Discovery网关标准实现对其它网关全链路流量管控的二次开发
- 如何遵循Nepxion Discovery服务标准实现对消息队列等其它中间件全链路流量管控的二次开发