一、简介
1.1、有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活;
1.2、按模块化的方式实现,每个fixture都可以互相调用;
1.3、fixture的范围从简单的单元测试到复杂的功能测试,可以对fixture配置参数,或者跨函数function,类class,模块module或整个测试session范围。
二、用途
2.1、做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现;
2.2、测试用例的前置条件可以使用fixture实现;
2.3、支持经典的xunit fixture ,像unittest使用的setup和teardown;
2.4、可以实现unittest不能实现的功能,比如unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是fixture却可以解决这个问题。
三、fixture可以当做参数传入
3.1、定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要用test_开头,跟用例区分开。用例才是test_开头的命名;
3.2、fixture是可以有返回值的,如果没return默认返回None。用例调用fixture的返回值,直接就是把fixture的函数名称当成变量传入;
3.3、fixture装饰器里的scope有四个级别的参数。function(不写默认这个)、class、module、session;
3.4、除scope之外。还有params、autouse、ids、name等;
3.5、fixture可以返回一个元组、列表或字典;
3.6、test_用例可传单个、多个fixture参数;
3.7、fixture与fixture间可相互调用。
四、fixture源码详解
4.1、fixture(scope=‘function‘,params=None,autouse=False,ids=None,name=None):
scope:参数可以控制fixture的作用范围,scope:function(不写默认这个)、class、module、session
params:一个可选的参数列表,它将导致多个参数调用fixture功能和所有测试使用它
autouse:如果True,则为所有测试激活fixture func可以看到它。如果为False则显示需要参考来激活fixture
ids:每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成
name:fixture的名称。这默认为装饰函数的名称。如果fixture在定义它的统一模块中使用,夹具的功能名称将被请求夹具的功能arg遮蔽,解决这个问题的一种方法时将装饰函数命令"fixture_<fixturename>"然后使
用"@pytest.fixture(name=‘<fixturename>‘)"。
4.2、fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function
function:每一个函数或方法都会调用
class:每一个类调用一次,一个类中可以有多个方法
module:每一个.py文件调用一次,该文件内又有多个function和class
session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module