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使用Flask框架获取当前查询参数的方法
Mar 21 Python
在Python中封装GObject模块进行图形化程序编程的教程
Apr 14 Python
Python 文件处理注意事项总结
Apr 10 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
dataframe设置两个条件取值的实例
Apr 12 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
Apr 22 Python
python 提高开发效率的5个小技巧
Oct 19 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
cookies应对python反爬虫知识点详解
Nov 25 Python
详解python中的异常捕获
Dec 15 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启用sphinx全文搜索的实现方法
2014/12/24 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
PHP实现八皇后算法
2019/05/06 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
如何在PHP中生成随机数
2020/06/04 PHP
PHP重载基础知识回顾
2020/09/10 PHP
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
jquery右下角自动弹出可关闭的广告层
2015/05/08 Javascript
jquery性能优化高级技巧
2015/08/24 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
Python入门篇之条件、循环
2014/10/17 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
2019/08/05 Python
pymysql 开启调试模式的实现
2019/09/24 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
从零开始的TensorFlow+VScode开发环境搭建的步骤(图文)
2020/08/31 Python
使用CSS3配合IE滤镜实现渐变和投影的效果
2015/09/06 HTML / CSS
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
咖啡店自主创业商业计划书
2014/01/22 职场文书
优秀交警事迹材料
2014/01/26 职场文书
监督检查工作方案
2014/05/28 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
党的群众路线教育实践活动个人整改落实情况汇报
2014/10/28 职场文书
2015个人半年总结范文
2015/03/09 职场文书
青年联谊会致辞
2015/07/31 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
python垃圾回收机制原理分析
2022/04/13 Python