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中实现远程调用(RPC、RMI)简单例子
Apr 28 Python
Python中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
python批量生成本地ip地址的方法
Mar 23 Python
Python中文分词实现方法(安装pymmseg)
Jun 14 Python
Python遍历目录并批量更换文件名和目录名的方法
Sep 19 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
Python使用Tkinter实现机器人走迷宫
Jan 22 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 Python
python挖矿算力测试程序详解
Jul 03 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
python 多线程爬取壁纸网站的示例
Feb 20 Python
Python爬虫制作翻译程序的示例代码
Feb 22 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
杏林同学录(八)
2006/10/09 PHP
PHP合并数组+与array_merge的区别分析
2010/08/01 PHP
Destoon实现多表查询示例
2014/08/21 PHP
php获取textarea的值并处理回车换行的方法
2014/10/20 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
JQuery each打印JS对象的方法
2013/11/13 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
[47:26]完美世界DOTA2联赛 LBZS vs Forest 第二场 11.07
2020/11/09 DOTA
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
详解Python当中的字符串和编码
2015/04/25 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
python提取xml里面的链接源码详解
2019/10/15 Python
python取均匀不重复的随机数方式
2019/11/27 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
Python实例教程之检索输出月份日历表
2020/12/16 Python
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
农村改厕实施方案
2014/03/22 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
行政申诉状范文
2015/05/20 职场文书
小学生暑假生活总结
2015/07/13 职场文书
运动会致辞稿
2015/07/29 职场文书
导游词之无锡梅园
2019/11/28 职场文书