@pytest.fixture(scop=None,autouse=False,params=None,ids=None,name=None)
1.scop:作用域
function:在函数之前和之后执行
(1)手动调用的方式是在测试用例的参数里面加入fixture的名称;
(2)如果说fixture有通过return或yield返回值的话,那么可以把这个值传递到测试用例当中。值通过固件的名称传递的。
class:在类之前和之后执行
(1)手动调用的方式是在类的上面加上@pytest.mark.usefixtures("固件名称A")装饰器调用。
package/session:在整个项目会话之前和之后执行。(注意:fixture的scop是session级别,多线程执行,也只会执行一次;)
(1)一般会结合conftest.py文件来实现。
2.autouse:自动执行,默认是False
如果希望在另一个py文件中调用需要结合contest.py文件使用。
3.params:实现参数化
(1)如何把值传到Fixture,是通过在fixture函数的参数里面加入request来接收参数(注意:此处的request是固定写法),然后通过request.param来取值。(这里的param没有s)
@pytest.fixture(scop="function",autouse=False,params=read_yaml())
def exe_database_sql(request):
print(request.param)
print("执行SQL查询")
yield request.param
print("关闭数据库链接")
注意:
fixture怎么把值传到用例里面,通过yield 后面返回request.param来返回值即可。
再在测试用例里面使用固件。
执行结果:
4.ids:不能单独使用,必须和params一起使用,作用是对参数起别名。
使用:
5.name:是给fixture起别名。
特别注意:一旦使用了别名,那fixture的名称就不能再用了,只能用别名。