python接口自动化之mock的使用

【Python版】手把手带你如何进行Mock测试 mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为。 阅读详情

一、Mock是什么?

mock 就是模拟的意思,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为。在接口数据字段还没开发好,我们可以在写接口自动化的时候,事先使用mock数据。

二、为什么要使用的mock?

在做接口测试时,开发还未完成接口的实现,自动化接口测试代码就没办法完成,这个时候就需要用Mock对象库来模拟接口响应结果,等到开发完成接口功能,再把Mock模拟响应结果的代码删除掉,整个自动化接口测试项目就完成了。

三、Mock可以解决哪些场景问题?

  • 接口的依赖
  • 外部接口调用
  • 测试环境非常复杂
    具体来说就是:

1.前后端联调,如果你是一个前端页面开发,现在需要开发一个功能: 下一个订单,支付页面的接口,根据支付结果,支付成功,展示支付成功页,支付失败,展示支付失败页。 要完成此功能,你需要调用后端的接口,根据返回给你的结果,来展示不同的页面。此时后端接口还没开发好,
作为一个前端开发总不能等别人开发好了,你再开发,那你只有加班的命了。 为了同步开发完成任务,此时,你可以根据接口文档的规定,把接口的地址和入参传过去,然后自己mock接口的不同返回界面,来完成前端的开发任务
2.单元测试,单元测试的目的是测试某个小小单元的功能,但现实中开发的函数或方法都是有依赖关系的,比如b函数的参数,需要调用a函数的返回结果,但是我前面已经测试a函数了 这种情况下,就不需要再测一次a函数了,此时就可以用mock模块来模拟调用这部分内容,并给出返回结果。
3.第三方接口依赖,在做接口自动化的时候,有时候需要调用第三方的接口,但是别人公司的接口服务不受你的控制,有可能别人提供的测试环境今天服务给你开着,别人就关掉了,
例如:
我们要测试A模块,然后A模块依赖于B模块的调用。但是,由于B模块的改变,导致了A模块返回结果的改变,从而使A模块的测试用例失败。其实,对于A模块,以及A模块的用例来说,并没有变化,不应该失败才对。
这个时候就是mock发挥作用的时候了。通过mock模拟掉影响A模块的部分(B模块)。至于mock掉的部分(B模块)应该由其它用例来测试。

四、mock的使用

在Python2.x 中 mock是一个单独模块,需要单独安装。
pip install -U mock
在Python3.x中,mock已经被集成到了unittest单元测试框架中,所以,可以直接使用。
from unittest.mock import Mock

五、mock的代码实现
1、mock的基本使用

# -*- coding: utf-8 -*-
# @Time: 2022/1/20 5:50 下午
# @Author: wcystart
# @File: modular.py
# @description:
"""
这里要实现一个Count计算类,add() 方法要实现两数相加。
但,这个功能我还没有完成。这时就可以借助mock对其进行测试。
"""


class Count():
    def add(self):
        pass

# -*- coding: utf-8 -*-
# @Time: 2022/1/20 5:51 下午
# @Author: wcystart
# @File: mock_demo01.py
# @description:
from unittest.mock import Mock
import unittest
from modular import Count


class TestCount(unittest.TestCase):
    def test_add(self):
        # 首先,调用被测试类Count()
        count = Count()
        # 通过Mock类模拟被调用的方法add()方法,return_value 定义add()方法的返回值。
        count.add = Mock(return_value=13)
        # 正常的调用add()方法,传两个参数8和5,然后会得到相加的结果13。然后,13的结果是我们在上一步就预先设定好的。
        result = count.add(8, 5)
        self.assertEqual(result, 13)


if __name__ == '__main__':
    unittest.main()

2、mock解决依赖

# -*- coding: utf-8 -*-
# @Time: 2022/1/21 11:13 上午
# @Author: wcystart
# @File: function.py
# @description: 定义一个函数,用来计算两个数的和、乘积

def add_and_multiply(x, y):
    addition = x + y
    mul = multiply(x, y)
    return addition, mul


def multiply(x, y):
    return x * y

然后针对:add_and_multiply()函数编写测试用例

