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的urllib模块显示下载进度示例
Jan 17 Python
速记Python布尔值
Nov 09 Python
Python科学画图代码分享
Nov 29 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
May 26 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
Python使用gRPC传输协议教程
Oct 16 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
Jun 28 Python
Apache部署Django项目图文详解
Jul 30 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
Python类和实例的属性机制原理详解
Mar 21 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
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
php通过array_unshift函数添加多个变量到数组前端的方法
2015/03/18 PHP
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
React简单介绍
2017/05/24 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
Python splitlines使用技巧
2008/09/06 Python
centos下更新Python版本的步骤
2013/02/12 Python
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
Python异常的检测和处理方法
2018/10/26 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
浅析python参数的知识点
2018/12/10 Python
Python Subprocess模块原理及实例
2019/08/26 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
2021/01/28 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
初中三好学生事迹材料
2014/01/13 职场文书
致400米运动员广播稿
2014/02/07 职场文书
四风存在的原因分析
2014/02/11 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
教你使用TensorFlow2识别验证码
2021/06/11 Python
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL