pytest测试固件
- 通过装饰器@pytest.fixture(),定义测试固件(test fixture)
- 测试固件是什么?
- 也叫测试夹具,用于实现初始化的前置操作或清理扫尾的后置操作。
- @pytest.fixture()修饰器来标记固定的工厂函数,在其他函数、模块、类或整个工程调用它时会被激活并优先执行,通常会被用于完成预置处理和重复操作。
设置测试固件的作用域
- 通过装饰器@pytest.fixture()的参数scope,设置测试固件的作用域(scope)
- scope='function' 每个测试函数或方法前做处理。
- scope='class' 每个测试类前做处理。
- scope=”module” 可以实现多个.py跨文件共享前置。
- scope=”session” 以实现多个.py跨文件使用一个session来完成多个用例。
autouse自动调用
- @pytest.fixture(scope=?, autouse=True)
- 当用例很多的时候,每次都传这个参数,会很麻烦
- fixture中的参数autouse,默认是False
- autouse设置为True,自动调用fixture功能
- 使用scope=class时,每个测试函数都会自动使用其所修饰的初始化函数
yield关键字
- yield实现用例执行完之后清除数据(或还原)操作。
- 为什么要使用yield关键字?
- fixture默认作为用例执行之前的前置操作函数存在。
- 用例执行完之后如果有后置操作,需要使用yield关键字实现。
- fixture的teardown操作并不是独立的函数,用yield关键字呼唤teardown操作。
yield返回值
- yeild也是一种函数的返回值类型,是函数上下文管理器。
- 使用yield被调fixture函数执行遇到yield会停止执行,接着执行调用的函数,调用的函数执行完后会继续执行fixture函数yield关键后面的代码。
- yield在fixture中起到了唤起teardown的作用,同时也可以和return一样返回值。
- yield和return的区别是:
- return执行完成,该函数终止;
- yield在返回结束后,后续的代码仍可执行。