import unittest
import function


class MyTestCase(unittest.TestCase):
    def test_add_and_multiple(self):
        x = 3
        y = 5
        addition, mul = function.add_and_multiply(x, y)
        self.assertEqual(8, addition)
        self.assertEqual(15, mul)


if __name__ == '__main__':
    unittest.main()

运行结果:
Ran 1 test in 0.004s

OK

add_and_multiply()函数依赖了multiply()函数的返回值。如果这个时候修改multiply()函数的代码。

def multiply(x, y):
    return x * y + 6


再次运行,就会断言失败:
21 != 15

Expected :15
Actual   :21
<Click to see difference>

Traceback (most recent call last):
  File "/Users/wangchuangyan/Desktop/py42/mock/func_test.py", line 16, in test_add_and_multiple
    self.assertEqual(15, mul)
AssertionError: 15 != 21

测试用例运行失败了,然而,add_and_multiply()函数以及它的测试用例并没有做任何修改,罪魁祸首是multiply()函数引起的,那么此时我们应该把 multiply()函数mock掉。

import unittest
import function
from unittest.mock import patch


class MyTestCase(unittest.TestCase):
    # 针对add_and_multiply做测试用例
    # def test_add_and_multiply(self):
    #     x = 3
    #     y = 5
    #     addition, multiple = function.add_and_multiply(x, y)
    #     self.assertEqual(8, addition)
    #     self.assertEqual(15, multiple)

    """
    patch()装饰/上下文管理器可以很容易地模拟类或对象在模块测试。
    在测试过程中,您指定的对象将被替换为一个模拟(或其他对象),
    并在测试结束时还原。
    """

    # 模拟function.py文件中multiply()函数
    # 将mock的multiply()函数(对象)重命名为 mock_multiply对象
    @patch("function.multiply")
    def test_add_and_multiple2(self, mock_multiply):
        x = 3
        y = 5
        # 设定mock_multiply对象的返回值为固定的15
        mock_multiply.return_value = 15
        addition, multiple = function.add_and_multiply(x, y)
        # 检查mock_multiply方法的参数是否正确
        mock_multiply.assert_called_once_with(3, 5)

        self.assertEqual(8, addition)
        self.assertEqual(15, multiple)


if __name__ == '__main__':
    unittest.main()

再次运行:运行通过
Ran 1 test in 0.004s

OK

Process finished with exit code 0

六、patch装饰器简介

patch装饰器的使用,patch() 作为函数装饰器,为您创建模拟并将其传递到装饰函数

def patch(
target, new=DEFAULT, spec=None, create=False,
spec_set=None, autospec=None, new_callable=None, **kwargs
):
target参数必须是一个str,格式为’package.module.ClassName’, 注意这里的格式一定要写对,如果你的函数或类写在pakege名称为a下,b.py脚本里,有个c的函数(或类),那这个参数就写“a.b.c”
new参数如果没写,默认指定的是MagicMock
spec=True或spec_set=True,这会导致patch传递给被模拟为spec / spec_set的对象 new_callable允许您指定将被调用以创建新对象的不同类或可调用对象。默认情况下MagicMock使用。

「Python版」手把手带你如何进行Mock测试 mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为之所以使用mock测试,是因为真实场景很难实现或者短期实现起来很困难。主要场景有: 通过代码制造假的输出(结果)接口自动化测试客户端Mock通过代码去模拟假的接口返回数据(访问真实接口的过程就可以省略)举个栗子:要测试请求接口visit接口,实际上开发还没完成开发工作,我们先编写测试用例,数据都先准备空的,然后可以运行通过,等开发好接口以后,再把相应内容 阅读详情

相关推荐

python使用Faker库进行生成模拟mock数据(基本使用+五个小案例)

神奇的Faker,神奇的数据。通过python实现数据自由

AI~天海的博客 6293

第十四:基础-Python中mock模块基本使用

【代码】第十四:基础-Python中mock模块基本使用。

欢迎来到本博客! 997

关于python接口自动化mock使用

