自动化测试:fixture学得好,Pytest测试框架用到老

在pytest中,fixture是一种非常有用的特性,它允许我们在测试函数中注入数据或状态,以便进行测试。而参数化则是fixture的一个特性,它允许我们将不同的数据传递给fixture,从而进行多次测试。

本文将介绍如何在pytest中使用fixture进行参数化,以便在测试中使用不同的数据集。

一、fixture的基本用法
首先,我们需要了解fixture的基本用法。fixture是一个函数,它使用@pytest.fixture装饰器进行修饰。在测试函数中,我们可以通过参数的形式引用fixture。pytest会在测试函数执行之前运行fixture函数,并将其返回值注入到测试函数中。

下面是一个简单的示例,演示了如何使用fixture:

import pytest  

@pytest.fixture  
def fixture_01():  
    return "同学,记得关注、点赞哦!"  

def test_01(fixture_01):  
    print(fixture_01)  
    assert True

在这个例子中,我们定义了一个名为fixture_01的fixture,它返回一个字符串"同学,记得关注、点赞哦!"。在test_01函数中,我们通过参数的形式引用了fixture_01。当运行测试时,pytest会先执行fixture_01函数,并将其返回值注入到test_01函数中。

二、使用参数化fixture
现在,我们来介绍如何使用参数化fixture。参数化fixture允许我们将不同的数据集传递给fixture,从而进行多次测试。这可以通过在@pytest.fixture装饰器中指定params参数来实现。

下面是一个示例,演示了如何使用参数化fixture:

import pytest  
  
@pytest.fixture(params=[1, 2, 3])  
def fixture_02(request):  
    return request.param  
  
def test_02(fixture_02):  
    print(fixture_02)  
    assert True

在这个例子中,我们定义了一个名为fixture_02的fixture,并使用params参数指定了一个列表[1, 2, 3]。在fixture函数中,我们使用request.param来获取当前测试使用的参数值。在test_02函数中,我们通过参数的形式引用了fixture_02。当运行测试时,pytest会分别使用[1, 2, 3]中的每个值作为参数来运行test_02函数。因此,这个测试会被执行三次,分别使用1、2和3作为输入参数。

三、使用多个参数化fixture
有时我们需要在测试中使用多个参数化fixture。这可以通过在测试函数中引用多个fixture来实现。下面是一个示例,演示了如何使用多个参数化fixture:

import pytest  
  
@pytest.fixture(params=[1, 2, 3])  
def fixture_03(request):  
    return request.param  
  
@pytest.fixture(params=["a", "b", "c"])  
def fixture_04(request):  
    return request.param  
  
def test_03(fixture_03, fixture_04):  
    print(fixture_03, fixture_04)  
    assert True

在这个例子中,我们定义了两个参数化fixture:fixture_03和fixture_04。fixture_03使用了一个列表[1, 2, 3]作为参数,而fixture_04使用了一个列表[“a”, “b”, “c”]作为参数。在test_03函数中,我们通过参数的形式引用了这两个fixture。当运行测试时,pytest会分别使用[1, 2, 3]和[“a”, “b”, “c”]中的每个值作为参数来运行test_03函数。因此,这个测试会被执行九次,分别使用不同的输入参数组合,即【1-a,2-a,3-a,1-b,2-b,3-b,1-c,2-c,3-c】。
 最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

 

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-16 13:36:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-16 13:36:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-16 13:36:04       82 阅读
  4. Python语言-面向对象

    2024-01-16 13:36:04       91 阅读

热门阅读

  1. leetcode30天pandas挑战day1笔记

    2024-01-16 13:36:04       57 阅读
  2. 思科无线AP 2802无法注册,手工指定控制器的IP

    2024-01-16 13:36:04       41 阅读
  3. C语言项目总结

    2024-01-16 13:36:04       43 阅读
  4. hive:创建自定义python UDF

    2024-01-16 13:36:04       57 阅读
  5. mysql定时任务

    2024-01-16 13:36:04       58 阅读
  6. SpringMVC数据传递及数据处理

    2024-01-16 13:36:04       62 阅读