【Pytest】fixture

用法

类似setup和teardown的用法,可以起任意名称,并且使用更加灵活。

yield之前的操作相当于setup,yield之前的操作相当于teardown。

@pytest.fixture
def fixture_name():
    setup操作 
    yield 返回值
    teardown操作

作用域

使用scope控制fixture的作用域,默认为function级别。

function  函数级或者方法级
class  类级
module  模块级
package 包级
session 会话级

@pytest.fixture(scope="class")
def a():
    print("start")
    yield
    print("end")

class TestA:
    def test_a(self, a):
        assert True

三种调用方法

1.函数或方法中直接传入fixture函数名。

@pytest.fixture()
def a():
    print("start")
    yield
    print("end")

class TestA:
    def test_a(self, a):
        assert True

2.使用装饰器@pytest.mark.usefixtures()

@pytest.fixture()
def a():
    print("start")
    yield
    print("end")

@pytest.mark.usefixtures("a")
class TestA:
    def test_a(self):
        assert True

3.使用多个fixture方法

如果方法或者函数想要同时调用多个fixture,可使用@pytest.mark.usefixture()进行叠加。注意叠加顺序,先执行的放底层,后执行的放上层。

@pytest.fixture()
def login():
    print("完成登录操作")
    token = "123456789"
    username = "zhangsan"
    yield token, username  #yield用法相当于return
    print("完成登出操作")

@pytest.fixture()
def a():
    print("start")
    yield
    print("end")

@pytest.mark.usefixtures("login")
@pytest.mark.usefixtures("a") #优先执行
class TestA:
    def test_a(self):
        assert True

4.直接传入函数中和使用装饰器@pytest.mark.usefixtures()的区别。

当yield后有返回值时,使用@pytest.mark.usefixtures()无法得到返回值。必须直接传入函数。

@pytest.fixture(scope="function")
def login():
    print("完成登录操作")
    token = "123456789"
    username = "zhangsan"
    yield token, username  #yield用法相当于return
    print("完成登出操作")

def test_a(login):
    token, username = login
    print(token, username)

5.也可以使用autouse自动使用。默认值为False,改为True时所有测试函数和方法会自动使用此fixture函数而无需调用。

@pytest.fixture(scope="class", autouse=True)
def a():
    print("start")
    yield
    print("end")

class TestA:
    def test_a(self):
        assert True

conftest的使用

在conftest.py配置里写方法实现数据共享,不需要import导入,可跨文件共享。 

将定义的fixture方法放入conftest.py中,放置在公共目录中,测试代码可以直接调用conftest.p中的fixture方法,而不需要放在同一个测试文件中。多人协作中可是实现共用方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值