当前位置:   article > 正文

【pytest学习总结2】夹具@pytest.fixture()和conftest详解

【pytest学习总结2】夹具@pytest.fixture()和conftest详解

一.fixture学习文章参考: 

https://blog.csdn.net/qq_36502272/article/details/100776789

https://www.cnblogs.com/xfbk/p/16065241.html

二.fixture简介:

fixture是pytest的精髓所在,类似unittest中setup/teardown这种前后置东西。但是比它们要强大、灵活很多,它的优势是可以跨文件共享

用途:
1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现
2.测试用例的前置条件可以使用fixture实现
3.支持经典的xunit fixture ,像unittest使用的setup和teardown
4.fixture可以实现unittest不能实现的功能,比如unittest中的测试用例和测试用例之间是无法传递参数和数据的,但是fixture却可以解决这个问题
 

三、fixture作为参数传入:
1、定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要用test_开头,跟用例区分开。用例才是test_开头的命名。
2、fixture是可以有返回值的,如果没return默认返回None。用例调用fixture的返回值,直接就是把fixture的函数名称当成变量传入
3、fixture装饰器里的scope有四个级别的参数。“function(不写默认这个)”,“class”,“module”、“session”
4、除scope之外。还有params、autouse、ids、name等。

params:一个可选的参数列表,它将导致多个参数调用fixture功能和所有测试使用它。
autouse:如果True,则为所有测试激活fixture func可以看到它。如果为False则显示需要参考来激活fixture
ids:每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成
name:fixture的名称。这默认为装饰函数的名称。如果fixture在定义它的统一模块中使用,夹具的功能名称将被请求夹具的功能arg遮蔽,解决这个问题的一种方法时将装饰函数命令"fixture_<fixturename>"然后使用"@pytest.fixture(name='<fixturename>')"。

5、fixture可以返回一个元组、列表或字典

6、test_用例可传单个、多个fixture参数

7、fixture与fixture间可相互调用
 

四、使用conftest.py共享fixture

conftest特点:

1、可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用了一次fixture,或调用多次fixture

2、conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件

3、不需要import导入 conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用了,如果放到某个package下,那就在改package内有效,可有多个conftest.py

4、conftest.py配置脚本名称是固定的,不能改名称

5、conftest.py文件不能被其他文件导入

6、所有同目录测试文件运行前都会执行conftest.py文件

conftest用法:

conftest文件实际应用需要结合fixture来使用,fixture中参数scope也适用conftest中fixture的特性。

在conftest.py文件里有一个关键字yeild,当他作用于pytest的fixture时,yield关键字之前的语句属于前置操作,而yield之后的语句属于后置操作,即可以用一个函数实现测试前的初始化和测试后的初始化 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/672695
推荐阅读
相关标签
  

闽ICP备14008679号