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聊天程序实例代码分享
Nov 18 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
Python断言assert的用法代码解析
Feb 03 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
Python全栈之列表数据类型详解
Oct 01 Python
Django项目中使用JWT的实现代码
Nov 04 Python
python如果快速判断数字奇数偶数
Nov 13 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
Python根据字典的值查询出对应的键的方法
Sep 30 Python
详解Python openpyxl库的基本应用
Feb 26 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中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
PHP微商城开源代码实例
2019/03/27 PHP
Javascript 学习书 推荐
2009/06/13 Javascript
jquery选择器的选择使用及性能介绍
2013/01/16 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
使用JavaScript根据图片获取条形码的方法
2017/07/04 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python简单检测文本类型的2种方法【基于文件头及cchardet库】
2016/09/18 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
Django框架设置cookies与获取cookies操作详解
2019/05/27 Python
python实现数据分析与建模
2019/07/11 Python
Django对models里的objects的使用详解
2019/08/17 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
css sprite简单实例
2016/05/23 HTML / CSS
html+css3实现的登录界面
2020/12/09 HTML / CSS
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
SheIn俄罗斯:时尚女装网上商店
2017/02/28 全球购物
新学期班主任寄语
2014/01/18 职场文书
户外活动策划方案
2014/03/12 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript