Python接口自动化测试之pytest:(三)Fixture固件

Fixture中文称为固件或夹具,用于测试用例执行前的数据准备、环境搭建和测试用例执行后的数据销毁、环境恢复等工作。Fixture很灵活,不仅允许代码在运行时只在某些特定测试用例前执行,而且还可以在测试用例之间传递参数和数据。

一、固件的使用

如果要将一个方法作为Fixture使用,只需要在这个方法前添加装饰器@pytest.fixture()即可,先看一个简单的例子。

import pytest
list_two = [(1, 2, 3), (2, 3, 5)]

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

@pytest.fixture()  #fixture装饰器
def fixture_function():
    print('\nthis a fixture!')

@pytest.mark.parametrize('num1, num2, sum', list_two)
#测试方法在参数中调用fixture函数,那么在每次运行该测试用例时,就会执行一次fixture函数
def test_add1(num1, num2, sum, fixture_function):  
    assert add_number(num1, num2) == sum

运行结果如下:可以看到测试方法在运行前都执行了fixture函数。

二、固件的参数

pytest.fixture()方法的参数在源码中定义为fixture(scope="function", params=None, autouse=False, ids=None, name=None),参数说明如下:

  • scope:为fixture的作用域,有4组可选参数,分别为function、class、module、package/session,默认为function。
  • params:一个可选的参数列表,会使多个参数调用fixture函数和所有测试使用它。
  • autouse:如果为Ture,则所有的测试方法都会执行固件方法,如果为False(默认值),则只对添加了固件方法的测试方法执行固件方法。
  • ids:每个参数都与列表中的字符串id对应,因此是测试id的一部分。如果没有提供id将会从参数中自动生成。
  • name:fixture的名称,默认为装饰器的名称。

2.1 scope作用域

作用域的4个选项分别为:

  • function:函数级别,默认值,每个测试方法执行前都会执行一次
  • class:类级别,每个测试类执行前执行一次
  • module:模块级别,每个模块执行前执行一次,也就是每个.py文件执行前都会执行一次
  • session:会话级别,一次测试只执行一次

看一个例子:

import pytest

@pytest.fixture(scope='session')  #session作用域
def session_fix():
    print('\nthis is a session fixture!')

@pytest.fixture(scope='module')   #module作用域
def module_fix():
    print('\nthis is a module fixture!')

@pytest.fixture(scope='class')    #class作用域
def class_fix():
    print('\nthis is a class fixture!')

@pytest.fixture(scope='function')  #function作用域
def function_fix():
    print('\nthis is a function fixture!')

def test_api(session_fix, module_fix, class_fix, function_fix):
    print('\nthis is a test example!')

if __name__ == '__main__':
    pytest.main(['-v', '--setup-show']) #使用--setup-show查看具体的stup和teardown顺序

运行结果如下:运行结果中展示了作用域的标识符号,分别为S M C F

  • S:表示作用范围最大的session会话级
  • M:表示module模块级
  • C:表示class类级
  • F:表示function函数级

而且如果一个测试类中所有的方法都要调用fixture,每个用例传参会比较麻烦,这个时候可以选择在class类上使用装饰器@pytest.mark.usefixture()实现,示例如下:

import pytest
from pytest_example.test_fixture import function_fix

@pytest.mark.usefixtures('function_fix')
class TestFixture():
    def test_api1(self):
        print('test example 1!')
    def test_api2(self):
        print('test example 2!')

if __name__ == '__main__':
    pytest.main(['-v', '--setup-show'])

运行结果如下:可以看到类中的两个方法在执行时都调用了函数级的fixture。

fixture的ids和params参数下节再说!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸣宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值