微服务架构下的测试策略

源宝导读:最近几年,微服务架构越来越火爆,逐渐被企业所采用。随着软件架构的变化,对应的软件测试策略需要作何调整呢?本文将介绍云客在微服务架构下的测试策略。

一、云客测试策略模型

策略分析

行业内的测试策略是一个先底层再上层、从局部到整体的一个过程:

从行业内的演进过程可以看到,项目测试策略在不同阶段结合参考了不同的策略模型:金字塔->近似钻石->蜂巢。

基于行业经验,结合我们实际的架构特点,云客同样划分为不同的层级进行测试:客户端、BFF层、服务层,跟钻石型的过程是类似的。

各层测试侧重点

服务层不正常可能会影响BFF,BFF不正常可能会影响客户端,但每一层级各自验证的侧重点是不同的:

1

客户端

检查客户端(APP、小程序、WEB站点)操作以及操作后的界面呈现。

2

BFF层

不考虑服务层的实现规则和数据库存储,只关注用户在客户端的不同操作场景下,业务逻辑是否达到预期,确保衔接客户端和服务层是否正确。

3

服务层

对单个服务接口逐个测试,需要考虑入参和出参、数据库存储是否符合预期。

二、BFF层测试策略

BFF层测试面临的问题

由于BFF层的接口通常会调用到多个底层服务接口,由此暴露出一系列问题:

涉及业务场景多

涉及多种缓存    

自动化用例设计难度大

工具的缺失

BFF层测试策略分析

针对以上问题,考虑云客的BFF层测试策略需要达到以下效果:

  • 解决用例设计困难:能快速方便测试人员编写和维护测试用例;

  • 轻量级:减少消耗大量的人力在开发框架上;

  • 易操作:让测试同学都能简易使用,且保证持续集成;

  • 兼容性:能兼容Middleman或公司层面的其他工。

BFF层解决方案

1、录制:对接口进行录制。回归测试时,利用代理进行接口抓包。

2、清洗:清洗数据生成用例。清除掉重复接口、无用接口、补充漏掉接口并生成接口测试用例。

3、回放:利用其它框架运行接口用例。如robotframework ,postman , jemeter ,或自研框架。

4、持续集成:部署自动化。解决cookie等问题,自动化部署进行持续集成。

为了让大家能更清楚的理解我们的策略,结合刚刚介绍的BFF测试策略以及解决方案,这里以智能收款项目为例:

1、录制:通过启动本地代理,使用抓包工具抓取到用户操作的各种场景;

2、清洗:通过脚本过滤获取的接口,进行去重,按照规则筛选,最终生成接口用例;

3、回放:核对生成的接口用例,并运行;

4、持续集成:使用selenium模拟登录拿到登录态后,可以通过Jenkins进行持续集成,最终生成测试报告。

三、服务层测试策略

服务层测试面临的问题

覆盖率

测试用例覆盖率的不足会很大程度上影响测试的效果。

服务依赖   

在测试服务时,常常会遇到服务之间存在依赖的情况。此时无法单独对单个服务进行完整的测试,往往会依赖于其他关联的服务状态。

服务容错

我们对服务的测试,还需要考虑服务的容错和可用性,比如:当服务器的负载达到瓶颈或者当某个服务发布新的升级导致出现问题时,就会遇到服务的熔断、降级。

服务熔断:某个服务出现故障的时候,为了保证系统整体的可用性,会关闭出现故障的服务;

服务降级:当系统整体负荷过载的时候,关闭某些服务来保证系统的整体可用性。

服务层解决方案

服务覆盖率

    通过Middleman工具中测试覆盖率的数据指标,引导测试人员去完善用例,以达到接口的全覆盖。并且在代码提交时,需要保证用例全部通过才允许代码合入。

服务之间的依赖、连通性

    Middleman工具通过内置mock服务,解耦服务间的依赖,只测试那些真正被实际使用到的 API 调用,如果没有被使用到的,就不去测试,具体如下图。

多泳道测试

    核心解决的问题:多个开发并行,测试互不干扰,按分支需要创建,泳道完成环境隔离。

服务的容错性、可用性

    通过服务的熔断、降级的自动化预警工具,当慢SQL增多时,自动化脚本会自动Kill掉符合条件的慢SQL。同时可视化Kill记录、kill异常中断,既方便又直观。

四、云客测试策略

整体解决方案

在测试过程中,我们不难发现云客的产品测试现在正在面临的问题:

迭代频繁

测试时间短

测试评估不全面

测试人员少

随着功能的逐步增加,回归任务重

针对上面提到的微服务对测试的挑战,一方面为了保证在服务各个层级上对微服务进行全面的测试;另一方面又要确保测试执行的效率,这样才能保证持续集成/持续交付(CI/CD)。因此,云客总体的测试策略采用如下解决方法:

以增量测试为主,辅以自动化测试,探索性测试以及checklist检查

测试策略的影响因素不是唯一的,技术架构并不是最关键的因素。业务价值始终是我们的终极目标。在这个终极目标的驱动下,测试策略不是制定完了就可以束之高阁的,需要在整个软件系统构建过程中不断的度量和改进,是演进式的。

------ END ------

作者简介

彭同学: 测试SM,目前负责云客相关的测试方案设计和执行工作。

也许您还想看

基于 Go 的微服务运行情况监控实践

在明源云客,一个全新的服务会经历什么?

“弱中心”化的分布式配置管理技术可行性探索

ERP平台的自动化测试技术实践

为什么容器内存占用居高不下,频频 OOM

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode222. 完全二叉树的节点个数(两种做法)

一:题目 二:今天不上菜 上码了 方法一:前序遍历 求解 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr)…

听红宝书译者谈Web视角下的前端开发

