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基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
Python生成数字图片代码分享
Oct 31 Python
在Pycharm中自动添加时间日期作者等信息的方法
Jan 16 Python
Python向excel中写入数据的方法
May 05 Python
python os模块简单应用示例
May 23 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
Python使用正则表达式分割字符串的实现方法
Jul 16 Python
TensorFlow索引与切片的实现方法
Nov 20 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
在pycharm中实现删除bookmark
Feb 14 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
Python中json.dumps()函数的使用解析
May 17 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 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
JavaScript学习笔记(十)
2010/01/17 Javascript
javascript之AJAX框架使用说明
2010/04/24 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
python获取本机外网ip的方法
2015/04/15 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
荷兰家电销售网站:Welhof
2020/12/08 全球购物
感恩的演讲稿
2014/05/06 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
专项法律服务方案
2014/06/11 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
python tkinter实现定时关机
2021/04/21 Python
Nginx反向代理配置的全过程记录
2021/06/22 Servers