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进阶教程之异常处理
Aug 30 Python
python实现得到一个给定类的虚函数
Sep 28 Python
Python查询阿里巴巴关键字排名的方法
Jul 08 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
Python切片操作深入详解
Jul 27 Python
python实现列表中最大最小值输出的示例
Jul 09 Python
详解Python中的正斜杠与反斜杠
Aug 09 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
python 基于wx实现音乐播放
Nov 24 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中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
基于jQuery的弹出警告对话框美化插件(警告,确认和提示)
2010/06/10 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
JavaScript中的关联数组问题
2015/03/04 Javascript
jQuery使用fadeout实现元素渐隐效果的方法
2015/03/27 Javascript
深入分析JSON编码格式提交表单数据
2015/06/25 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
详细讲解Python中的文件I/O操作
2015/05/24 Python
django接入新浪微博OAuth的方法
2015/06/29 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
django 在原有表格添加或删除字段的实例
2018/05/27 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
如何基于Python实现自动扫雷
2020/01/06 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
行政主管职责范本
2014/03/07 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
英语辞职信怎么写
2015/02/28 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
Tomcat弱口令复现及利用
2022/05/06 Servers