Python Mock模块原理及使用方法详解

 更新时间:2020年07月07日 15:38:12   作者:蓝 寅  
这篇文章主要介绍了Python Mock模块原理及使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、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简单实现刷新智联简历

    本文给大家分享的是个人弄的一个使用Python简单实现刷新智联招聘简历的小工具的代码,非常的简单,给大家参考下吧。
    2016-03-03
  • python 多态 协议 鸭子类型详解

    python 多态 协议 鸭子类型详解

    这篇文章主要为大家介绍了python 多态 协议 鸭子类型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • python lambda表达式(匿名函数)写法解析

    python lambda表达式(匿名函数)写法解析

    这篇文章主要介绍了python lambda表达式(匿名函数)写法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 初步讲解Python中的元组概念

    初步讲解Python中的元组概念

    这篇文章主要介绍了初步讲解Python中的元组概念,是Python入门中的基础知识,需要的朋友可以参考下
    2015-05-05
  • 基于Python实现对比Exce的工具

    基于Python实现对比Exce的工具

    这篇文章主要介绍了基于Python实现对比Excel的小工具,通过循环对比组合列(主键+对比列)结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2022-04-04
  • python散点图双轴设置坐标轴刻度的实现

    python散点图双轴设置坐标轴刻度的实现

    散点图是一种常用的图表类型,可以用来展示两个变量之间的关系,本文主要介绍了python散点图双轴设置坐标轴刻度的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 使用Python搭建虚拟环境的配置方法

    使用Python搭建虚拟环境的配置方法

    python 的虚拟环境可以为一个 python 项目提供独立的解释环境、依赖包等资源,既能够很好的隔离不同项目使用不同 python 版本带来的冲突,而且还能方便项目的发布。这篇文章主要介绍了使用Python虚拟环境,需要的朋友可以参考下
    2018-02-02
  • 使用 Python 列出串口的实现方法

    使用 Python 列出串口的实现方法

    有时在编程时,我们需要获取有关系统中可用通信端口的信息, 我们将讨论如何使用 Python 来做到这一点,将讨论使用串口或 com 端口的通信, 我们将深入探索 Python 包,以帮助我们获得系统的可用通信端口,感兴趣的朋友一起看看吧
    2023-08-08
  • python 信息同时输出到控制台与文件的实例讲解

    python 信息同时输出到控制台与文件的实例讲解

    今天小编就为大家分享一篇python 信息同时输出到控制台与文件的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • pytorch 实现查看网络中的参数

    pytorch 实现查看网络中的参数

    今天小编就为大家分享一篇pytorch 实现查看网络中的参数,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01

最新评论