鉴于很多学生经常问我关于mock是什么,那么就送上一篇博客以示敬意。 一:什么是mock mock是python 中用于支持的测试模块,它的主要作用是mock对象替代掉指定的python对象,以达到模拟一个方法的返回值. 二:应用场景 前后端分离,假设开发迭代特别快,前后端需要同步开发,那么前端开发怎么样来测他自己的接口,按照正常的逻辑是:前端必须等后端把接口开发完成,部署到服务器,前端才能测试。...

Snow_python的博客 2012

python接口自动化测试 之mock模块基本使用介绍

我们学习必然是为了找到高薪的工作,下面这些。

weixin_71807218的博客 1186

python接口自动化之mock模块基本使用-入门到精通

mock简介 mock原是python的第三方库 python3以后mock模块已经整合到了unittest测试框架中,不用再单独安装 Mock这个词在英语中有模拟的意思,因此我们可以猜测出这个库的主要功能是模拟一些东西 准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为 既然mock已经被整合到了unittest单元测试框架中,可想而知mock的目的就是为了让我们更好的进行测试 mock作用 1. 解决

HB8888888的博客 683

基于PI双闭环解耦控制的三相SVPWM电压型逆变器(3)--调制方法

阐述SPWM和SVPWM的原理以及实现方法

weixin_58670090的博客 6258

python接口自动化测试 之mock模块基本使用介绍_python mock模块

