pytest中的fixture使用语法说明

fixture功能
fixture作用

​ 在unittest中我们可以使用setup和teardown进行初始化操作,但是在pytest中我们一般不会去使用setup和teardown进行初始化操作,而是使用fixture进行被测对象的初始化1,fixture在使用过程中我们主要关注它的作用域和参数化的作用,下面就讲解这两种使用规则

fixture基本使用
import pytest
@pytest.fixture()
def some_data():
    return 42
def test_some_data(some_data):
    assert some_data ==42
#运行结果
"""
plugins: allure-pytest-2.9.45, Faker-13.15.1, json-report-1.5.0, metadata-2.0.2
collected 1 item                                                                                                                                                   
test_tttttpython.py
SETUP    S _session_faker
        SETUP    F some_data
        test_tttttpython.py::test_some_data (fixtures used: _session_faker, request, some_data).
        TEARDOWN F some_data
TEARDOWN S _session_faker
================ 1 passed in 0.12s =============== 
"""

解释:

  1. 被测函数执行前后运行的操作,使用@pytest.fixture()装饰器进行修饰,标识这个函数是被测函数的初始化操作
  2. 被测函数中参数传递fixture修饰的函数的函数名,可以在pytest框架中自动执行返回函数的返回值
  3. 使用pytest --setup-show 运行文件,可以打印出详情,也就是被测函数的运行详情信息
fixture的作用域

fixture函数作用域为funciton、class、module、session、package下面一一说明,直接运行函数可以看出结果

#scope="funciton"
@pytest.fixture(scope="function")
def some_data():
    return 42
def test_some_data1(some_data):
    assert some_data ==42
def test_some_data2(some_data):
    assert some_data ==42
#scope="class"
@pytest.fixture(scope="class")
def some_data():
    return 42
class Test_1():
    def test_some_data1(self,some_data):
        assert some_data ==42
    def test_some_data2(self,some_data):
        assert some_data ==42

#scope="module"
@pytest.fixture(scope="module")
def some_data():
    return 42
def test_some_data3(some_data):
    assert some_data ==42
class Test_1():
    def test_some_data1(self,some_data):
        assert some_data ==42
    def test_some_data2(self,some_data):
        assert some_data ==42
#scope="session"
#conftest.py(同级目录新建)
@pytest.fixture(scope="session")
def some_data():
    return 42
#test_demo.py
class Test_1():
    def test_some_data1(self,some_data):
        assert some_data ==42
    def test_some_data2(self,some_data):
        assert some_data ==42
#test_demo2.py
class Test_2():
    def test_some_data3(self,some_data):
        assert some_data ==42
    def test_some_data4(self,some_data):
        assert some_data ==42

function<class<module<package<session;其中function指的是函数,class指的是类,module对应我们的py文件,package指的是包,session指的是我们运行一次的这个会话;在package和session层我们就要在同级目录下进行新建conftest.py存储我们的fixture了,其中conftest文件pytest内部会自动识别

fixture的参数化request

request在官方中的说明是pytest中的fixture内置函数,为请求对象提供请求测试上下文访问权限

para =[{"A":1,"B":2}]
@pytest.fixture(params=para)
def some_data(request):
    return request.param
def test_some_data3(some_data):
    assert some_data ==42
class Test_1():
    def test_some_data1(self,some_data):
        assert some_data["A"] ==42
    def test_some_data2(self,some_data):
        assert some_data["B"] ==42
===== short test summary info ===== 
FAILED test_tttttpython.py::test_some_data3[some_data0] - AssertionError: assert {'A': 1, 'B': 2} == 42
FAILED test_tttttpython.py::Test_1::test_some_data1[some_data0] - assert 1 == 42
FAILED test_tttttpython.py::Test_1::test_some_data2[some_data0] - assert 2 == 42
=== 3 failed in 0.22s === 

解释:

  1. fixture中允许传入参数params类型可以为列表字典
  2. request.param为被测对象提供上(获取param中的值)、下(调用fixture函数)管理

  1. 初始化我们也可以成为夹具,在被测对象执行前后,像汉堡包一样,这种被测对象执行前后的模式,我们也可以称之为上下文管理 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值