掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇( 二 )


***/docs/open-api.html
② Nacos Eureka Sync 测试

  • 交叉注册
网关 , 服务 A ,服务 B 各10台实例,网关注册 Eureka ,A 注册 Nacos , B 注册 Eureka,同步正常 , 可调用 。
  • 压力测试
请求大于100万次,查看 Sync Server 会不会受到影响,结果 ErrorRequest = 0,同步服务数和实例数没有变化 。
掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇

文章插图
  • 有无损调用
网关 Sync Server 挂掉,网关服务 Eureka 同步 Nacos 失败 , 不影响网关 -> A -> B 调用 。
  • 自动创建同步
发布系统第一次发布应用到 Eureka / Nacos ,会自动创建 Eureka -> Nacos 的同步任务或 Nacos -> Eureka 的同步任务
掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇

文章插图
  • 减少 Sync Server
Sync Server 4C8G,停止机器,逐台递减,结论:平均1台 4C8G 机器最大可同步100个服务 。
  • 增加 Sync Server
2台 Etcd 节点,停机一台 , Etcd 读取超时,结论:600个服务至少2台 Etcd 节点,这里重点强调,新增服务时 ,  Hash 算法虚拟节点数,务必和原有的保持一致,不然会出现同步失败,影响跨注册中心调用 。
掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇

文章插图
  • 重启 Sync Server
增加 Sync Server 个数,重启 Sync Server  , 各节点同步数重新计算且均衡 。
③ Nacos Client 功能测试
Nacos Client 界面重点测试集群管理,服务列表和权限控制 。
  • Nacos Server 重启后,集群管理界面正常展示3台集群节点 IP。
  • 服务注册 Nacos Server 后,服务列表新增注册上去的服务名和实例个数,而且可查看详情 。

掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇

文章插图
  • 服务上下线操作 , 健康状态和元数据等展示正常 。
  • 编辑,删除等操作只有具备 Admin 权限的人员才可操作 。
④ Nacos Client 自动化测试
  • 自动化测试链路
全链路测试路径
API网关 -> 服务A(两个实例) -> 服务B(两个实例)
掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇

文章插图
全链路服务部署
掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇

文章插图
  • 自动化测试入口
结合 Spring Boot Junit ,TestApplication.class 为测试框架内置应用启动程序,MyTestConfiguration 用于初始化所有测试用例类 。在测试方法上面加入 JUnit 的 @Test注解
@RunWith(SpringRunner.class)@SpringBootTest(classes = { TestApplication.class, MyTestConfiguration.class }, webEnvirOnment= SpringBootTest.WebEnvironment.RANDOM_PORT)public class MyTest { @Autowired private MyTestCases myTestCases; private static long startTime; @BeforeClass public static void beforeTest() { startTime = System.currentTimeMillis(); } @AfterClass public static void afterTest() { LOG.info("* Finished automation test in {} seconds", (System.currentTimeMillis() - startTime) / 1000); } @Test public void testNoGray() throws Exception { myTestCases.testNoGray(gatewayTestUrl); myTestCases.testNoGray(zuulTestUrl); } @Test public void testVersionStrategyGray() throws Exception { myTestCases.testVersionStrategyGray1(gatewayGroup, gatewayServiceId, gatewayTestUrl); myTestCases.testVersionStrategyGray1(zuulGroup, zuulServiceId, zuulTestUrl); }}@Configurationpublic class MyTestConfiguration { @Bean public MyTestCases myTestCases() { return new MyTestCases(); }}
  • 基于 Nacos Client 的普通调用自动化测试
在测试方法上面增加注解 @DTest,通过断言 Assert 来判断测试结果 。注解 @DTest 内容如下:
@Target({ ElementType.METHOD, ElementType.TYPE })@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface DTest {}代码如下:
public class MyTestCases { @Autowired private TestRestTemplate testRestTemplate; @DTest public void testNoGray(String testUrl) { int noRepeatCount = 0; List<String> resultList = new ArrayList<String>(); for (int i = 0; i < 4; i++) { String result = testRestTemplate.getForEntity(testUrl, String.class).getBody(); LOG.info("Result{} : {}", i + 1, result); if (!resultList.contains(result)) { noRepeatCount++; } resultList.add(result); } Assert.assertEquals(noRepeatCount, 4); }}
  • 基于 Nacos Client 的灰度蓝绿调用自动化测试
在测试方法上面增加注解 @DTestConfig,通过断言 Assert 来判断测试结果 。注解 DTestConfig 注解内容如下:


推荐阅读