浅谈Mock平台设计思路

简介: 根据不同层次的需求,也是存在不同的mock层级,可以参考下面的金字塔模型,越往上mock的级别越“高”,对于用户(测试)越“可见”。方法、类级别一般是开发会用到,例如单测开发。而接口和服务级别是测试进行服务联调测试甚至系统测试过程会用到的。

一、Mock概述

友情提示:本节为小白科普章节,大神可绕路直奔下一章节。

1.1 何为mock?

mock即模拟,可以理解为模拟数据。就接口mock而言,就是mock接口返回结果。

根据不同层次的需求,也是存在不同的mock层级,可以参考下面的金字塔模型,越往上mock的级别越“高”,对于用户(测试)越“可见”。方法、类级别一般是开发会用到,例如单测开发。而接口和服务级别是测试进行服务联调测试甚至系统测试过程会用到的。

1.2 为什么需要mock?

这就有必要介绍一下微服务了,微服务架构下,每个服务只完成一块功能,这些服务共同合作来就可以完成某些更加复杂的操作。与单体的复杂系统不同,开发者需要开发和管理一系列相对简单的服务,而这些服务可能以一些复杂的方式交互。这些服务之间的相互协作可以通过异步方式如消息形式,也可以通过同步方式来完成协作的。而这些服务之间可以独立部署与发布。为了让大家更有体感,以散户交易股票的过程为例

(1)用户创建一个订单,用来出售其账户里某只股票的股份;

(2)账户中的这部分持仓就会被预留下来,这样它就不可以被多次出售了;

(3)提交订单到市场上是要花钱的——账户要缴纳一些费用;

(4)系统需要将这个订单发送给对应的股票交易市场。

可以看到,微服务有三大关键特性。

(1)每个微服务只负责一个功能。这个功能可能是业务相关的功能,也可能是共用的技术功能,比如与第三方系统(如证券交易所)的集成。

(2)每个微服务都拥有自己的数据存储,如果有的话。这能够降低服务之间的耦合度,因为其他服务只能通过这个服务提供的接口来访问它们自己所不拥有的数据。

(3)微服务自己负责编排和协作(控制消息和操作的执行顺序来完成某些有用的功能),既不是由连接微服务的消息机制来完成的,也不是通过另外的软件功能来完成的。

(4)每个微服务都是可以独立部署的。如果做不到这一点,那么到了部署阶段,微服务应用还是一个庞大的单体应用。

(5)每个微服务都是可代替的。每个微服务只具备一项功能,所以这很自然地限制了服务的大小。同样,这也使得每个服务的职责或者角色更加易于理解。

一般来讲,微服务可以根据业务形态划分服务,然后不同的开发负责对应服务的开发与维护。当然一个服务可能不止有一个上游服务调用,甚至存在多个上游调用,而且不同的上游服务存在不同的调用契约。服务之间的调用链路可以参考如下图:

试想如果你是服务A的测试同学A,你的业务需要调用服务C来完成一项业务,即服务A根据服务C的返回结果决定业务的执行结果。那么我是服务B的测试B,也需要调用服务C来完成一项业务,但是我调用服务C和你调用服务C的接口传参不同,返回的结果也可能不同,此外我们依赖的服务C版本号也不同,但是当前环境可能只部署2.0版本,再碰上有时候开发环境不稳定,服务时还是坏,这样服务C就无法同时满足测试A、B同学进行项目测试,而且环境问题也会浪费很多联调时间,导致项目并行难上加难。

而Mock也是为了解决上述问题的,具体来讲Mock解决以下问题:

1.Mock解决环境不稳定的问题。因为Mock服务非常简单,没有业务逻辑,所以它足够稳定。比如说银行那边的接口挂了,全都接到Mock平台的话,所有的请求权会从Mock平台出,而不会跟银行的接口有什么关联。

2.快速构造复杂数据。我们可以自定义一个返回结果,有了自定义的返回结果后,就可以构造非常复杂的数据,不需要银行或者其他第三方给我们准备数据,完全可以用我的数据在返回里面把它定义好,再继续做业务的一个验证。

3.快速构造异常场景。对于一些异常的情况,比如网络延迟高,或者返回特殊异常的时候,也可以用Mock来构造。

二、Mock功能畅想

与其说畅想,不如说是YY,哈哈。

1.多协议支持

不同于单体架构,微服务场景下,RPC协议由于比较高效,所以应用比较多。HTTP(s)、RPC等

2.多格式支持

支持一些常见的Json,Xml,还有其他一些自定义格式都是支持。

3.异常Mock

服务间相互调用,为了保持上下游异常错误做到“通识”性,一般会做服务间的错误码映射,例如服务A调用服务B,则当B返回错误码B-01的时候,需要服务A对外返回错误码A-01,则映射关系A-01 x B-01就建立了。需要支持配置异常错误码。

