一、fixture简介
学pytest就不得不说fixture,fixture是pytest的精髓所在,类似unittest中setup/teardown这种前后置东西。但是比它们要强大、灵活很多,它的优势是可以跨文件共享
fixture的目的是提供一个固定基线,在该基线上测试可以可靠地和重复地执行。fixture提供了区别于传统单元测试(setup/teardown)有显著改进
1、有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。
2、按模块化的方式实现,每个fixture都可以互相调用。
3、fixture的范围从简单的单元扩展到复杂的功能测试,允许根据配置和组件选项对fixture和测试用例进行参数化,或者跨函数function、类class、模块module或整个测试会话sessio范围。
二、用途:
1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现
2.测试用例的前置条件可以使用fixture实现
3.支持经典的xunit fixture ,像unittest使用的setup和teardown
4.fixture可以实现unittest不能实现的功能,比如unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是fixture却可以解决这个问题
三、fixture作为参数传入:
1、定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要用test_开头,跟用例区分开。用例才是test_开头的命名。
2、fixture是可以有返回值的,如果没return默认返回None。用例调用fixture的返回值,直接就是把fixture的函数名称当成变量传入
3、fixture装饰器里的scope有四个级别的参数。“function(不写默认这个)”,“class”,“module”or“session”
4、除scope之外。还有params、autouse、ids、name等。
5、fixture可以有返回值,如果没有return,默认会是None;用例调用fixture的返回值,就是直接把fixture的函数名称作为参数传入
6、fixture可以返回一个元组、列表或字典
7、test_用例可传单个、多个fixture参数
8、fixture与fixture间可相互调用
fixture可以返回一个元组、列表或字典
@pytest.fixture()
def user():
print("=====打印装饰器函数=====")
username='wangli'
psw=123456
assert username=="wangli"
assert psw == 123456
return username,psw
def test_login(user):
print(user)
assert user[0]=="wangli"
assert user[1] == 123456
if __name__=="__main__":
pytest.main(["-s","test03.py"])
"C:\Program Files\Python35\python.exe" C:/Users/wangli/PycharmProjects/test/test/test03.py
============================= test session starts =============================
platform win32 -- Python 3.5.2, pytest-5.1.2, py-1.8.0, pluggy-0.12.0
rootdir: C:\Users\wangli\PycharmProjects\test\test
collected 1 item
test03.py =====打印装饰器函数=====
('wangli', 123456)
.
============================== 1 passed in 0.16s ==============================
Process finished with exit code 0
test_用例可传单个、多个fixture参数
@pytest.fixture()
def username():
print("=====打印username装饰器函数=====")
username='wangli'
assert username=="wangli"
return username
@pytest.fixture()
def psw():
print("=====打印psw装饰器函数=====")
psw=123456