pytest.mark.parametrize及mock使用

2023-10-27

目录

pytest.mark.parametrize

mock.patch


pytest.mark.parametrize

现在有 zjk.py 模块,想测试其中 add 函数的功能,传入 x, y,把 x 平方后的结果与 y 相加返回。

zjk.py:

def power(x):
    return x ** 2


def add(x ,y):
    x = power(x)
    return x + y

创建一个测试文件,测试文件一般以 test 开头或结尾,创建 test_zjk.py:

import pytest
from zjk import add


@pytest.mark.parametrize("pow_res, x, y, excepts", [
    (4, 2, 5, 9),
    (16, 4, 11, 27)
])
def test_add(pow_res, x, y, excepts):
    res = add(x ,y)
    assert res == excepts

在 pycharm 中可以单独运行测个测试函数:

 运行结果没有报错,说明测试用例全都通过:

如果测试用例失败不符合预期结果,会报错提示是哪个用例不通过:

 @pytest.mark.parametrize

这个是参数模拟设置用的函数,在此例中的测试函数传入了 4 个参数,其中 x,y 是必要的,其他两个是自己加的,因为 x,y 是要测的传入的值,另外两个一个是 x 平方后的值,一个是预期输出值,对应关系,这里是两组测试用例,及代表要运行 2 次: 

调用 add 函数得到计算结果,关键字 assert 断言,判断结果与预期结果等不等,不等为 FAlse,会不通过用例,即上面的截图。

mock.patch

看上面的 zjk.py 里面 add 函数是调用了一个 power 函数的,而 add 是想测的函数,我们只想测这个函数的代码,中途调用的函数过程不想关心,想直接用它返回的值,因为万一 power 函数是一些网络请求,cmd 命令等,就需要网络,机器等,所以为了专注测试,用 patch 模拟 power 函数返回值

zjk.py 我们在其中再添加一个函数,并且 power 调用两次:

def power(x):
    return x ** 2


def sub(y):
    return y - 1


def add(x ,y):
    x = power(x)
    x1 = power(x)
    y = sub(y)
    return x1 + y

test.py 修改:

import mock
import pytest
from zjk import add


@pytest.mark.parametrize("x, y, excepts, pow_res, sub_res", [
    (2, 5, 20, [4,16], 4),
    (3, 4, 84, [9, 81], 3),
    (7, 7, 2407, [49, 2401], 6)
])
@mock.patch("zjk.sub")
@mock.patch("zjk.power")
def test_add(mock_power, mock_sub, x, y, excepts, pow_res, sub_res):
    mock_power.side_effect = pow_res
    mock_power.return_value = pow_res
    mock_sub.return_value = sub_res
    res = add(x ,y)
    assert res == excepts

添加了 @mock.patch,代表要测的 add 函数中间过程调用的函数,如 zjk.sub,这里表示传入的是sub 函数路径,之后需要在测试函数 test_add 传入函数,格式为 mock_函数名,且有顺序要求,传入参数顺序(左往右),装饰器顺序(下往上)

parametrize 中也需要添加 power,sub 函数的取值,就可以测试了

return_value 好理解就是设定返回值,如 mock_sub.return_value = sub_res 把 sub 函数的返回值进行赋值,但必须为数值型或字符串,罗被 mock 函数有多个返回值,也用它,且用元祖括起来,例如 mock-sub.return = (1, 2)
side_effect 赋值的要求必须是可迭代对象,意思就是同一个函数调用了多次,每次调用结果用列表存起来,并用 side_effect 赋值,表示每一次调用的取值

根据实际情况进行设置,用反了会报错

来看一下结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytest.mark.parametrize及mock使用 的相关文章

