Erlo

测试人必会的 Mock Server 技能

2021-02-26 12:00:14 发布   321 浏览  
页面报错/反馈
收藏 点赞


这是无量测试之道的第193篇原创



  • Mock 是什么?

  • Mock Server 是什么?

  • Mock Server 的常用场景

  • Mock Server 搭建

    • 1.借助第三方工具直接提供 Mock Server

    • 2.自主编码实现 Mock Server(Flask)

  • 总结



Mock 是什么?


Mock 是模拟的意思。在测试中,通常表述为:对测试过程中不容易构造或者不容易获取的对象,用一个虚拟的对象来进行模拟的一个过程。


那么哪些对象不容易构造?哪些对象不容易获取呢?

  • 拿微服务举例,在一个调用链条上,微服务 A 依赖 B 服务才能提供服务,而微服务 B 依赖 C 服务, 微服务 C 依赖 D 服务.....在这样的情况下,把每个依赖的服务都构造完毕再开始测试,就变得不太现实。这种情况我们称之为不容易构造。


  • 又比如,假设我们的服务依赖银行的接口提供资金的查询。在测试中,银行不可能无条件或者随意提供接口给我们调用。那么,在我们开发完毕但是要依赖对方才能开始测试时,我们称这种情况为不容易获取。


无论是哪种情况,使用 Mock 的前提条件是:我们仅关注测试对象自身内部逻辑是否正确,而不关心其依赖对象逻辑的正确性。



Mock Server 是什么?


了解了什么是 Mock,理解 Mock Server 就比较容易了。简而言之,能够提供 Mock 功能的服务就叫作 Mock Server。Mock Server 通过模仿真实的服务器,提供对来自客户端请求的真实响应。


那么 Mock Serve 如何模仿真实的服务器呢?

一般情况下,搭建 Mock Server 前,需要了解将要 Mock 的服务,都能提供哪些功能?对外提供功能时,又以哪种格式提供服务?例如,以接口方式提供服务,接口的种类、接口的定义,以及接口输出的参数等信息。


了解了这些,Mock Server 就可以根据请求的不同,直接静态地返回符合业务规范的接口,也可以在 Mock Server 内部经过简单计算,动态返回符合业务规范的接口。


在实际工作中,Mock Server 通常以 Mock API Server 的形式存在,也就是我们一般以接口的形式对外提供服务,Mock Server 搭建在本地或者远程均可以对外提供服务。



Mock Server 的常用场景


最常见的 Mock Server 的使用场景如下:

  • 前后端联调使用,通过事先约定接口规范,使前端可以不依赖后端服务独立开展工作,这也是开发最常用的功能。


  • 使用 Mock Server 屏蔽无关的真实服务,从而专注于要测试的服务本身。仅仅测试需要测试的服务,其他不在我负责范围的服务使用 Mock。


  • 供测试工程师使用,在测试环境避免调用第三方收费服务。比如,企查查等服务是收费的,在测试环境就可以不调用,以节省费用。


  • 破除第三方依赖。比如,本公司业务流程的某一个步骤需要获取第三方服务的正确返回才能继续进行,那么在测试中就可以用 Mock Server,直接模拟外部 API 的响应来断言系统的正确行为。


以上四条基本可以概括 Mock Server 绝大多数的使用情况。

可以看到,前两条主要是开发之间在使用,那么这个 Mock Server 通常是开发之间协调提供;或者是前端开发根据 API 接口规范,直接写 Hard Code 的响应供自己调用;


或者是后端直接提供一个返回值给前端调用,基于成本和时间考虑,这个返回值通常也是 Hard Code 的。

而后两条就都是跟测试密切相关了,也是今天的分享需要重点关注的。



Mock Server 搭建


Mock Server 的搭建有两种方式,分别是借助第三方工具直接提供 Mock Server,以及自主编码实现 Mock Server。下面将会分别介绍下这两种方式。


1.借助第三方工具直接提供 Mock Server


可以直接提供 Mock Server 功能的第三方工具很多,Postman 是测试人常用的接口测试工具 ,这里我就选择使用Postman的 Mock 功能。Postman 提供了三种方式创建 Mock Server,我们直接选择第一种,并以 Postman 官方给的例子来看下如何不写代码创建 Mock Server。


(1)打开 Postman, 点击"+New" button。


(2)在弹出来的"Create New"选项中点击 Mock Server 。


(3)Postman 支持"Create a new API"或者"Use collection from this workspace"两种方式来创建 Mock Server。


