微服务架构下的测试策略
源宝导读:最近几年,微服务架构越来越火爆,逐渐被企业所采用。随着软件架构的变化,对应的软件测试策略需要作何调整呢?本文将介绍云客在微服务架构下的测试策略。
一、云客测试策略模型
策略分析
行业内的测试策略是一个先底层再上层、从局部到整体的一个过程:
从行业内的演进过程可以看到,项目测试策略在不同阶段结合参考了不同的策略模型:金字塔->近似钻石->蜂巢。
基于行业经验,结合我们实际的架构特点,云客同样划分为不同的层级进行测试:客户端、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
微服务架构下的测试策略相关推荐
- 微服务架构下的测试之道
作者:袁慎建,崇尚简约,热爱编程 && 运动健身 && 知识分享,擅长敏捷开发实践,持续集成 && 持续交付,关注代码整洁 && TDD ...
- 在微服务架构下基于 Prometheus 构建一体化监控平台的最佳实践
欢迎关注方志朋的博客,回复"666"获面试宝典 随着 Prometheus 逐渐成为云原生时代的可观测事实标准,那么今天为大家带来在微服务架构下基于 Prometheus 构建一体 ...
- 微服务架构下静态数据通用缓存机制
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | my.oschina.net/u/3971241/bl ...
- 微服务架构下的静态数据通用缓存机制!
什么是静态数据 为什么需要缓存 通用缓存机制 总结 后记 在分布式系统中,特别是最近很火的微服务架构下,有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案,这篇文章将结合一些实际的研发经验 ...
- 如何在微服务架构下进行数据设计?
作者:唐建法 && Mongoing中文社区 来自:http://www.mongoing.com/ 微服务是一个软件架构模式,对微服务的讨论大多集中在容器或其他技术是否能很好的实施微 ...
- Spring Cloud Alibaba 一致性挑战:微服务架构下的数据一致性解决方案
本讲咱们填之前埋下的一个坑,如何在微服务架构下有效保障数据一致性问题.本讲咱们涉及三方面内容: CAP 原则与 BASE 定理: TCC 一致性解决方案: Seata TCC 模式. 首先咱们了解什么 ...
- 用友云微服务架构下配置文件管理利器:配置中心
微服务架构是这几年IT领域的一个高频词汇,越来越多的项目和应用正在以微服务的思想进行重构.相比于单体应用和SOA架构,微服务优势也逐渐凸显,被广大架构师和技术人员引入和推崇.当然,单体应用.SOA.微 ...
- 代码管理规范_微服务架构下代码管理规范
当下对于代码的管理,主要采用GitLab或GitHub,然而使用git进行代码管理过程中,一般有四种开发模式,分别为主干开发主干发布,主干开发分支发布,分支开发主干发布,分支开发分支发布.四种开发模式 ...
- Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转
原文地址:http://mp.weixin.qq.com/s/eXvoJew3bjFKzLLJpS0Otg 随着微服务架构的推广,越来越多的公司采用微服务架构来构建自己的业务平台.就像前边的文章说的, ...
最新文章
- 利用BP神经网络教计算机识别语音特征信号(代码部分SLR)
- python islower函数_python字符串是否是小写-python 字符串小写-python islower函数-python islower函数未定义-嗨客网...
- vue-cli起的webpack项目 用localhost可以访问,但是切换到ip就不可以访问
- openfire client聊天消息交互和存储离线(在线)消息记录策略
- LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)
- 第二代飞信机器人“小达”问世了
- 智能设备破解的那些事儿
- tf2.1下生成yolo.h5文件
- CSS基础-标签显示模式(display)【学习笔记】
- 使用Asp.net MVC 2.0 +.NET 4.0 出现 “从客户端 ... 中检测到有潜在危险的 Request.Form 值”错误的解决办法...
- _.findIndex(array, [predicate=_.identity], [fromIndex=0])
- !!终于把【库存管理的大致功能完成了!】
- java awt run_JAVA教程 第五讲 AWT图形用户界面设计(一)
- 一文了解数据分析师与商业分析师的区别(二)
- 新账户的收发邮件服务器,轻松使用新电子邮件系统-信息化建设与管理处
- 计算机插补,第三章计算机数控装置的插补原理.doc
- 实用技能一:防抖与节流
- 大计基编程题(第十二周)
- 计算机网络习题——第3章 数据链路层
- SwipeRefreshLayout+CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+RecyclerView 嵌套,最后一项显示全
热门文章
- kaggle入门项目:Titanic存亡预测(三)数据可视化与统计分析
- js 控制超出字数显示省略号
- [cf797c]Minimal string(贪心+模拟)
- SHELL 脚本小技巧
- JIL 编译与 AOT 编译
- 父元素 高度固定,如何使其中的文字垂直居中?
- Redis: Useful commands
- assistant字体_如何使用Google Assistant设置和致电家庭联系人
- BZOJ1509: [NOI2003]逃学的小孩(树的直径)
- 导入工程后编译不过,报错: apply plugin: 'com.github.dcendents.android-maven'