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

作者:蓝 寅 时间:2023-03-31 14:13:56 

一、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的入门;

  • 读者实操出来有一定的想法后完全可以应用到接口测试和单元测试过程中去。

来源:https://www.cnblogs.com/dream66/p/13199395.html

标签:python,Mock,模块
0
投稿

猜你喜欢

  • python 决策树算法的实现

    2022-10-15 05:49:56
  • python飞机大战游戏实例讲解

    2021-12-07 14:43:26
  • golang 实现时间滑动窗口的示例代码

    2024-02-13 18:22:18
  • 解析array splice的移除数组中指定键的值,返回一个新的数组

    2023-11-18 09:51:28
  • MySQL Workbench操作图文详解(史上最细)

    2024-01-14 01:44:14
  • Mysql Explain命令的使用与分析

    2024-01-29 08:39:04
  • MySQL两种表存储结构性能比较测试过程

    2007-12-09 12:45:00
  • python实现K最近邻算法

    2021-06-18 04:05:46
  • Python捕获异常堆栈信息的几种方法(小结)

    2022-02-19 08:01:30
  • vue中v-show和v-if的异同及v-show用法

    2023-07-02 17:09:11
  • sqlserver主键设计的注意点

    2012-08-21 10:42:44
  • Python实现GUI计算器(附源码)

    2022-06-07 03:32:47
  • python取均匀不重复的随机数方式

    2022-07-06 15:28:02
  • 通过底层源码理解YOLOv5的Backbone

    2023-07-15 20:37:01
  • 图文详解laravel多对多关联模型

    2023-06-12 22:21:34
  • python ChainMap管理用法实例讲解

    2022-05-01 19:02:22
  • Python3 类型标注支持操作

    2021-12-25 05:39:41
  • asp如何验证字符串是否包含有效字符?

    2009-11-08 19:02:00
  • python模型集成知识点总结

    2023-08-03 00:16:16
  • Python自动化实现抖音自动刷视频

    2022-06-05 19:12:37
  • asp之家 网络编程 m.aspxhome.com