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 相关文章推荐
Python学习资料
Feb 08 Python
以一段代码为实例快速入门Python2.7
Mar 31 Python
Python 专题三 字符串的基础知识
Mar 19 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
Jun 08 Python
python issubclass 和 isinstance函数
Jul 25 Python
Python守护进程实现过程详解
Feb 10 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 Python
Jupyter打开图形界面并画出正弦函数图像实例
Apr 24 Python
Pyinstaller加密打包应用的示例代码
Jun 11 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 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
mysql 中InnoDB和MyISAM的区别分析小结
2008/04/15 PHP
javascript 面向对象编程基础:封装
2009/08/21 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
浅谈struts1 & jquery form 文件异步上传
2017/05/25 jQuery
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
JS实现小米轮播图
2020/09/21 Javascript
Python使用sorted排序的方法小结
2017/07/28 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
简单介绍python封装的基本知识
2019/08/10 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
zooplus波兰:在线宠物店
2019/07/21 全球购物
餐饮加盟计划书
2014/01/10 职场文书
成绩单家长评语大全
2014/04/16 职场文书
小学生环保倡议书
2014/05/15 职场文书
法律系毕业生求职信
2014/05/28 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
谢师宴家长致辞
2015/07/27 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
python和anaconda的区别
2022/05/06 Python