随机推荐

  • 如何修复d3dcompiler_47.dll缺失?多种解决方法分享

    在使用Windows操作系统的过程中 有时候会遇到d3dcompiler 47 dll缺失的情况 这个问题可能会导致某些应用程序无法正常运行 因此需要及时解决 本文将介绍如何修复d3dcompiler 47 dll缺失的问题 一 什么是d3
  • 服务器怎么用u盘传文件进去_本机向windows服务器传输文件的三种方法

    闲来无事 在腾讯云上申请了一个免费的服务器 想将自己写的网页发布到服务器上 服务器的申请很简单 百度搜索 腾讯云 然后新人第一次注册能申请到免费一个月的云主机 虽然配置不怎么高 但是还是能用的 这是我申请到一个云主机 那么如何将我们本机的文
  • 关于在宸曜科技7160gc上的ubuntu16.04系统下计算资源浪费问题

    1 如果使用核显来显示会占用cpu的资源 即使此时hdmi的线插在显卡上 此时会影响使用cpu来执行程序的效率 最直接体现的是程序的数据发送频率会降低很多 2 如何确定是否是cpu显示还是显卡显示了 需要通过system setting里面
  • 南科大于仕琪团队招聘研究助理教授,博士后

    南方科技大学于仕琪副教授团队招聘研究助理教授 博士后 博士生和硕士生 团队特色 专注步态识别方向十余年 在步态识别方向具有较高的影响力 研究助理教授 研究方向 步态识别 行人视频合成 图像和视频中的人体建模 视频中人的行为分析及相关 要求
  • 分布式系统架构——CAP理论

    1 什么是CAP 在分布式系统中 任何存储系统 有状态服务 都会涉及到CAP定理 Consistency 一致性 简称C 在同一时刻所有节点是具有同样的数据副本 每个节点的数据要保证实时同步 Availability 可用性 简称A 对于一
  • Ubuntu14.04 :By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH

    Ubuntu14 04 By not providing FindEigen3 cmake in CMAKE MODULE PATH 今天下载了hector slam的源码想要跑一下 结果编译不能通过 并且一直出现如下错误 烦得一逼 研究了
  • 兼容性测试真实案例-餐饮APP

    兼容性测试真实案例 某餐饮APP 项目背景 APP是以电商加直播为载体 供应链为核心 辅以短视频和直播内容分销带货 以及积分商城体系 本项目主要对APP的商品列表及商品采购流程及涉及页面 针对不同品牌 操作系统 分辨率的机型 验证APP是否
  • jenkins和jdk安装教程(安装支持jdk8的最新版本)

    1 安装版本查看 Jenkins稳定版 2 进入清华镜像 下载对应版本的rpm包 清华镜像 3 已rpm安装过Jenkins 现在先卸载 1 卸载 rpm e jenkins 2 检查是否卸载成功 rpm ql jenkins 3 彻底删除
  • (大集合)AI工具和用法汇总—集合的集合

    AI 工具和用法汇总 汇集整理 by Staok 瞰百 源于相关资料在我这慢慢越积累越多 到了不得不梳理的程度 文中有许多内容作者还没有亲自尝试 所以很多内容只是罗列 但信息大源都已给出 授人以渔 欢迎 PR 补充细节内容 比如 好的教程
  • HTML+CSS简单复习

    目录 什么是HTML CSS VSCode编辑器 HTML基本结构和属性 HTML初始代码 HTML注释 标题与段落 文本修饰标签 图片标签 路径的引入 链接标签 锚点 特殊字符 列表标签 表格标签 表单标签 div和span CSS基础语
  • 【机器学习笔记4】逻辑回归模型

    目录 什么是逻辑回归 Sigmoid函数 决策边界 逻辑回归的损失函数 为什么平方误差模型不可行 对数损失函数 单个样例损失 整体损失函数 梯度下降算法 补充 F1 score评价指标 F1 Score简介 相关概念 F Score 示例及
  • 第一次实践一个多文件的代码

    收获 1 ifndef防止头文件重复包含 为了避免同一个头文件被包含 include 多次 C C 中有两种宏实现方式 一种是 ifndef方式 另一种是 pragma once方式 ifndef 标识符A 每一个头文件都要有自己独特的标识
  • 小程序通过webview实现本地任意文件上传

    微信小程序做文件上传的时候 只能选择相册的图片或者视频 没办法选择手机内存卡里的文件 比如 word pdf文件等等 下面可以通过 webview 的方式 借用 h5 的方式即可实现上面的功能 添加业务域名 webview里面打开的地址 首
  • 【pytorch】pytorch-yolov3拍照并保存,进行检测后遍历所有图片并显示图片

    参看摄像头参数 v4l2 ctl d dev video0 all 安装numpy sudo apt get install python numpy 下载onnx pip install onnx 效果图 拍照部分 url http 19
  • HashMap实现原理及源码分析

    哈希表 hash table 也叫散列表 是一种非常重要的数据结构 应用场景及其丰富 许多缓存技术 比如memcached 的核心其实就是在内存中维护一张大的哈希表 而HashMap的实现原理也常常出现在各类的面试题中 重要性可见一斑 本文
  • Dubbo实战(三)多注册中心配置

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net FX SKY article details 51935533 本文将展示如何在Dubbo中进行多注册中心配置 开发环境 JDK 1 7 Maven
  • 如何实现前后端交互

    大概流程 首先我们要实现前端的页面 我们要有一个页面来让我们肉眼可以看见 JS的语法我们要掌握 1因为我们要通过JS来绑定事件 比如我们点击按钮就能发送数据给服务器 或者从服务器获取资源 2我们通过ajax请求来实现向服务器发送请求 3通过
  • mfc140u.dll丢失怎么解决?,哪种方法更简单?

    如果您在运行 Windows 操作系统时遇到了 mfc140u dll 丢失 或 找不到 mfc140u dll 等错误提示 那么这意味着您的计算机遗失了该文件 mfc140u dll 文件是 Microsoft Visual C 的一部分
  • jmeter如何进行一个简单的测试(超级详细,有图有文字,闭着眼都能成功)

    大家好 我是雄雄 内容先知 前言 软件获取 开始测试 1 新建线程组 2 创建一个请求 3 添加HTTP信息头 4 开始测试 5 查看请求情况 前言 上头问题要服务器的配置 基于我们现在做的项目 需要安排别人去采购服务器 给出的消息是 20
  • pytest.mark.parametrize及mock使用

    目录 pytest mark parametrize mock patch pytest mark parametrize 现在有 zjk py 模块 想测试其中 add 函数的功能 传入 x y 把 x 平方后的结果与 y 相加返回 zj