Pytest学习之fixture作用范围(scope)

fixture作用范围
fixture里面有个scope参数可以控制fixture的作用范围:session > module > class > function

  • function 每一个函数或方法都会调用
  • class 每一个类调用一次,一个类可以有多个方法
  • module,每一个.py文件调用一次,该文件内又有多个function和class
  • session 是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module
import pytest

'scope为function级别'
@pytest.fixture()
def first():
    print("\n获取用户名")
    a="nuo"
    return a
@pytest.fixture(scope="function")
def second():
    print("\n获取密码")
    b="123455"
    return b

def test_1(first):
    '''用例传fixture'''
    print("测试账号:%s"%first)
    assert first=="nuo"

def test_2(second):
    '''用例传fixture'''
    print("测试密码:%s"%second)
    assert second=="123455"
if __name__ == '__main__':
    pytest.main(["-s","fixtureandscope.py"])

‘fixture放到类里’

@pytest.fixture()
def first():
    print("\n获取用户名")
    a ="nuo"
    return a

@pytest.fixture(scope="function")
def second():
    print("\n获取密码")
    b="123456"
    return b

class TestCase():
    def test_1(self,first):
        '''用例传fixture'''
        print("测试账号:%s"%first)
        assert first =="nuo"
    def test_2(self,second):
        '''用例传fixture'''
        print("测试密码:%s"%second)
        assert second=="123456"

if __name__ == '__main__':
    pytest.main(["-s","fixtureandscope.py"])

‘scope=class’
‘fixture为class级别的时候,如果一个class里面有多个用例,都调用了此fixture,那么此fixture只在该class里所有用例开始前执行一次’

@pytest.fixture(scope="class")
def first():
    print("\n获取用户名,scope为class级别只运行一次")
    a="nuo"
    return a

class TestCase():
    def test_1(self,first):
        '用例传fixture'
        print("测试账号:%s"%first)
        assert first == "nuo"

    def test_2(self,first):
        '用例传fixture'
        print("测试账号:%s"%first)
        assert first == "nuo"

if __name__ == '__main__':
    pytest.main(["-s","fixtureandscope.py"])

‘scope=module’
‘’‘fixture为module级别时在当前.py脚本里面所有用例开始前只执行一次’’’

@pytest.fixture(scope="module")
def first():
    print("\n获取用户名,scope为module级别当前.py模块只运行一次")
    a = "yoyo"
    return a

def test_1(first):
    '''用例传fixture'''
    print("测试账号:%s"%first)
    assert first == "yoyo"

class TestCase():
    def test_2(self,first):
        '''用例传fixture'''
        print("测试账号:%s"%first)
        assert first == "yoyo"

if __name__ == '__main__':
    pytest.main(["-s","fixtureandscope.py"])

‘’‘scope=session’’’
‘’‘fixture为session级别是可以跨.py模块调用的,也就是当我们有多个.py文件的用例时候,如果多个用例只需调用一次fixture,那就可以设置为scope=“session”,并且写到conftest.py文件里’’’
‘’‘conftest.py文件名称是固定的,pytest会自动识别该文件。放到工程的根目录下,就可以全局调用了,如果放到某个package包下,那就只在该package内有效’’’
‘’'如果想同时运行test_fixture11.py和test_fixture12.py,在cmd执行

pytest -s test_fixture11.py test_fixture12.py

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值