pytest的fixture函数一篇搞定

**

fixture定义

**
fixture就是一个函数
每个测试test函数或者测试类TEST执行前,都可以setup,或者teardown执行函数,
而fixture就是相当于setup或者teardown作用,他就是将setup和teardown函数里面的代码整合到一个fixture中即可
**

fixture命名和使用

**
fixture就是一个函数加上pytest.fixture装饰器,必须写到conftest.py文件才能生效
用法
@pytest.fixture(作用域=方法/包/文件/类/session(默认是方法),是否自动执行,name=fixture名字))
如果作用域是session,表示从执行测试用例到结束用例都用同一个session
定义:
@pytest.fixture
def 方法():
代码块

使用 有两种方法
1)直接将fixture作为参数传递给test方法
def test(fixture方法名): 注意这里直接是fixture名字,不带()
2)用装饰器@pytest.mark.usefixture(fixture方法名)
表示在执行test_方法时,必须先执行fixture装饰的方法
注意:不是test开头的方法,即使用装饰器也不会执行
3)autouse=True自动使用 默认是关闭状态
注意点
1,自定义的fixture必须放到conftest.py中才能被识别
2,contest.py作用于仅限于它所在的上一次父级目录
usefixtures与传fixture区别

如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。
**

fixture的teardown作用

**
上面讲到fixture可以包含teardown代码块,在fixture中,用yield关键字来表示是teardow作用的代码块(注意:yield装饰的不是函数,是代码块)

当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。

用例调用fixture的返回值,直接就是把fixture的函数名称当成变量名称,注意不是fixture名称加括号,而直接是fixture名称

fixture函数使用到测试函数时,有两种方法
1) 不被调用,作为pytest.mark.usefixture使用,告诉测试函数,在执行测试之前先执行此fixture函数,如
在这里插入图片描述
2)当需要使用fixture函数中的返回值时,需要在测试函数中调用此fixture,获取返回值,此fixture作为参数传递个test函数

在这里插入图片描述
**

fixture中retrun和yield区别

**
注意点:
fixture有teardown作用时,返回用yeild
不需要有teardown的时候,用return返回
yelid既可以返回值,也可以后面跟代码,而return后面只跟返回值

当yeild后面跟变量时,是相当于return,返回此变量,然后yeild后面跟代码时,是将代码作为teardown来执行

fixture中返回值的在test函数中的使用

**

fixture有返回值时,直接变量名=函数名,就获取到了返回值
如:
在这里插入图片描述
fixture能返回多个值,用元组,list或者字典,然后对应获取值
如:
在这里插入图片描述

**

fixture返回多个值使用

**
一个测试用例需要用到多个数值时,可以将这些数值分别放到多个fixture中,如下图:
在这里插入图片描述

同时呢也可以将多个数据放到一个fixture中,让此fixture return一个元组、list 或字典,然后从里面取出对应数据。
在这里插入图片描述

**

fixture之间的互相调用

**

import pytest

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

@pytest.fixture()
def sencond(first):
    '''psw调用user fixture'''
    a = first
    b = "123456"
    return (a, b)

def test_1(sencond):
    '''用例传fixture'''
    print("测试账号:%s, 密码:%s" % (sencond[0], sencond[1]))

    assert sencond[0] == "yoyo"

if __name__ == "__main__":
    pytest.main(["-s", "test_fixture6.py"])
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值