pytest框架之@pytest.fixture()详细使用

一、简介

  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





原文地址:https://www.cnblogs.com/hecity/p/15206899.html