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

背景:

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

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

  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意见:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/901103.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker 单节点arm架构服务器安装zookeeper、kafka并测试通信

kafka、zookeeper常用镜像介绍 kafka和zookeeper常见的镜像有以下三个:wurstmeister/zookeeper、kafka、confluentinc/cp-zookeeper、cp-kafka 和 bitnami/zookeeper、kafka。 wurstmeister/xxx: 由wurstmeister团队维护,提供的镜像适用于开发和测试环…

Mac apache配置cgi环境-修改httpd.conf文件、启动apache

Mac自带Apache,配置CGI,分以下几步: 找到httpd.conf。打开终端,编辑以下几处,去掉#或补充内容。在这个路径下写一个测试文件.py格式的,/Library/WebServer/CGI-Executables,注意第一行的python…

矩阵概念 和 性质

目录 一、矩阵因式分解 二、矩阵在图形学的运用 一、矩阵因式分解 1、先将矩阵化为上三角阵,得到U 2、每个主元列以下元素 主元 得到下三角阵 二、矩阵在图形学的运用 二维移动: 子空间H: 零向量属于H 对H中任意向量u、v,uv…

2024-10-25 算法学习及论文辅导(每日更新,随时联系)

看看学习小群的学习氛围👇🏻 很多同学自己学习遇到问题没人解决,最终消耗了时间,精力同时大大消耗了自己对学习的信心😧 🥳来看看跟班学习,大家遇到问题的时候是怎么解决的: 首先…

idea安装visualVm插件

idea 安装visualVM插件用于分析java程序, 1.在插件市场安装visualvm launcher 2.安装成功后,重启idea,此时启动按钮旁边有这两个按钮 3.需要在这里配置插件的visualvm位置 4.配置完后,点击启动

ArcGIS计算落入面图层中的线的长度或面的面积

本文介绍在ArcMap软件中,计算落入某个指定矢量面图层中的另一个线图层的长度、面图层的面积等指标的方法。 如下图所示,现在有2个矢量要素集,其中一个为面要素,表示某些区域;另一个为线要素,表示道路路网。…

Linux相关概念和易错知识点(16)(Shell原理、进程属性和环境变量表的联系)

Shell原理及其模拟实现 在认识进程exec系列函数、命令行参数列表、环境变量之后,我们可以尝试理解一下Shell的原理,将各方知识串联起来,让Shell跑起来才能真正理解这些概念。我会以模拟Shell执行的原理模拟一个Shell。途中配上相关讲解。 1…

InnoDB 存储引擎<一>InnoDB简介与MySQL存储架构及相关数据结构

目录 回顾MySQL架构 InnoDB简介 ​MySQL存储结构 回顾MySQL架构 对MySQL架构图的总结: MySQL服务器是以网络服务的方式对外提供数据库服务的,我们使用的应用程序以及客户端统称为外部程序。 外部程序通过发送网络请求的方式来连接MySQL服务器,这时首先每…

Leetcode239. 滑动窗口最大值

问题描述: 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,…

Python爬虫教程:从入门到精通

Python爬虫教程:从入门到精通 前言 在信息爆炸的时代,数据是最宝贵的资源之一。Python作为一种简洁而强大的编程语言,因其丰富的库和框架,成为了数据爬取的首选工具。本文将带您深入了解Python爬虫的基本概念、实用技巧以及应用…

文件下载漏洞

文件安全 文件下载 常见敏感信息路径 Windows C:\boot.ini //查看系统版本 C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件 C:\Windows\repair\sam //存储系统初次安装的密码 C:\Program Files\mysql\my.ini //Mysql配置 C:\Program Files\mysql\data\mysql\user.…

Python小游戏13——植物大战僵尸

代码 import random import time # 植物类 class Plant: def __init__(self, name, health): self.name name self.health health def is_alive(self): return self.health > 0 # 僵尸类 class Zombie: def __init__(self, name, health): self.name name self.health h…

Tornado简单使用

Tornado简单使用 1 介绍 Tornado 是一个基于Python的Web服务框架和 异步网络库,它最初由 FriendFeed 开发,后来被 Facebook 收购并开源,通过利用非阻塞网络 I/O, Tornado 可以承载成千上万的活动连接,完美的实现了 长连接、WebS…

关于 Linux 内核“合规要求”与俄罗斯制裁的一些澄清

原文:Michael Larabel - 2024.10.24 当 一些俄罗斯的 Linux 开发者被从内核的 MAINTAINERS 文件中移除 时,原因被描述为“合规要求”,但并未明确这些要求具体涉及什么内容。随后,Linus Torvalds 对此发表了评论,明确指…

SIP 业务举例之 三方通话:邀请第三方加入的信令流程

目录 1. 3-Way Conference - Third Party Is Added 简介 2. RFC5359 的 3-Way Conference - Third Party Is Added 信令流程 3. 3-Way Conference - Third Party Is Added 总结 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信)…

[bug] vllm 0.6.1 RuntimeError: operator torchvision::nms does not exist

[bug] vllm 0.6.1 RuntimeError: operator torchvision::nms does not exist 环境 python 3.10 torch 2.4.0cu118 torchvision 0.19.0cu118 vllm 0.6.1.post2cu118问题详情 if torch._C._d…

Spring Boot框架中小企业设备监控系统开发

3系统分析 3.1可行性分析 通过对本中小企业设备管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本中小企业设备管理系统采用Spring Boot框架&#xff0…

ubuntu20.04上使用 Verdaccio 搭建 npm 私有仓库

安装nvm 首先安装必要的工具: apt update apt install curl下载并执行nvm安装脚本: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash添加环境变量(如果安装脚本没有自动添加)。编辑 ~/.bash…

java项目之基于web的智慧社区设计与实现(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于web的智慧社区设计与实现。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于web的智…

使用TimeShift备份和恢复Ubuntu Linux

您是否曾经想过如何备份和恢复您的Ubuntu或Debian系统?TimeShift是一个强大的备份和还原工具。TimeShift允许您创建系统快照,提供了一种在出现意外问题或系统故障时恢复到先前状态的简便方式。您可以使用RSYNC或BTRFS创建快照。 有了这个介绍&#xff0…