38 print(“{0}支付{1}成功!43 print(“{0}支付{1}失败!这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!9 :return: 返回状态码,200 代表支付成功,500 代表支付异常失败。37 # 返回第三方支付成功,则进行系统里面的扣款并记录支付记录等操作。

2401_84263208的博客 864

告别Modern Standby!Win10/11强制S3睡眠的终极指南(含BIOS设置避坑)

本文是针对Windows 10/11用户因Modern Standby(S0低电量待机)导致睡眠耗电、发热问题的终极解决方案。文章详细对比了Modern Standby与传统S3睡眠(Suspend to RAM)的本质区别,并提供了从系统诊断、注册表修改、BIOS/UEFI设置避坑到驱动优化的完整步骤,旨在帮助用户强制启用稳定、省电的S3睡眠模式,彻底告别睡眠噩梦。

n7o8p的博客 790

python接口自动化 之 Mock服务的使用

Mock实现原理和实现机制 在某些时候,后端在开发接口的时候,处理逻辑非常复杂,在测试的时候,后端在未完成接口的情况下该如何去测试呢?

2301_76387166的博客 1313

SAP Business One自定义表与字段实战:从零构建企业专属数据模型

本文详细介绍了如何在SAP Business One中创建自定义表与字段,从零构建企业专属数据模型。通过实战案例和避坑指南,帮助用户掌握业务适配、流程优化和权限隔离等关键技巧,提升系统灵活性和数据管理效率。特别适合需要扩展标准功能的SAP Business One用户。

weixin_28730927的博客 357

新代永久解锁西门子smart S7-200PLC 上传程序步骤

西门子 SMART S7-200 PLC 程序上传步骤 打开编程软件 或左下角依次打开 程序 所有程序 Siemens Automation Simatic STEP 7-MicroWIN SMART V2.4 STEP 7-MicroWIN SMART 技术交流 plcjiesuo1 2. 确认plc电源端以及输入电压; 3.用网线连接plc与电脑技术交流 plcjiesuo1 4.plc通电; 5.打开编程软件,双击通讯 6.按照...

m0_60773720的博客 2万+

python mock接口怎么用_python接口自动化之mock模块基本使用

mock简介mock原是python的第三方库python3以后mock模块已经整合到了unittest测试框架中,不用再单独安装Mock这个词在英语中有模拟的意思,因此我们可以猜测出这个库的主要功能是模拟一些东西准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为既然mock已经被整合到了unittest单元...

weixin_39822629的博客 170

每天一个优秀提示词学习收藏 - 文本创作篇(二)

宝子们,今天不藏私啦!我把这段时间四处搜罗、潜心钻研出来的文本创作 Prompt 提示词大礼包双手奉上,这可都是能让你的 AI 创作水平原地起飞的干货!走过路过不要错过,赶紧码住,开启你的 AI 创作进阶之旅吧!

2397

python接口自动化之mock模块基本使用

mock简介 mock原是python的第三方库 python3以后mock模块已经整合到了unittest测试框架中,不用再单独安装 Mock这个词在英语中有模拟的意思,因此我们可以猜测出这个库的主要功能是模拟一些东西 准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为 既然mock已经...

dengying1836的博客 688

小白 虚拟机 kali_Linux安装 详细教程

安装版本:VMmare workstation pro kali_Linux 安装环境:Window10 首先我们先了解一下什么是kali_linux: Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。每一季度更新一次。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行

m0_50917178的博客 9万+

Coze 上 OpenClaw 完整使用攻略(零代码 + 24 小时在线 + 飞书 / 微信接入)

Coze(扣子)是目前国内零门槛部署 OpenClaw 最友好的平台,无需服务器、不用命令行,5 分钟即可拥有可执行本地 / 云端任务的 AI 助手,还能一键发布到飞书、微信、钉钉等 IM。

hy行者勇哥的博客 2920

python接口自动化—mock模块的基本使用

一、mock简介 mock原是python的第三方库 python3以后mock模块已经整合到了unittest测试框架中,不用再单独安装 Mock这个词在英语中有模拟的意思,因此我们可以猜测出这个库的主要功能是模拟一些东西 准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为 既然mock已经被整合到了unittest单元测试框架中,可想而知mock的目的就是为了让我们更好的进行测试 二、mock作用 ..

weixin_48048408的博客 280

【QT开发教程】使用Qt进行蓝牙低功耗(BLE)编程

蓝牙低功耗(BLE,Bluetooth Low Energy)技术广泛应用于现代设备中,例如智能手表、健身追踪器和物联网设备。Qt提供了一套完整的Bluetooth模块,使开发者可以轻松地在应用程序中实现BLE通信功能。本文将介绍如何在Qt中进行BLE编程,包括基本概念、使用方法以及一些实际的示例。

科技改变人类,技术成就未来 2868

mock模拟接口测试_python接口自动化—mock模块的基本使用

一、mock简介mock原是python的第三方库python3以后mock模块已经整合到了unittest测试框架中,不用再单独安装Mock这个词在英语中有模拟的意思,因此我们可以猜测出这个库的主要功能是模拟一些东西准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为既然mock已经被整合到了unittest...

weixin_39703468的博客 430

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

python接口自动化接口依赖_Python接口自动化之mock模块简单使用

mock简介mock原是python的第三方库,python 2可以直接安装mock模块,但在python 3.3以后mock模块已经整合到了unittest测试框架中,不需要再单独安装。Mock这个词在英语中有模拟的这个意思,因此我们可以猜测出这个库的主要功能是模拟一些东西。准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以...

weixin_39760919的博客 245

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

python mock接口怎么用_python接口自动化测试 - mock模块基本使用介绍

mock简介py3已将mock集成到unittest库中为的就是更好的进行单元测试简单理解,模拟接口返回参数通俗易懂,直接修改接口返回参数的值mock作用解决依赖问题,达到解耦作用当我们测试某个目标接口(模块)时,该接口依赖其他接口,当被依赖的接口未开发完成时,可以用mock模拟被依赖接口,完成目标接口的测试模拟复杂业务的接口当我们测试某个目标接口(模块),该接口依赖一个非常复杂的接口时,可以用m...

weixin_39860280的博客 201

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

mock模拟接口测试_Python接口自动化之mock模块基本使用

mock简介  mock原是python的第三方库  python3以后mock模块已经整合到了unittest测试框架中,不用再单独安装  Mock这个词在英语中有模拟的意思,因此我们可以猜测出这个库的主要功能是模拟一些东西  准确的说,Mock是Python中一个用于支持单元测试的库,它的主要功能是使用mock对象替代掉指定的Python对象,以达到模拟对象的行为  既然mock已经...

weixin_39994438的博客 222
上一篇: Python自动化之jsonpath基本使用
下一篇: Mac系统下载安装配置docker
FamilyYan
博客等级 码龄10年 244粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值