pytest使用@pytest.mark.parametrize()实现参数化的示例代码

yizhihongxing

以下是关于“pytest使用@pytest.mark.parametrize() 实现参数化的示例代码”的完整攻略。

1. 简介

pytest.mark.parametrize()pytest 中用来实现参数化测试的方法,可以用来避免重复测试相似用例的冗余代码。

2. 语法

pytest.mark.parametrize() 函数的语法如下:

@pytest.mark.parametrize(argnames, argvalues)

其中:

  • argnames:字符串,表示参数名,可以为单个参数或多个参数;
  • argvalues:值的序列,表示参数的可能取值组合,可以为列表、元组、集合等。

3. 示例说明

示例一

假设我们需要测试一个简单函数add(),实现两个数字相加的功能,我们需要对一些测试用例进行测量。可以通过pytest.mark.parametrize()函数实现:

def add(a, b):
    return a + b

@pytest.mark.parametrize("a, b, expected", [
    (2, 3, 5),
    (1, 4, 5),
    (0, 0, 0)
])
def test_add(a, b, expected):
    assert add(a, b) == expected

在这个示例中,test_add 函数采用了 @pytest.mark.parametrize 参数化装饰器,"a, b, expected" 表示三个参数名,对应之后元组序列中的三个元素。元组序列中的三个元素分别表示被测试函数 add()ab 参数以及期望输出的 expected

示例二

现在,我将使用 pytest 测试 math 模块的一些常见的函数。该模块包含了许多有用的函数,例如 ceil(), floor(), factors(), gcd(), sqrt(), exp(), log(), log10(), log1p(), 并且我们想对这些函数进行一些测试,就可以采用以下方式:

import math
import pytest

@pytest.mark.parametrize(
    "num, result", 
    [(2, math.sqrt(2)),
     (3, math.sqrt(3)),
     (4, 2),
     (5, 2.236),
    ]
)
def test_sqrt(num, result):
    """
    对math.sqrt()函数进行测试
    """
    assert math.sqrt(num) == pytest.approx(result, 0.01)


@pytest.mark.parametrize(
    "num, result", 
    [(2, math.log(2)),
     (3, math.log(3)),
     (4, math.log(4)),
     (5, math.log(5)),
    ]
)
def test_log(num, result):
    """
    对math.log()函数进行测试
    """
    assert math.log(num) == pytest.approx(result, 0.01)


@pytest.mark.parametrize(
    "num, result", 
    [(2, math.exp(2)),
     (3, math.exp(3)),
     (4, math.exp(4)),
     (5, math.exp(5)),
    ]
)
def test_exp(num, result):
    """
    对math.exp()函数进行测试
    """
    assert math.exp(num) == pytest.approx(result, 0.01)

在这个示例中,我们使用了 import 导入了 math 模块,并使用了三个 @pytest.mark.parametrize 装饰器来测试三个常见的 math 模块函数 math.sqrt(), math.log()math.exp()。每个参数化装饰器都提供了参数名和值组成的元组序列。pytest.approx() 函数用于将期望值与实际值进行比较,并控制比较精度的精度。

这些示例代码中展示了如何使用 pytest.mark.parametrize() 函数实现参数化的测试,可以从中看到这种测试方法如何从繁琐的用例中解放出来,让代码更加简洁和可读性更高。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytest使用@pytest.mark.parametrize()实现参数化的示例代码 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 如何用NumPy来反转矩阵

    反转矩阵(即求矩阵的逆矩阵)是线性代数中的一个基本问题。在NumPy中,我们可以使用linalg模块中的inv()函数来计算矩阵的逆矩阵。下面是用NumPy反转矩阵的完整攻略: 步骤1:导入NumPy库 首先,我们需要导入NumPy库。在Python中,我们可以使用以下代码进行导入: import numpy as np 步骤2:创建需要反转的矩阵 假设我们…

    python-answer 2023年3月25日
    00
  • Python+Requests+PyTest+Excel+Allure 接口自动化测试实战

    Python+Requests+PyTest+Excel+Allure接口自动化测试实战 接口自动化测试是Web开发中非常重要的一环。Python提供了多种库来实现接口自动化测试,其中包括了Requests、PyTest、Excel和Allure等。本文将介绍如何使用这些库来实现接口自动化测试,并提供两个示例。 步骤一:安装所需库 在进行接口自动化测试之前,…

    python 2023年5月15日
    00
  • Python函数定义及传参方式详解(4种)

    Python是一种很受欢迎的编程语言,我们可以使用它来编写函数。函数是一种可重复使用的代码块,通过函数我们可以将一些操作进行封装并进行复用。在Python中定义函数的方式有多种,下面我们就来详细讲解一下Python函数定义及传参方式的详解。 函数定义 在Python中,定义一个函数使用def关键字,接着是函数名和括号。括号里可以包含参数,如果没有参数则括号是…

    python 2023年6月5日
    00
  • python调用百度语音识别api

    一、前置条件 在使用百度语音识别API之前,需要进行以下操作: 1.在百度AI开放平台注册账户,并创建应用,获取API Key和Secret Key。 2.安装Python开发环境,并安装requests库和pyaudio库。requests库用于发送HTTP请求,pyaudio库用于录音。在命令行输入以下命令进行安装: pip install reques…

    python 2023年5月19日
    00
  • python基于urllib实现按照百度音乐分类下载mp3的方法

    下面是Python基于urllib实现按照百度音乐分类下载MP3的方法的完整攻略。 1. 确认需求 在开始编写程序之前,首先需要确认我们所要实现的需求,即:按照百度音乐的分类,从网站上下载对应的MP3文件。 2. 分析问题 在确认需求之后,需要具体分析如何实现这个需求。 2.1 获取音乐列表 首先,我们需要获取百度音乐的分类列表。打开百度音乐分类页面,我们可…

    python 2023年6月3日
    00
  • python 将视频 通过视频帧转换成时间实例

    准备工作: 在完成视频帧转换时,我们需要使用Python的一些外部模块来处理视频文件,并将其中的每个帧提取出来。下面是需要的模块: OpenCV:OpenCV是一款处理图像和视频数据的开源库。 视频帧转换成时间实例的步骤如下: 导入必要的库 首先,总体上要导入几个必要的库,比如OpenCV、datetime库等。使用命令import和库名即可完成导入。 示例…

    python 2023年6月3日
    00
  • python脚本开机自启的实现方法

    当我们需要让Python脚本在开机时自启动,可以使用以下两种方法实现: 方法一:使用init.d服务 创建一个service文件 首先需要创建一个service文件,其中包含运行脚本的命令及其他相关信息,如下: #!/bin/bash ### BEGIN INIT INFO # Provides: my_python_script # Required-St…

    python 2023年5月19日
    00
  • 不到40行代码用Python实现一个简单的推荐系统

    不到40行代码用Python实现一个简单的推荐系统 推荐系统是一种常见的人工智能应用,它可以根据用户的历史行为和偏好向用户推荐可能感兴趣的品。本文将介绍如何使用Python实现一个简单的推荐系统,该系统基于用户-物品评分矩阵,使用协同过滤算法进行推荐。 1. 数据集 我们将使用MovieLens数据集来演示如何使用协同过滤算法进行推荐。数据集包含多个用户对多…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部