当前位置: 首页 > article >正文

【业务】群组服务功能重构测试总结

背景:

群组微服务重构想法上半年就开始了,目前老群组服务除了代码设计不合理,服务部署无法启动也是痛点。研发侧发起技术重构。

测试角度来说我这边痛点有三个:

  1. 业务不熟悉也没有完整有效case->有哪些功能点,那些写在PHP,那些微服务实现等

  2. 研发产品人员变化,熟悉人都不在了。

  3. 测试周期比较长(跟版需求优先级高于群组微服务)

第一阶段首次提测

理想微服务重构

接口名称一样,缓存key和查询数据逻辑都一样,这样美滋滋的,我们测试起来比较方便。

实际服务重构

接口名称不同、缓存key不同,甚至mysql还有扩表。

为啥出现这种情况呢:

  1. 历史负担:之前设计不合理这次一起改了,数据存储也不应以前的了。

  2. 他人接手:你接受写了90%已经改了,不能在开发了,遇到问题就修复(这个属于这个原因)

测试问题

  1. mysql扩字段:老服务能不能兼容会不会有功能报错,你需要回归老服务功能。

  2. 缓存key更换:数据同步问题,线上数据同步过去,你需要线上有数据账号在新服务跑一遍。有问题修数据,老服务不能修代码的。

  3. 接口名更换:app测试服务端在nginx可以做映射,对于app端无感的。但是服务内部调用,PHP->群组服务,cms调用群组服务,这些都需要你去找研发确认(非常消耗时间)。

总结:事情比较多,周期比较长,中间断断续续的。自己把握好。以上你都做完了,但是核心问题,上线步骤你没定还是有问题。

问题:我和研发约定服务端全上,不是接口先上一部分,观察3天,继续上线(可以理解接口数量维度灰度)。

好处:就是风险可控不至于出现大规模的线上问题。

坏处:有走新的,又有走老的,数据上线之前同步;过程才生数据有问题新老服务不同步就有问题了。测试场景不会覆盖这种复杂场景,需要提前约定。

问题缺陷

  1. 提测接口客户端调用报错,典型还是字段类型问题,因为客户端不动,之前入参类型必须一致的(服务端没有用客户端看的习惯,直接curl或者用.doc测试了)

举例:

2.服务内部调用错误或者数据写入异常

3.灰度配置和数据报错:

这类基本都是host配置错了,数据库配置错了->所以服务重构灰度一样重新走一遍。

第二阶段 redis双写

为了解决阶段一的问题,在需要切换新老服务&&功能正常,做了数据双写(可以理解二次开发和提测):

可以理解为重新再测试一遍,因为涉及所有接口逻辑。

测试方法:调用新服务post接口 调用对应get类型接口查看返回,切换到老服务接口对比返回。->这种服务重构这种方法很快,一个个缓存自己查询,太抽象了,可能查的也不对。

测试问题 

1.缓存更新有误

2.mysql错误或者host配置错误

更新db异常和host配置错误:

3.依赖其他消费任务未启动

ps:这一类问题一般存在于送礼升级啊,干其他任务获取积分.

第三阶段 上线

目前上线按照接口一个个去切换

  1. 一般情况优先切换读取接口-->测试准备又数据账号,切换以后你要看下新服务能不能取到。

  2. 核心的表单接口->验证接口功能。

  3. 全量更新。

上线以后除了整体回归以外->你要看下线上大V的用户群组看看对不对->关注线上反馈。

测试遗漏

1.PHP上线过晚

按照研发约定微服务上线一周以后在上线PHP,原因特别简单PHP上线频繁,业务很多,需要群组微服务很稳定在切。我原计划这周上线,后面因为发版延期和我手里新包业务,我想推迟到次周的周1,周五回归65发现了一些调用PHP接口问题,所以周五上线了。

反思:还是要尽快上,有空直接上线,不会影响会有一些。

2.群消息通知缺失

测试场景:设置管理员群里未通知消息。

服务端调用消息两种类型:

根据场景需要各自调用即可。

我们目前产品:

        1.设置身份管理员或者发送奖励的时候基本群通知消息。

        2.邀请加入,申请加入这些都是在消息助手里面。

问题反思:在回归用例里面有图,我粗糙了,就看更新redis和mysql成功了。忽略消息发送。

经验总结:

我自己理解上面整个流程大体分成三个阶段:

1、新服务功能测试

2、老数据新服务兼容

3、规避风险上线流程约定(双写灰度一段时间,还是一次切换)

按照上面流程走,P0问题肯定不会有也不会有事故,剩下精细化测试细节了。

chatGTP意见:

比如说 老数据,新服务维度我觉得它回答很好


http://www.kler.cn/news/364477.html

相关文章:

  • H7-TOOL的LUA小程序教程第15期:电压,电流,NTC热敏电阻以及4-20mA输入(2024-10-21,已经发布)
  • 进程间通信(二)消息队列、共享内存、信号量
  • 【设计模式系列】观察者模式
  • 文件摆渡系统选型指南:如何找到最适合您的数据安全解决方案?
  • Lua表(Table)
  • 【NOIP普及组】 装箱问题
  • 基于ssm+vue的房源管理系统设计与实现
  • Vue前端播放rtsp视频流(vue+webrtc-streamer)
  • 使用 Pake 一键打包网页为桌面应用 / 客户端
  • 预算不够,怎么跟KOL砍价?(内附砍价模板)
  • 头部聚合公司源码质量测评!手把手教你打造高质量的碰一碰支付系统!
  • 设计模式 | 6大设计原则
  • NOTION 推出可定制的电子邮件产品 — NOTION MAIL
  • 15_卸载操作
  • pytorch 交叉熵损失函数 BCELoss
  • Java 代理模式详解
  • 003:无人机概述
  • 使用RabbitMQ实现延迟消息的完整指南
  • 瓜田推广:揭秘零撸项目里流量变现的技术与模式框架,新手必看!
  • EDA软件设计(1)----画板、侧边框和属性版的简易设计
  • 多模态技术串讲
  • CSDN介绍
  • Flink on yarn模式下,JobManager异常退出问题
  • 百度文心一言接入流程-java版
  • 前端全栈混合之路Deno篇:Deno2.0如何快速创建http一个 restfulapi/静态文件托管应用及oak框架介绍
  • 循环双链表,将L改造为L=(a1,a3,…,an,a4,a2)