**
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"])