• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

pytest的fixture使用语法说明

武飞扬头像
天行者_fly
帮助1

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

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcejeg
系列文章
更多 icon
同类精品
更多 icon
继续加载