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开发WebService系列教程之REST,web.py,eurasia,Django
Jun 30 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
Python yield 使用浅析
May 28 Python
Python中的默认参数详解
Jun 24 Python
python查看zip包中文件及大小的方法
Jul 09 Python
Django Admin实现上传图片校验功能
Mar 06 Python
python图片验证码生成代码
Jul 02 Python
python 寻找list中最大元素对应的索引方法
Jun 28 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
Numpy之reshape()使用详解
Dec 26 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
一劳永逸彻底解决pip install慢的办法
May 24 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数据库用户认证系统代码
2007/03/22 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
Prototype 工具函数 学习
2009/07/23 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
vue中使用echarts的示例
2021/01/03 Vue.js
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
Python3常用内置方法代码实例
2019/11/18 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
Python如何合并多个字典或映射
2020/07/24 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
护士演讲稿范文
2014/01/05 职场文书
高中军训感言400字
2014/02/24 职场文书
高等教育学专业自荐书
2014/06/17 职场文书
满月酒邀请函
2015/01/30 职场文书
安徽导游词
2015/02/12 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
2016情人节宣传语
2015/07/14 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
2021/04/05 Python
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL