python的pytest框架之命令行参数详解(下)

下面是关于“python的pytest框架之命令行参数详解(下)”的完整攻略。

标题

python的pytest框架之命令行参数详解(下)

概述

前面讲解了pytest框架中一些常用的命令行参数,本篇文章将继续讲解一些更为高级的参数,包括fixture的范围以及参数化运行测试用例。

fixture范围

fixture是pytest框架中常用的一种功能,可以用来实现测试前准备和测试后清理,以及避免代码的重复编写。fixture的作用域分为function、class、module和session。

  • function:每个测试函数调用时运行fixture的代码。
  • class:每个测试类调用一次fixture的代码,在类中的所有测试函数中可用。
  • module:每个模块调用一次fixture的代码,在该模块中的所有测试函数中可用。
  • session:每个会话调用一次fixture的代码,在该会话的所有模块和测试函数中可用。

pytest框架默认的fixture作用域是function。可以通过在fixture函数上加上@pytest.fixture(scope="scope范围"),来修改fixture的作用域。

参数化测试用例

参数化测试用例是pytest框架中的高级功能,可以通过多个参数运行同一个测试用例,从而有效避免代码的重复。

可以通过@pytest.mark.parametrize("参数名称", 参数值列表)来定义参数化测试用例。

例如,我们有如下的测试用例:

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

def test_add():
    assert add(1, 2) == 3
    assert add(2, 3) == 5

这里我们可以将参数化测试用例定义为(使用装饰器):

import pytest

@pytest.mark.parametrize("x, y, result", [(1, 2, 3), (2, 3, 5)])
def test_add(x, y, result):
    assert add(x, y) == result

这样我们就可以通过多组不同的参数运行同一个测试用例。

示例说明

示例一

假设我们有如下测试文件:

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

def test_multiply():
    assert multiply(2, 3) == 6
    assert multiply(4, 5) == 20

我们希望将test_multiply的fixture作用域改为class,可以修改代码如下:

import pytest

@pytest.fixture(scope="class")
def setup():
    print("setUp")
    yield
    print("tearDown")

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

class TestMultiply:
    def test_multiply(self, setup):
        assert multiply(2, 3) == 6
        assert multiply(4, 5) == 20

这里我们给test_multiply加上了一个参数setup,并且在类名上标注了TestMultiply,用于表示这个测试类依赖于setup这个fixture。

示例二

我们可以使用参数化的方法,对multiply函数进行测试。

import pytest

@pytest.mark.parametrize("x, y, result", [(2, 3, 6), (4, 5, 20)])
def test_multiply(x, y, result):
    assert multiply(x, y) == result

这里我们将xyresult分别设置为不同的参数,用逗号分隔开,从而实现对test_multiply函数的参数化测试。

结论

通过本篇文章,我们了解了pytest框架中的fixture作用域以及参数化测试用例的使用方法,可以帮助我们更好地编写高质量的测试代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python的pytest框架之命令行参数详解(下) - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 为什么我推荐Nginx作为后端服务器代理(原因解析)

    为什么我推荐Nginx作为后端服务器代理(原因解析) 背景 在进行Web开发过程中,我们有时需要一个后端服务器代理来帮助我们转发请求,Nginx往往是一个很好的选择。本文将从性能和功能两个方面来解析为什么我推荐Nginx作为后端服务器代理。 性能 Nginx的性能非常出色,它是一个高性能的HTTP服务器和反向代理服务器,能够帮助我们快速地响应客户端的请求。N…

    other 2023年6月27日
    00
  • 淘宝直播严选精选佣金结算优先级规则

    淘宝直播严选精选佣金结算优先级规则攻略 1. 背景介绍 在淘宝直播中,严选精选是一种特殊类型的佣金结算方式。严选精选的商品通常由淘宝直播的作者进行推荐,并且具有更高的佣金比例。然而,在进行严选精选佣金结算时,存在一些优先级规则,本攻略将详细讲解这些规则。 2. 严选精选佣金结算优先级规则 2.1. 直播间内商品推荐顺序优先级 在同一个直播间内,存在多个严选精…

    other 2023年6月28日
    00
  • 如何用命令行进入mysql具体操作步骤

    当我们需要进入MySQL数据库进行数据操作的时候,可以通过命令行进行进入。下面是使用命令行进入MySQL的具体步骤: 步骤一:打开终端 在Windows系统下,可以通过“开始菜单-搜索-运行”并输入cmd命令来打开终端;在Mac OS、Linux等Unix-like系统下,则可以通过打开终端应用程序来进入终端。 步骤二:输入命令 在终端中输入以下命令来进入M…

    other 2023年6月26日
    00
  • python通过配置文件共享全局变量的实例

    Python通过配置文件共享全局变量的实例攻略 在Python中,可以通过配置文件来共享全局变量。这种方法可以让我们在不修改代码的情况下,根据需要动态地改变全局变量的值。下面是一个详细的攻略,包含了两个示例说明。 步骤1:创建配置文件 首先,我们需要创建一个配置文件,用于存储全局变量的值。配置文件可以使用常见的格式,如INI、JSON或YAML。在这个攻略中…

    other 2023年7月28日
    00
  • 暗黑3 2.4.1全职业直接伤害加成被动技能排名

    暗黑3 2.4.1全职业直接伤害加成被动技能排名攻略 在《暗黑破坏神3》中,直接伤害加成被动技能被认为是玩家们提升伤害的一种重要途径。这篇攻略将为大家介绍暗黑3 2.4.1版本中所有职业的直接伤害加成被动技能排名,帮助玩家快速提高输出。 职业一:野蛮人 致命一击:每次击中有一定几率造成300%的伤害。此技能优秀的致命打击加成,常搭配狂怒装备和爆发型输出。 暴…

    other 2023年6月27日
    00
  • 下载openvpn

    当然,我很乐意为您提供有关“下载OpenVPN”的完整攻略。以下是详细的步骤和两个示例: 1 下载OpenVPN 要下载OpenVPN,请按照以下步骤进行操作: 1.1 打开OpenVPN官网 在您的Web浏览器中打开OpenVPN官网:https://openvpn.net/community-downloads/ 1.2 选择适合您操作系统的版本 在下载…

    other 2023年5月6日
    00
  • SQL如何实现MYSQL的递归查询

    SQL可以通过递归查询实现类似MySQL WHERE id IN (SELECT id FROM category WHERE parent_id = 0) 这样的功能。下面给出详细的攻略。 1. 定义表结构 首先需要明确递归查询针对的表结构,本文以一个简单的分类目录结构为例: CREATE TABLE category ( id BIGINT NOT NU…

    other 2023年6月27日
    00
  • 使用webservice自定义注解处理参数加解密问题

    使用webservice自定义注解处理参数加解密问题的完整攻略如下: 1. 创建自定义注解 首先,我们需要创建一个自定义注解,用于标记需要进行参数加解密的方法或参数。可以使用如下代码创建一个@EncryptDecrypt注解: import java.lang.annotation.ElementType; import java.lang.annotati…

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