Web视角下的前端开发⏳序言⏰一、关于前端开发1. 起源、架构、变迁(1)起源(2)架构(3)变迁2. 前端应用的领域(1)所面向群体(2)所面向领域3. 语言、框架、工具4…

在家办公这半年,让我开始热爱生活

距离上次更新公众号已经过去一年多了,感觉自己成了“年更姚”。不过好在这个公众号的读者大多是同事朋友(加起来也没有多少好么喂),本身对我也没用太高的期待吧。今天想聊聊远程工作这件事。不过我并不想聊团队成员之间如何远程协…

每天都在红绿灯前面梭行,不如自己来实现个红绿灯?

用js实现一个交通灯🔇前言🔈一、需求分析 - 交通灯🔉二、实现版本1. 版本一:简单粗暴版2. 版本二:数据抽象版3. 版本三:过程抽象版4. 版本四:命令式和声明式🔊三、在线online&#x…

Git 常用操作 | 重写 commit 历史

当我们修改完代码,提交了一个 commit,然后发现改错了,怎么修正?这种情况分为两种:修正最近一次提交,和修正历史多个提交。修正最近一次提交如果发现刚刚提交的内容有错误,当场再修改一下再提交一…

leetcode257. 二叉树的所有路径(两种做法)

一:题目 二:上码 1:DFS /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), …

【LeetCode之C#解法】 移动零、爬楼梯

题目官网链接https://leetcode-cn.com/problems/move-zeroes/283. 移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷…

幂等问题 vs 如何判断是否是4的幂

判断是否是4的幂🤹序言🚴一、需求分析 - 判断是否是4的幂等🤾二、实现版本1. 版本一:中规中矩法2. 版本二:按位与3. 版本三:按位与优化4. 版本四:正则匹配法⛹️三、结束语🤼往期推荐…

leetcode404. 左叶子之和

一:题目 二:上码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(n…

切西瓜法实现微信抢红包功能

运用切西瓜法和栅栏法实现微信抢红包功能✅前言☑️一、需求分析 - 分红包问题🆙二、实现版本1. 版本一:切西瓜法2. 版本二:栅栏法✳️三、在线Online🆗四、结束语🆚往期推荐✅前言 在现实生活中,非常常见…

如何给扑克洗牌才能更公平?

如何给扑克牌洗牌才能更显公平性📻前言一、🎙️需求分析 - 洗牌问题二、💿实现版本1. 版本一:常规思维2. 版本二:验证公平性3. 版本三:交换法则三、📺在线Online四、📹结束语&#x…

这些年我是怎么自学成架构师的(转自知乎)

近日在知乎上一则关于程序员能否“自学成才”的问题,引发了激烈的讨论!各种各样的说法都有,最终变成程序员晒学习经历的帖子。作为十多年.NET技术老兵,纯自学成架构师,也来分享下观点:自学当然有效&#xf…

创新视角下的复盘 | 2021/08/01-2021/09/30

🗂️序言 七月份的时候第一次做月度复盘,发现如果只有每日计划,还是比较零散的。月度复盘可以更直观地看到自己的时间规划和及时纠正当下存在的一些问题。 在8-9月份中,有一半在暑假,一半开始于新学期。 &#x1f4…

TIOBE 9 月榜单:C#上涨1.18,Java 同比下滑3.18

喜欢就关注我们吧!TIOBE 已公布 2020 年 9 月的编程语言排行榜。C 近期发展状态不错,依旧在榜单中排第四,但排名比率保持增长,本月为 7.11%。2003 年是 C 的巅峰时期,当年 8 月,它的 TIOBE 排名峰值为 17.5…

储存引擎InnoDB 索引选择 为何是B+树 而不是 B树 哈希表

一:概述 首先需要澄清的一点是,MySQL 跟 B 树没有直接的关系,真正与 B 树有关系的是 MySQL 的默认存储引擎 InnoDB,MySQL 中存储引擎的主要作用是负责数据的存储和提取,除了 InnoDB 之外,MySQL 中也支持 MyISAM 作为表…

初探react,用react实现一个todoList功能

初探react,用react实现一个todoList功能🛰️前言🚀一、react基础1. react简介2. 开发环境搭建3. 工程目录文件简介4. react中最基础的JSX语法🛸二、使用react编写TodoList功能1. 页面构思2. React中的响应式设计思想和事件绑定3. …

《五分钟商学院》个人篇学习总结(上)

【商业知识】| 作者 / Edison Zhou这是EdisonTalk的第285篇原创内容商业篇聚焦的是我们与外部的关系,管理篇聚焦的是我们与内部的关系,而个人篇聚焦的则是我们与自己的关系。与自己斗,其乐无穷,本文是个人篇的上半部分学习总结。本…

Git 实用操作 | 撤销 Commit 提交

有的时候,改完代码提交 commit 后发现写得实在太烂了,连自己的都看不下去,与其修改它还不如丢弃重写。怎么操作呢?使用 reset 撤销如果是最近提交的 commit 要丢弃重写可以用 reset 来操作。比如你刚写了一个 commit:写…

react只停留在表层?五大知识点带你梳理进阶知识

五大知识点带你梳理react进阶知识✉️前言📧一、props1、PropTypes与DefaultProps应用(1)PropTypes(2)defaultProps2、props,state与render函数📨二、React中的虚拟DOM1、什么是虚拟DOM&#xf…

解决 WPF 绑定集合后数据变动界面却不更新的问题

解决 WPF 绑定集合后数据变动界面却不更新的问题独立观察员 2020 年 9 月 9 日在 .NET Core 3.1 的 WPF 程序中打算用 ListBox 绑定显示一个集合(满足需求即可,无所谓什么类型的集合),以下是 Xaml 代码(瞟一眼就行&…