Fixture
- fixture是一种类似于setup、teardown,用于测试前后进行预备、清理工作的代码处理机制
- 相比于setup、teardown来说,fixture命名更灵活,局限性更少
- 使用
conftest.py
配置里面可以实现数据共享,不需要import就能自动找到一些配置
使用范围
function范围
- 我们首先需要在一个自定义方法前写上fixture的注解
- 如果不写范围,则该fixture默认为function范围
- 我们需要在要求调用该fixture的方法的形参处,写上自定义方法名
- 我们也可以使用
autouse=True
来让该文件内的每一个函数都自动调用fixture,同时避免我们手动写自定义方法名
class范围
- 我们首先需要在一个自定义方法前写上fixture的注解,并且将范围设置为class
- 当我们在该文件内不设置class类时,如果将autoclass设置为True,那么pytest会将每一个方法都视为一个类,每一个方法都会调用该fixture
- 当我们将这些方法都放进一个类时,那么只有类最开始会调用一次fixture
- 如果该文件内有很多个类,我们只想让其中的某一个类调用fixture,那么只需要将autouse设为False,并且在某一个类中的某一个方法的形参上加上该fixture即可
- 当我们在该文件内不设置class类时,如果将autoclass设置为True,那么pytest会将每一个方法都视为一个类,每一个方法都会调用该fixture
module范围
- 我们首先需要在一个自定义方法前写上fixture的注解,并且将范围设置为module
- 如果我们将autouse设为false,并且在多个方法和类中加上该fixture,那么整个py文件也只会调用一次fixture,且是在第一次加上该fixture的位置处调用
- 如果我们将autouse设为True,那么只会在整个py文件的最开始调用一次fixture
- 如果我们将autouse设为false,并且在多个方法和类中加上该fixture,那么整个py文件也只会调用一次fixture,且是在第一次加上该fixture的位置处调用
session范围
- 我们首先需要在对应目录下创建一个新文件方法前写上fixture的注解,并且将范围设置为session
- 然后我们可以在控制台用pytest来运行该目录,可以看到对于一次运行多个文件,fixture也只调用了一次,且是在最开始调用的
- 然后我们可以在控制台用pytest来运行该目录,可以看到对于一次运行多个文件,fixture也只调用了一次,且是在最开始调用的
conftest.py
我们可以将fixture的定义放在conftest.py方法内部,统一管理
conftest.py为固定格式,不可以修改名字
使用conftest.py文件中的方法时,无需导入,直接在方法的参数处引入形参即可
conftest.py仅作用于当前所处文件夹和下属文件夹
如果在conftest.py中,范围为function的fixture,设置autouse为True,那么当前所处文件夹和下属文件夹的所有测试用例都会自动调用该fixture
- 一个测试用例可以接收多个fixture
- 一个测试用例可以接收多个fixture
fixture通过return返回数据
- 我们可以在fixture中使用return来返回数据,供其他测试用例调用
- 在测试用例中,我们将fixture方法名作为实参传入后,pytest会自动将该fixture的返回值传给该同名形参,因此我们可以在后续代码中直接使用