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字典值排序并取出前n个key值的方法
Oct 17 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
Python中numpy模块常见用法demo实例小结
Mar 16 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 Python
python openpyxl使用方法详解
Jul 18 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
linux下python中文乱码解决方案详解
Aug 28 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
pycharm内无法import已安装的模块问题解决
Feb 12 Python
python入门:argparse浅析 nargs='+'作用
Jul 12 Python
python脚本框架webpy模板赋值实现
Nov 20 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 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
Jquery ui css framework
2010/06/28 Javascript
jquery uaMatch源代码
2011/02/14 Javascript
JavaScript事件委托实例分析
2015/05/26 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
python获取一组汉字拼音首字母的方法
2015/07/01 Python
Python中文竖排显示的方法
2015/07/28 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
Python中装饰器兼容加括号和不加括号的写法详解
2017/07/05 Python
Python装饰器知识点补充
2018/05/28 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
2020/06/24 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
Python3 ID3决策树判断申请贷款是否成功的实现代码
2020/05/21 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
开业典礼主持词
2014/03/21 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
如何做好员工培训计划?
2019/07/09 职场文书
签证扫盲贴,41个常见签证知识,需要的拿走
2019/08/09 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python