4.动态mock

当我们需要写一些很复杂的逻辑时,例如:希望当参数没传的时候,返回一个error信息,我们可以在这里用Java的一个返回结果,然后在这里写具体的一个脚本。比如说city=杭州。

5.规则配置

可以理解为动态mock的一种实现方式,根据request的入参,通过一个规则 去决策是否返回mock,或者返回哪个mock。

6.mock管理支持

随着需要mock的服务越来越多,单个服务配置的mock结果越来越多,势必要更高效的管理mock,例如按组、按业务方式管理等

7.mock开关

这个不用多说,开关打开,即服务打开。

8.黑白名单支持

多个项目并行的时候,项目A可能需要联调真实链路,而项目B需要将下游服务Mock掉,此时mock服务就存在问题了,如果打开mock,则会影响到项目A,反正,影响项目B的进行。此时可通过黑白名单方式解决上述问题,将项目A的联调环境中的应用服务器IP加入黑名单中,这样项目A就不会走到mock链路了。

相关文章
|
存储 数据采集 监控
SkyWalking全景解析:从原理到实现的分布式追踪之旅
SkyWalking全景解析:从原理到实现的分布式追踪之旅
1948 1
|
安全 测试技术 数据库
安全测试的最佳实践
安全测试的最佳实践
311 0
|
开发工具 git
如何在vscode编辑器中实时查看代码git记录(被谁修改、自己什么时候修改)
如何在vscode编辑器中实时查看代码git记录(被谁修改、自己什么时候修改)
6218 0
如何在vscode编辑器中实时查看代码git记录(被谁修改、自己什么时候修改)
|
监控 Linux
jmeter-性能监控CPU、内存、IO等-监控插件详解(1)
jmeter-性能监控CPU、内存、IO等-监控插件详解(1)
jmeter-性能监控CPU、内存、IO等-监控插件详解(1)
|
开发者 Docker 容器
DockerFile的ADD和COPY的区别
DockerFile的ADD和COPY的区别
4735 0
|
8月前
|
机器学习/深度学习 数据采集 缓存
打造智能音乐推荐系统:基于深度学习的个性化音乐推荐实现
本文介绍了如何基于深度学习构建个性化的音乐推荐系统。首先,通过收集和预处理用户行为及音乐特征数据,确保数据质量。接着,设计了神经协同过滤模型(NCF),利用多层神经网络捕捉用户与音乐间的非线性关系。在模型训练阶段,采用二元交叉熵损失函数和Adam优化器,并通过批量加载、正负样本生成等技巧提升训练效率。最后,实现了个性化推荐策略,包括基于隐式偏好、混合推荐和探索机制,并通过AUC、Precision@K等指标验证了模型性能的显著提升。系统部署方面,使用缓存、API服务和实时反馈优化在线推荐效果。
773 15
|
10月前
|
机器学习/深度学习 人工智能 监控
探索 AI 在软件开发中的新角色:代码审查与质量保证
【10月更文挑战第22天】本文探讨了AI在软件开发中的新角色,特别是在代码审查和质量保证方面。AI通过静态代码分析、代码风格一致性检查和历史数据学习,提高代码审查的效率和准确性。在质量保证中,AI还能够自动生成测试用例、监控应用性能并持续优化。文章还讨论了AI在软件开发中的实践应用、挑战与机遇,以及实施的最佳实践。
|
网络协议 安全 测试技术
一文带你了解Mock 技术体系
**Mock和测试替身简介** 学习Mock提升测试深度、效率和降低成本。示例:测试股票软件时模拟市场涨跌。Test Double包括Dummy(占位)、Fake(简化的实现)、Stub(预设回答)、Spy(记录行为)和Mock(预编程期望)。Fake如内存数据库,适用于测试。Stub用于预设响应,如Swagger接口。Mock确保收到预期调用。常用Mock工具有WireMock、Mitmproxy等。WireMock用于构建模拟API,支持stub和proxy模式。掌握Mock技术能更好地隔离和测试系统组件。
|
关系型数据库 分布式数据库 数据库
PolarDB资源隔离技术:在多租户环境中的应用与优化
随着云计算普及,多租户架构助力云服务商提供高效服务。阿里云PolarDB采用独特分布式设计,在多租户环境下确保每个用户数据独立与资源隔离。通过逻辑与物理隔离技术,如Schema和分区,结合分布式存储节点,实现资源独占及安全。此技术不仅保障数据安全,还能动态分配资源,满足高性能需求。通过优化资源分配、增强事务处理及监控机制,进一步提升PolarDB在多租户环境中的表现。
364 4
|
存储 缓存 数据库
SqlAlchemy 2.0 中文文档(四十四)(5)
SqlAlchemy 2.0 中文文档(四十四)
280 4