美文网首页
Mock服务或接口的经验笔记

Mock服务或接口的经验笔记

作者: hzhuang | 来源:发表于2019-02-21 17:19 被阅读0次

在测试中,经常遇到下面这种情况:被测对象有时会依赖一些其他对象,比如依赖外部系统,或是所需场景难以模拟。这种情况下,常常会影响测试的速度和稳定性。有时,由于依赖对象无法工作,还会阻塞测试,影响上线时间。为了规避这个风险,常常会使用假对象,来代替真实的对象,很多人习惯统称这种方法为Mock。在测试理论中,其实有一个更精准的概念,叫Test Double。翻译成中文,是测试替身。

Test Double可以进一步细化为:

1.Dummy Object 

2.Test Stub

3.Test Spy

4.Mock Object

5.Fake Object 

经过几篇文档的阅读和总结,作者分析了一下这些概念的意义和区别。

Dummy Object

中文是 傀儡对象。接口测试中,参数中必须传入某对象,而该对象并不会影响测试。

Fake Object

中文是 假对象。是将function重写,不管原有的内部实现方式,目的更着重在让原来不容易被执行或缓慢执行的对象通过这种方式更便捷执行。

Test Stub

中文是 测试桩。Test Stub常用于响应待测系统的请求,然后返回特定的值。接下来,这个值会对待测系统产生影响,然后我们就在测试用例里面去验证这个影响。和Fake Object很类似,区别是,Test Stub需要具有真实依赖对象的很多特性。

Mock Object

与Stub相比,区别是,Stub更偏向于返回期望的数据,而Mock偏向于行为。

Spy Object

与Mock很类似,区别是,Spy不需要对数据进行验证,Mock需要。

参考文章:

https://martinfowler.com/bliki/TestDouble.html

https://stackoverflow.com/questions/3459287/whats-the-difference-between-a-mock-stub

接着,作者想介绍几种实际工作中,用得到的Test Double方法。

方法一:采用python+flask,制作假接口,通过调用假接口获得返回值或进行模拟真操作的行为。

demo代码:

# !flask/bin/python

# -*- coding:utf-8 -*-

from flask import Flask, jsonify

from flask import request

mockResponse = Flask(__name__)

@mockResponse.route('/mockTest/mockTestGet.json', methods=['GET'])

def mockTestGet():

 data = 'mock GET mothod successfully !!!'

 return jsonify({"code": 200, "data": data})

@mockResponse.route('/mockTest/mockTestPost.json', methods=['POST'])

def mockTestPost():

 request_param = request.json

 print('request_param: ', request_param)

 data = 'mock POST mothed successfully !!!'

 return jsonify({"code": 200, "data": data})

if __name__ == '__main__':

 mockResponse.run(host=‘127.0.0.1',port=5000)

执行:

运行python xxx.py,就会起一个服务,可以将mock服务放在测试机上,通过ip+port+接口来调用。

控制台中,能看到调用的情况 

测试:

可以通过curl进行测试,也可以根据实际测试需要,选取合适的方式调用。

curl 127.0.0.1:5000/mockTest/mockTestGet

curl -X POST -H 'Content-Type: application/json' -d '[{"skuId":11061036}]' http://127.0.0.1:5000/mockTest/mockTestPost.json

方法二:利用Charles debug,修改请求的request或response

举例,通过该方法,修改一个获取服务端时间的接口的返回值,模拟当前时间再2022年1月1日的场景。

方法三:编写接口,来模拟真实的复杂业务场景

有些业务场景,会包含非常长的业务流;

有些业务场景,会依赖外部系统,外部系统的使用遇到阻塞;

有些业务场景,会使用线上数据,与测试服数据不对应,导致流程卡主,可能需要在流程中对数据进行。

。。。

这些情况,都可以通过绕开原流程的方式,达到相同的效果。这种方法就不细讲了。

总结

本文对Test Double以及平常经常提到的Mock进行了概念性的整理和分析,然后对日常使用过的几种方法进行了演示和介绍。

相关文章

  • Mock服务或接口的经验笔记

    在测试中,经常遇到下面这种情况:被测对象有时会依赖一些其他对象,比如依赖外部系统,或是所需场景难以模拟。这种情况下...

  • 接口测试Mock与HttpClient

    1.Mock框架 1.1mock介绍: mock可以模拟接口测试,通过运行mock框架的jar,快速搭建接口测试。...

  • 原理先行

    前天在研究 SpringCloud微服务的接口mock方案,网上搜索一筐后,没有现成可用的开源代码,甚至mock的...

  • 如何在Jenkins中跑多个Docker(MySQL、Redis

    在写测试代码时,我们会 mock 各种外部服务(比如测转账,显然不能真的调用银行转账接口),但不会 mock 基础...

  • android开发你必须掌握的mock调试

    mock简介 在你知道mock调试之前,客户端开发一个比较大的问题就是需要配合服务端完成接口的联调工作,在服务端接...

  • mock配置

    后端配置 在apizz的接口中,切换到mock页,配置mock接口的路径(要与真实接口保持一致),同时填入mock...

  • 简单Mock Server服务

    简单Mock Server服务 ​ 最近公司对接了不少客户单点登录,需要调用外部的接口,接口配置等信息给到比较...

  • 接口文档工具 apiPost

    ApiPost = 接口调试+接口文档快速生成+接口文档规范化管理+Mock API+接口流程测试。 生成Mock...

  • 10.4为网站添加Mock数据接口

    Chapter:10.服务端环境搭建和开发过程 10.4为网站添加Mock数据接口 1.创建测试数据 在 mock...

  • koa api测试文档

    api测试重点 测试执行阶段 api接口测试时,需要在构建环境启动服务并且连接mock数据库,mock数据库要通过...

网友评论

      本文标题:Mock服务或接口的经验笔记

      本文链接:https://www.haomeiwen.com/subject/lirdyqtx.html