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自动格式化json文件的方法
Mar 11 Python
python将ip地址转换成整数的方法
Mar 17 Python
在Python中使用列表生成式的教程
Apr 27 Python
在Python中操作文件之seek()方法的使用教程
May 24 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
django静态文件加载的方法
May 20 Python
python交易记录整合交易类详解
Jul 03 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
python线程池如何使用
May 28 Python
python入门教程之基本算术运算符
Nov 13 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
cookies应对python反爬虫知识点详解
Nov 25 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 IP转换整形(ip2long)的详解
2013/06/06 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
php 数据结构之链表队列
2017/10/17 PHP
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
js JSON.stringify()基础详解
2019/06/19 Javascript
编写简单的Python程序来判断文本的语种
2015/04/07 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
python 猴子补丁(monkey patch)
2019/06/26 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
Python创建自己的加密货币的示例
2021/03/01 Python
信息管理专业推荐信
2013/10/29 职场文书
秋季运动会加油稿200字
2014/01/11 职场文书
初一英语教学反思
2014/01/11 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
装修五一活动策划案
2014/01/23 职场文书
领导调研接待方案
2014/02/27 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
合作协议书
2014/04/23 职场文书
环保项目建议书
2014/08/26 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
毕业实习计划书
2015/01/16 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书