Python Mock模块原理及使用方法详解


Posted in Python onJuly 07, 2020

一、mock是什么?

英译中含义有:虚假的; 不诚实的; 模仿的; 模拟的 这个意思

这个库的主要功能就是模拟一些事务

官方解释:Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为

二、为什么要用mock?

举例:

假设你开发一个项目,里面包含了一个登录模块,登录模块需要调用身份证验证模块中的认证函数,该认证函数会进行值的返回,然后系统根据这个返回值来做判断是否能进行登录。但是身份证验证模块中的认证函数只有在正式上线的系统上才提供。公司内部的测试环境或者开发环境上不提供。

如果此时需要进行登录模块的业务测试或接口测试,该如何做?

方法一:

搭建一个测试服务器,在测试的时候,让认证函数和这个测试服务器交互,返回值给登录模块;

缺点:

1、测试服务器可能不好搭建,或者搭建效率很低;

2、搭建的测试服务器可能无法返回所有可能的值,或者需要大量的工作才能达到这个目的。
方法二:

使用mock函数模拟即可。

三、mock应用

3.1 mock安装

在Python 3.3以前的版本中,需要另外安装mock模块,可以使用pip命令来安装:

pip install mock

从Python 3.3开始,mock模块已经被合并到标准库中,被命名为unittest.mock,可以直接import进来使用:

from unittest import mock

备注:目前Python 3.3之后的版本,也可以使用第一种方式应用mock

3.2 mock简单举例

from unittest import mock
def add(num1,num2):
  return num1 + num2  # pass

add_value = mock.Mock(return_value=200) # 创建mock对象
add = add_value # 把mock对象赋值给add方法

print( add(10,20) )

从上述代码执行可以看出,假使我把add()方法的实现改为pass,暂时还未实现,也可以通过mock先返回所需要的数据。

3.3 mock应用举例

import requests
def send_request(url):
  r = requests.get(url)
  return r.status_code

def visit_newdream():
  return send_request("http://www.hnxmxit.com/")

print( visit_newdream() )

上述代码是访问我们公司的官网,假设该官网访问请求还没被实现,此时 visit_newdream() 方法需要 send_request 返回响应状态码。这个时候可以用到mock。

# 当前文件名为 mock_demo.py
import unittest
from unittest import mock
import requests
import mock_demo

def send_request(url):
  r = requests.get(url)
  return r.status_code

def visit_newdream():
  return send_request("http://www.hnxmxit.com/")

class TestClient(unittest.TestCase):
  def test_success_request(self):
    success_send = mock.Mock(return_value='200')
    mock_demo.send_request = success_send
    self.assertEqual(mock_demo.visit_newdream(), '200')

if __name__=="__main__":
  unittest.main()

上述代码完成了mock的简单应用,由于mock_demo.send_request = success_send 把mock对象赋值给了方法,使得方法再次调用的时候使用了mock的方法完成把模拟返回值传递给mock_demo.visit_newdream()方法。

四、小结

  • 此文基础的介绍了mock的入门;
  • 读者实操出来有一定的想法后完全可以应用到接口测试和单元测试过程中去。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
python使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
如何将python中的List转化成dictionary
Aug 15 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
解决pycharm运行出错,代码正确结果不显示的问题
Nov 30 Python
Python格式化字符串f-string概览(小结)
Jun 18 Python
python实现拉普拉斯特征图降维示例
Nov 25 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
python实现滑雪者小游戏
Feb 22 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
python 如何用urllib与服务端交互(发送和接收数据)
Mar 04 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 #Python
PyTorch: Softmax多分类实战操作
Jul 07 #Python
opencv 形态学变换(开运算,闭运算,梯度运算)
Jul 07 #Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 #Python
Python基于httpx模块实现发送请求
Jul 07 #Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 #Python
Pytorch损失函数nn.NLLLoss2d()用法说明
Jul 07 #Python
You might like
php学习笔记 数组的常用函数
2011/06/13 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
jQuery中offsetParent()方法用法实例
2015/01/19 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
一文搞懂ES6中的Map和Set
2019/05/20 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
详解Python迭代和迭代器
2016/03/28 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
python文本数据相似度的度量
2018/03/12 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
Python-opencv 双线性插值实例
2020/01/17 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
小学红领巾中秋节广播稿
2014/01/13 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
借条格式范本
2015/05/25 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书
详解Java实践之建造者模式
2021/06/18 Java/Android