conftest文件详解
conftest的作用
首先, conftest.py
的文件名称是固定的, pytest
会自动识别该文件,我们可以理解成一个专门存放 fixture
的配置文件。
一个工程下可以建多个 conftest.py
文件,一般我们都是在工程根目录下设置的 conftest
文件,这样会起到一个全局的作用。 我们也可以在不同的子目录下放 conftest.py
,这样作用范围只能在该层级的子目录下生效。
conftest.py 配置 fixture 注意事项:
- pytest 会默认读取 conftest.py 里面的所有 fixture。
- conftest.py 文件名称是固定的,不能改动。
- conftest.py 只对同一个 package 下的所有测试用例生效。
- 不同目录可以有自己的 conftest.py,一个项目中可以有多个 conftest.py。
- 测试用例文件中不需要手动 import conftest.py,pytest 会自动查找。
- 下面我们来创建一个
conftest.py
的文件
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/22 13:23
# @Author : 余少琪
import pytest
"""
scope:
1、scope 默认是function,只要是函数都会运行
2、class 类级别,每个函数都会运行一次
3、session 整个作用域只运行一次
4、module 整个py文件(模块)作用域只运行一次
autouse: 是否自动调用
"""
@pytest.fixture(scope='session', autouse=True)
def login_init():
print("这里返回了一个token")
- 然后在存放
conftest.py
文件的根目录下在创建一个test_demo.py
文件
import pytest
def test_aaa():
print("这里是aaa函数")
if __name__ == '__main__':
pytest.main(['test_demo.py', '-s'])
我们来查看一下执行结果:
pytest在执行 test_demo.py
文件之前,会先执行 conftest.py
文件中的方法,然后在执行 test_demo.py
文件。
============================= test session starts =============================
platform win32 -- Python 3.8.8, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: C:\Users\hzxy\PycharmProjects\pytest_api_demo, configfile: pytest.ini
plugins: allure-pytest-2.9.45
collected 1 item
test_demo.py 这里返回了一个token
这里是aaa函数
.
============================== 1 passed in 0.02s ==============================
yield实现teardown
用 fixture
实现 teardown
并不是一个独立的函数,而是用 yield
关键字来开启 teardown
操作。
当 pytest.fixture(scope="session")
时,作用域是整个测试会话,即开始执行pytest
到结束测试只会执行一次。
当 pytest.fixt