一 引言
在测试过程中,通常会包括三个步骤,前置、执行测试、后置,pytest框架中,提供了类似的函数。
模块级别:setup_module (前置) / teardown_module(后置) ->不在类中,全局的
函数级别:setup_function(前置)/ teardown_function(后置) ->不在类中
类级别: setup_class (前置) / teardown_class (后置) ->只在类中前后运行一次
方法级别:setup_method(前置)/ teardown_method (后置)->类中方法前后
用例级别:setup (前置)/ teardown (后置)->运行测试用例的前后
但是,这种前置、后置处理方式存在一定的缺陷。假如,一个测试类中,存在多个测试方法,每一个测试方法需要不同的前置、后置,该怎么处理会比较好呢?
pytest提供了一种高级的功能,fixture。可以通过实现文件共享机制,供模块、函数、类或者整个项目会话使用。
在conftest.py中实现文件共享机制,而且不需要import导入,pytest会自动去加载匹配对应的fixture。
二 fixture参数详解
@pytest.fixture(scope = "function", params=None, autouse=False, ids=None, name=None)
1、scope:控制fixture作用域,默认是function级别
session:每次会话只需要运行一次,会话内所有模块、类、方法,都共享这个fixture
module:每一个.py文件调用一次
class:每一个类中调用一次
function:每一个function或者类方法中都会调用
2、params:可选的参数列表
①Fixture可选的参数列表,支持列表传入
②默认为None,每个param的值。
③可通过request.param接受设置的返回值,params中有多少个元素,在测试时,引用次fixture的函数就会调用几次。
④可与参数ids一起使用,作为每个参数的标识。
3、autouse:是否自动执行设置的fixture,默认是False
当autouse为True时,自动执行定义的fixture。
当autouse为False时,测试函数需要调用定义的fixture,定义的fixture函数才能执行。
4、ids:指定每个字符串id
当有多个params时,针对每一个param,可以指定id,这个id将变成测试用例名字的一部分。如果没有提供id,id将自动生成。
5、name:fixture的重命名
默认是fixture函数的名称,可以通过name参数更改这个fixture的名称。更改后,如果这个fixture被调用,则使用更改后的名称。
三 fixture应用
3.1、函数名调用fixture
import pytest
@pytest.fixture
def fix_a():
print("调用fix_a")
def test_a(fix_a