fixture简介
fixture的目的是提供一个固定基线,在该基线上测试可以可靠地和重复地执行。fixture提供了区别于传统单元测试(setup/teardown)有显著改进:
有独立的命名,并通过声明它们从测试函数、模块、类或整个项目中的使用来激活。
按模块化的方式实现,每个fixture都可以互相调用。
fixture的范围从简单的单元扩展到复杂的功能测试,允许根据配置和组件选项对fixture和测试用例进行参数化,或者跨函数function、类class、模块module或整个测试会话sessio范围。
fixture用途
1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现
2.测试用例的前置条件可以使用fixture实现
3.支持经典的xunit fixture ,像unittest使用的setup和teardown
4.fixture可以实现unittest不能实现的功能,比如unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是fixture却可以解决这个问题
fixture()方法
定义一个fixture,和定义普通函数差不多,只是多了一个装饰器@pytest.fixture(),并且fixture命名不要以test_开头,尽量和用例区别开。fixture是可以有返回值的,如果没return,默认返回None。用例调用fixture的返回值,直接就是把fixture的函数名称当成变量名称
fixture(scope='function',params=None,autouse=False,ids=None,name=None):
scope:有四个级别参数"function"(默认),"class","module","session"
params:一个可选的参数列表,它将导致多个参数调用fixture功能和所有测试使用它。
autouse:如果True,则为所有测试用例不需要传参也会调用这个fixture。如果为False则需要显示的调用fixture。
ids:每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成
name:fixture的名称。这默认为装饰函数的名称。如果fixture在定义它的统一模块中使用,夹具的功能名称将被请求夹具的功能arg遮蔽,解决这个问题的一种方法时将装饰函数命令"fixture_<fixturename>"然后使用"@pytest.fixture(name='<fixturename>')"。
scope:默认值是function,作用范围是每个测试用例来之前运行一次,销毁代码在测试用例之后运行。
设为“class”,一个class里有多个用例,都调用这个fixture,那么就在所有用例开始之前运行一次。
设为“module”,在当前.py脚本里所有用例开始之前只运行1次。
设为“session”,可以跨.py模块调用,如果多个用例只需要调用1次,可以设为session,并且写到conftest.py中。
fixture自动使用autouse=True
当用例很多的时候,每次都传fixture这个参数,会很麻烦。fixture里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了
autouse设置为True,自动调用fixture功能。
usefixtures与传fixture区别
如果fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。
当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以。
1.函数或类里面方法直接传fixture的函数参数名称
2、fixture自动使用autouse=True 当用例很多的时候,每次都传这个参数,会很麻烦。fixture里面有个参数autouse,默认是False没开启的,可以设置为True开启自动使用fixture功能,这样用例就不用每次都去传参了 autouse设置为True,自动调用fixture功能
3、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例
4、叠加usefixtures
如果一个方法或者一个class用例想要同时调用多个fixture,可以使用@pytest.mark.usefixture()进行叠加。注意叠加顺序,先执行的放底层,后执行的放上层。
参考-https://cloud.tencent.com/developer/article/1527635
参考-https://www.cnblogs.com/sy_test/p/12325254.html