pytest(三)

fixture

firture相对于setup和teardown来说应该有以下几点优势:
命名方式灵活,不局限于setup和teardown这几个命名

conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置

scope="module" 可以实现多个.py跨文件共享前置

scope="session" 以实现多个.py跨文件使用一个session来完成多个用例
 

import pytest


@pytest.fixture()
def login(request):
    print('请登录~~~~~~~~~')

def test_1():
    print('用例 》 1')

def test_2(login):
    print('用例 》 2')

def test_3(login):
    print('用例 》 3')

if __name__ == '__main__':
    pytest.main(['-q', 'test_class.py'])
test_class.py .用例 》 1
请登录~~~~~~~~~
.用例 》 2
请登录~~~~~~~~~
.用例 》 3

@pytest.fixture() 不带参数的时候 默认是 : scope=”function”

相当于setup、teardown,只要用例调用了,就会走login方法,当 fixture参数scope=”module” 的时候,那么它只会在第一个调用的时候才会走login方法,而后续的不会运行,   如下图所示:

import pytest


@pytest.fixture(scope='module')
def login(request):
    print('请登录~~~~~~~~~')

def test_1(login):
    print('用例 》 1')

def test_2(login):
    print('用例 》 2')

def test_3(login):
    print('用例 》 3')

if __name__ == '__main__':
    pytest.main(['-q', 'test_class.py'])
test_class.py 请登录~~~~~~~~~
.用例 》 1
.用例 》 2
.用例 》 3

上述所述相当于setup,下面我们来说一下fixture中的teardown

yield,我们可以通过yied 来唤醒执行teardown,如下图:

import pytest


@pytest.fixture(scope='module')
def login(request):
    print('请登录~~~~~~~~~')
    yield
    print('关闭状态~~~~~~~')

def test_1(login):
    print('用例 》 1')

def test_2(login):
    print('用例 》 2')

def test_3(login):
    print('用例 》 3')

if __name__ == '__main__':
    pytest.main(['-q', 'test_class.py'])
test_class.py 请登录~~~~~~~~~
.用例 》 1
.用例 》 2
.用例 》 3
关闭状态~~~~~~~

addfinalizer终结函数

import pytest


@pytest.fixture(scope='module')
def login(request):
    print('请登录~~~~~~~~~')
    def end():
        print('关闭~~~~~~')
    request.addfinalizer(end)

def test_1(login):
    print('用例 》 1')

def test_2(login):
    print('用例 》 2')

def test_3(login):
    print('用例 》 3')

if __name__ == '__main__':
    pytest.main(['-q', 'test_class.py'])
test_class.py 请登录~~~~~~~~~
.用例 》 1
.用例 》 2
.用例 》 3
关闭~~~~~~

yield和addfinalizer方法都是在测试完成后呼叫相应的代码。但是addfinalizer不同的是:
他可以注册多个终结函数。

这些终结方法总是会被执行,无论在之前的setup code有没有抛出错误。这个方法对于正确关闭所有的fixture创建的资源非常便利,即使其一在创建或获取时失败
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值