什么是fixture
fixture是在测试函数运行前后,由pytest执行的外壳函数;代码可以定制,满足多变的测试需求;包括定义传入测试中的数据集,配置测试前系统的初始状态,为批量测试提供数据源等。fixture是pytest用于将测试前后进行预备,清理工作的代码分离出核心测试逻辑的一种机制!
举个例子
输出:
#@pytest.fixture() 装饰器用于声明函数是一个fixture
如果测试函数的参数列表中包含fixture名字,那么pytest会检测到,
检测顺序是:优先搜索该测试所在的模块,然后搜索conftest.py
并在测试函数运行之前执行该fixture,
fixture可以完成测试任务,也可以返回数据给测试函数
fixture函数放在哪里合适
1.可以放在单独的测试文件里
2.如果希望多个测试文件共享fixture,可以放在某个公共目录下新建一个conftest文件,将fixture放在里面
fixture作用范围
fixture里面有个scope参数可以控制fixture的作用范围:session > module > class > function
1、scope="function"
@pytest.fixture()如果不写参数,参数就是scope="function",它的作用范围是每个测试用例来之前运行一次,销毁代码在测试用例之后运行。可以用在函数和方法中。
a、放函数中使用
输出:
b、放类的方法中使用
输出:
2、scope="class"
fixture为class级别的时候,如果一个class里面有多个用例,都调用了次fixture,那么此fixture只在此class里所有用例开始前执行一次。
输出:
3、scope="session"
fixture为session级别的时候,可以被多个文件调用,可以跨.py文件调用。
比如我们的登陆功能,一般只需要登陆一次,那么我们在每个测试类中其实只需要调用一次即可。
使用步骤:
1、定义conftest 文件
2、定义fixture 函数
3、标识被使用的范围(function、class、session)
conftest.py配置需要注意以下点:
- conftest.py配置脚本名称是固定的,不能改名称
- conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
- 不需要import导入 conftest.py,pytest用例会自动查找
举个例子
模块一文件中使用:
模块二文件中使用:
查看输出:
使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例
举个例子
输出:
说明:
class 级别如果在class中使用,只在第一个用例执行之前执行一次;其他用例执行之前不会执行.
function 级别如果在class 中使用,每个用例执行前都执行一次