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根据京东商品url获取产品价格
Aug 09 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
Jan 11 Python
Python3实现的字典遍历操作详解
Apr 18 Python
Anaconda2 5.2.0安装使用图文教程
Sep 19 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
python语言基本语句用法总结
Jun 11 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
Python从列表推导到zip()函数的5种技巧总结
Oct 23 Python
Django 框架模型操作入门教程
Nov 05 Python
Python字典生成式、集合生成式、生成器用法实例分析
Jan 07 Python
Tensorflow累加的实现案例
Feb 05 Python
python实现A*寻路算法
Jun 13 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加MYSQL服务器
2006/10/09 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
JavaScript中的eval()函数详解
2013/08/22 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
演讲开场白和结束语
2015/05/29 职场文书
安全生产会议制度
2015/08/06 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
SpringRetry重试框架的具体使用
2021/07/25 Java/Android