浅谈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链路了。

相关文章
|
前端开发
什么是 Mock 测试?掌握 Mock 测试的核心原理
Mock 的意思就是,当你很难拿到源数据时,你可以使用某些手段,去获取到跟源数据相似的假数据,拿着这些假数据,前端可以先行开发,而不需要等待后端给了数据后再开发。
|
XML 前端开发 测试技术
【前端小技巧】如何使用 Eolink Apilkit 调用 Mock ?
在开发过程中,进度比较赶的情况下,前端人员当页面写完时,后台的接口还没写完,等要交付的时候后端才把接口给你,这个时候就很尴尬。 这个时候 Mock 就可以很好的解决这个问题,前端团队可以在 API 还没开发完成的情况下,借助 Mock API 实现预对接,加速开发进程。测试团队可以通过 Mock API 解决不必要的系统,完成集成测试。 Eolink Apikit 为前端工程师提供 API 文档管理,快速接口测试,以及 Mock API 创建与调用,及查看文档变更历史的能力。有助于前端工程师快速查看 API 文档详情与历史记录,快速生成和使用 Mock API 提前进行页面效果验证。
80 0
|
1月前
|
安全 测试技术 API
如何实现API接口的自动化测试?
实现API接口的自动化测试涉及多个关键步骤:确定测试范围和目标、编写测试用例、选择自动化测试工具、搭建测试环境、编写测试脚本、执行测试、分析结果和回归测试。选择合适的工具和考虑团队熟悉度是成功的关键。常用工具包括Postman、JMeter和SoapUI。通过这些步骤和工具,可以有效提高测试效率和质量,确保API的稳定性和可靠性。
|
5月前
|
前端开发 JavaScript
前端模拟接口工具推荐——Apifox(mock数据)【图解教程】
前端模拟接口工具推荐——Apifox(mock数据)【图解教程】
1812 1
|
前端开发 JavaScript 测试技术
【Eolink Apikit】Mock 解决方案
在开发过程中,由于后端与前端并行开发,或者前端需要等待后台开发,难以保证对接效率,同时即使用开发好的 API 对接,也有可能一个 API 不通就阻塞了整个软件的对接工作。同时对软件的敏感度也很高,一不小心就可能导致整个软件不能正常工作。并且界面之间存在着严重的相互依赖关系,产生的业务逻辑非常复杂,这些都会对软件的开发效率产生很大的影响。 所以学习如何利用最好的 Mock 数据是很关键的。这样做会降低前端开发者的工作量,降低开发费用,提高开发效率。 以下是一些常见的 Mock 方法,我们可以根据具体的场景和条件来进行选择和配置。最关键的是要知道如何去做,并从中挑选出最适合自己的方式。
309 0
【Eolink Apikit】Mock 解决方案
|
JSON 前端开发 JavaScript
封装库/工具库中重要概念之mock数据
在前端开发中,Mock数据是一个非常重要的概念。它能够帮助我们在没有后端API支持的情况下,模拟数据源并进行开发测试。随着前端技术的发展,越来越多的封装库和工具库提供了Mock数据的功能。在本文中,我们将探讨前端中封装库和工具库在Mock数据方面的作用。
231 0
|
JSON 数据格式 微服务
接口测试开发之:一篇搞懂微服务测试中的参数传递
接口测试开发之:一篇搞懂微服务测试中的参数传递
216 0
如何用Apifox 的智能Mock功能?
大家好。继上一章节我们学习了Apifox的前置操作和后置操作,我们基本上学会了如何使用Apifox 去测试一个接口了。现在我们开始学习Apifox的强大的Mock功能。 今天我们学习下最简单的智能Mock 功能。
|
前端开发 测试技术
接口测试平台代码实现102:GraphQL-2
接口测试平台代码实现102:GraphQL-2
接口测试平台代码实现102:GraphQL-2
|
JSON 运维 监控
接口测试框架实战 | 流程封装与基于加密接口的测试用例设计
接口测试仅仅掌握 Requests 或者其他一些功能强大的库的用法,是远远不够的,还需要具备能根据公司的业务流程以及需求去定制化一个接口自动化测试框架的能力。所以,接下来,我们主要介绍下接口测试用例分析以及通用的流程封装是如何完成的。 首先在做用例分析之前,可以通过追查公司一年来所有的故障原因,定位问题起因,或者通过与 CTO、产品经理、研发、运维、测试调查,得到质量痛点,还可以分析业务架构、