fixture固件 结合 conftest.py使用
1. fixture 是夹具还是固件?
(1)在数控加工中,fixture通常翻译为夹具,用于固定工件以便进行加工
(2)在软件测试中,fixture指的是测试固件,用于测试用例环境的搭建和销毁。在测试步骤执行前,fixture用于搭建测试环境,测试完成后用于销毁测试环境
2. fixture用途
fixture的主要用途包括:
设置测试环境:例如,配置数据库连接、初始化外部服务等。
准备测试数据:提供测试所需的数据,如用户信息、产品列表等。
模拟外部依赖:当测试难以直接访问外部系统时,可以使用fixture来模拟这些系统的行为。
执行特定操作:在测试前后执行某些特定操作,如临时修改配置、记录日志等。
共享资源:在不同的测试用例之间共享资源,减少资源的创建和销毁开销。
3. fixture 中的yield
fixture固件 Pytest使用yield关键词将固件分为两部分, yield之前的代码属于预处理,会在测试前执行; yield之后的代码属于后处理,将在测试完成后执行.
4. fixture的使用
a、autouse 参数,默认为False,需要使用时手动调用 , 如果设置为True,相关层级所有的用例都会自动使用这个fixture ;
b、fixture 的 autouse=True 测试函数自动调用,不需要传函数名 ,这样也就无法获取到 fixture 的返回值 ,一般不怎么用 ;
4. 使用范围(scope)
在pytest中,fixture的作用域决定了测试夹具的生命周期以及它们能被哪些测试用例或测试类访问。以下是pytest中fixture的几种作用域及其用途:
function:这是fixture的默认作用域。当不指定scope参数时,fixture会在每个测试函数执行前被调用,并在测试函数结束后清理。它适用于需要为每个测试准备和清理资源的场合。例如,打开和关闭数据库连接、初始化和释放内存空间等。
class:当设置scope='class'时,fixture会在一个测试类开始前被调用一次,然后在整个类的所有测试方法运行完毕后被清理。这适用于整个测试类共享的准备工作,如创建共享的测试环境或对象。
module:如果设置scope='module',则fixture会在整个模块的第一个测试开始前被调用,并在模块中的所有测试完成后被清理。这通常用于模块级别的资源管理,比如建立和断开与外部服务的连接。
package/package.module:当设置为scope='package'或scope='package.module'时,fixture将在整个包或指定的包的模块中运行一次。这适用于跨模块或跨包共享的测试资源,例如配置全局服务或执行一次性的环境设置。
session:通过scope='session'设置,fixture将在整个测试会话中只运行一次。这适用于开销较大,且所有测试用例都可以共享的准备步骤,如复杂的系统级设置或一次性的资源分配。
instance:如果设置了scope='instance',则可以为每个测试实例创建一个fixture实例。这允许在不同的测试用例之间共享状态,而不需要在每个测试用例中重新准备。
classinstance:通过scope='classinstance',可以为每个测试类创建一个fixture实例。与instance类似,但适用于在类的不同方法间共享状态。
once:使用scope='once'时,fixture只会被调用一次,无论被多少个测试用例或测试类引用。这对于单例资源管理或确保某些操作只执行一次非常有用。