fixture参数使用

fixture的优势

  • 命名方式灵活,不局限于 setup 和teardown 这几个命名
  • conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture
  • scope=“module” 可以实现多个.py 跨文件共享前置
  • scope=“session” 以实现多个.py 跨文件使用一个 session 来完成多个用例

Fixture参数列表

@pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None)
def test():
    print("fixture====")
  • scope:可以理解成fixture的作用域,默认:function,还有class、module、package、session四个【常用】
  • autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture
  • name:默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name
    注意 session的作用域:是整个测试会话,即开始执行pytest到结束测试

Fixture的三种调用方法

方式一:函数或类里面方法直接传fixture的函数参数名称

定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要以test开头,跟用例区分开。
fixture是有返回值的,没有返回值默认为None。
用例调用fixture的返回值,直接就是把fixture的函数名称当做变量名称。


import pytest

@pytest.fixture()
def test1():
    a = "111"
    return a

def test2(test1):
    assert test1 == "111"


===

方式二:使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例
import pytest

@pytest.fixture()
def test1():
    a = "南京"
    print("fixture")
    return a

def test2(test1):
    assert test1 == "南京"

@pytest.fixture()
def login():
    print("请先登录")

@pytest.mark.usefixtures("login","test1")    
def test3():
    print("用例1:调用fixture") 

@pytest.mark.usefixtures("login")
@pytest.mark.usefixtures("test1")
def test4():
    '''
    叠加usefixtures:如果一个方法或者一个class用例想要同时调用多个fixture,
    可以使用@pytest.mark.usefixture()进行叠加。
    注意叠加顺序,先执行的放底层,后执行的放上层。
    :return: 
    '''
    print("用例2:叠加userfixture")

注意:usefixtures与传fixture区别

如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。

当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。

方式三:fixture自动使用autouse=True

当用例很多的时候,每次都传这个参数,会很麻烦。fixture里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了,autouse设置为True,自动调用fixture功能

import pytest

@pytest.fixture(autouse=True)
def login3():
    print("====auto===,自动执行该fixture")

def test5():
    print("用例3:执行前自动执行fixture")

Pytest中的fixture参数是用于创建和管理测试固件的装饰器。它可以在测试函数中作为参数使用,提供可重用的测试环境和数据。 常见的fixture参数有以下几种: 1. autouse:控制fixture的自动使用。如果将其设置为True,则每个测试函数都会自动使用fixture,而无需显式引用。 2. scope:控制fixture的作用域。可以设置为"function"(默认值,每个测试函数都会调用一次fixture)、"class"(每个测试类都会调用一次fixture)、"module"(每个模块都会调用一次fixture)或"session"(整个测试过程中只会调用一次fixture)。 3. params:允许将多个参数传递给fixture,以便生成不同的测试环境和数据。每个参数都会对应一个独立的fixture实例。 4. autouse、scope和params可以结合使用,以满足不同的测试需求。 示例代码如下: ```python import pytest # 定义一个简单的fixture @pytest.fixture(scope="module") def setup_module(): print("执行 setup_module") # 使用fixture def test_example(setup_module): print("执行 test_example") # 使用autouse=True的fixture @pytest.fixture(autouse=True) def setup_autouse(): print("执行 setup_autouse") # 使用params的fixture @pytest.fixture(params=[1, 2, 3]) def setup_params(request): print(f"执行 setup_params,参数值为{request.param}") # 使用autouse和scope的fixture @pytest.fixture(autouse=True, scope="class") def setup_class(): print("执行 setup_class") # 使用多个fixture def test_multiple_fixtures(setup_module, setup_autouse, setup_params): print("执行 test_multiple_fixtures") ``` 运行上述代码,输出结果如下: ``` 执行 setup_module 执行 setup_autouse 执行 setup_class 执行 setup_params,参数值为1 执行 test_example 执行 setup_params,参数值为2 执行 test_example 执行 setup_params,参数值为3 执行 test_example 执行 test_multiple_fixtures ``` 这是一个简单的示例,演示了如何使用pytest fixture参数来管理测试固件。fixture参数可以帮助我们更方便地创建、共享和管理测试环境和数据,提高测试代码的可维护性和复用性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值