简单起见,我们选择“Create a new API”。在下图中我们选择请求方法,可以是 GET、POST、UPDATE,也可以是 DELETE,也就是我们常说的增删查改。然后输入请求路径,需要返回的 HTTP 响应码,以及响应的 Body,可以模拟多个 API 接口。全部设置好后点击下一步。


(4)然后,你将看到下图 4 个需要配置的地方。


  • 输入 Mock Server 的名称。


  • 选择一个环境(可选),通常我们的测试环境有好几个,你可以配置使用不同的测试环境。


  • 是否要将 Mock Server 设为私有。


  • 是否将 Mock Server 的 URL 保存为环境变量。


等你都配置好后,单击下一步继续。


(5)当你看到如下界面,说明配置成功。此时你的简易版 Mock Server 就生成了。记录下生成的 URL,然后在你的测试中调用相应的 URL 地址即可。


在上述例子中,我在第(3)步设置了 echo 这个接口,它是个 GET 请求,你就可以直接在浏览器输入 http://mock-server-url/echo 这样的方式来访问,需要替换这里 mock-server-url 为图中的地址。

如果是 POST 请求,你也可以自定义参数,Request Body 等等。


2.自主编码实现 Mock Server(Flask)


使用第三方工具创建 Mock Server 比较简单,但是由于严重依赖于第三方工具,在实际工作中,一般用作开发完成后的第一轮手工测试。而业务上线后,在测试框架中使用时,我们还是倾向于根据业务规则自主编码实现 Mock Server。


当前,Github 上有很多成熟的 Mock Server 可供我们使用,根据编程语言的不同,最常见的有如下几个:

  • Java - Mock Server(https://github.com/mock-server)


  • Python - responses(https://github.com/getsentry/responses)


  • JavaScript - easy Mock(https://github.com/easy-mock/easy-mock)


这些 Mock Server 的搭建非常简单,按照步骤操作即可。

下面讲下 Mock Server 的另外一个普遍搭建过程,即使用 Flask 框架来充当 Mock Server。

Flask 是一个微 Web 框架,使用 Python 语言编写。使用它可以快速完成功能丰富的中小型网站或 Web 服务的实现。


(1)  首先你要保证系统已经安装好 Flask,并确保你的机器有 Python 运行环境。

pip install flask


(2)  创建一个 Python 文件,例如:test_mock_with_flask.py,代码如下:

from flask import Flask, request, json, abort

app = Flask(__name__)

@app.route('/', methods=['GET'])
def hello():
return 'hello world'

@app.route('/mock', methods=['POST','GET'])
def mock():
"""
模拟调用第三方服务,查询账户余额。
:return:
"""

if request.method == 'GET':
abort(404)

else:
try:
name = request.form['name']
print(name)
if name == 'Candy':
data = {"status": 200, "message": "success", "text": {"available_balance": 200000}}
else:
data = {"status": 400, "message": "fail", "text": {}}
except:
data = {"status": 500, "message": "system error", "text": {}}
return json.dumps(data)


if __name__ == "__main__":
app.run()


这段代码实现了这一功能:访问 http://127.0.0.1:5000,直接返回“hello world”,如下图所示:

直接使用 GET 方式访问http://127.0.0.1:5000/mock,会出现 404 错误,如下图所示。


如果使用 POST 方式,假设提交的数据中包括“name=Candy”这个键值对,则返回如下结果:

{"status": 200, "message": "success", "text": {"available_balance": 200000}}

如果你提交的数据中不包括“name=Candy”, 则返回如下结果:

{"status": 400, "message": "fail", "text": {}}

如果代码在运行过程中发生了错误,则返回如下结果:

{"status": 500, "message": "system error", "text": {}}

这其实就是一个最简单的Mock Server。


(3)  启动这个 Flask 服务。

打开命令行工具,在你的 Terimal 里运行以下命令行,以启动这个 Mock Server。

python test_mock_with_flask.py


(4)  测试 Mock Server。
首先安装 curl。
curl 是一个利用 URL 语法在命令行方式下工作的文件传输工具。由于它支持 HTTP 协议及其请求方法,故也可以用来发送 HTTP 请求。

# curl的安装和配置,根据操作系统的不同,步骤也不同。
# 如果你使用pip, 可以直接以如下方式安装。

pip install curl

# 如果你发现在你的操作系统下,上述安装方式不起作用,你可以直接在搜索引擎中搜索相关的安装方式。


curl 常用的语法如下:

# 直接发送GET请求
$ curl https://www.helloworld.com

# 添加HTTP请求头访问
$ curl -H "Content-type: application/json" https://www
标签: 好文章
登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认