我基本上是跟着官网去学习fixture,自己先看并学了一遍,为了方便后续查看和记忆,所以将学习笔记记录下来,如果有不对的地方,欢迎大家评论区指出。
1.介绍
conftest.py文件用作为整个目录提供fixture的一种方式.conftest.py定义的fixture函数可以在改包中的任何测试使用,而无需导入它们(pytest会自动发现它们)
你可以新建多层目录,并且每个目录都可以拥有自己的conftest.py文件,子目录的conftest.py可以覆盖父目录的conftest.py的fixture(只针对同名的,可以理解为两个文件进行并集)
2.示例代码
文件结构:
tests/
conftest.py
import pytest
@pytest.fixture
def login():
print("登陆")
yield
print("退出登录")
@pytest.fixture
def token():
print("获取token")
yield 'token'
print("删除token")
test_demo.py
def test_demo(login):
print("测试用例")
subdirectory/
conftest.py
import pytest
@pytest.fixture
def open_chrome():
print("打开浏览器")
yield
print("关闭浏览器登录")
@pytest.fixture
def login():
print("覆盖后的登陆")
yield
print("覆盖后的退出登录")
test_demo.py
def test_demo01(login):
print("测试用例01")
def test_demo02(open_chrome):
print("测试用例02")
def test_demo03(token):
print("测试用例03")
3.运行结果
4.分析结果
我挨个来举例说明conftest.py的功能
1.test_demo.py中可以看出,我们没有引入conftest.py中的fixture::login,但我们仍然能够使用,这就是conftest.py的功能之一
2.subdirectory/test_demo.py::test_demo01,我们可以看到subdirectory/conftest.py::login覆盖了conftest.py::login,这就是conftest.py的另一个功能,子集目录的conftest.py可以覆盖父级目录conftest.py定义的fixture
3.subdirectory/test_demo.py::test_demo02,这里访问的fixture就是我们subdirectory/conftest.py::open_chrome定义的fixture,说明conftest.py支持各个目录拥有自己的conftest.py
4.subdirectory/test_demo.py::test_demo03,这里访问的fxiture就是我们conftest.py::token,可以看出我们的测试函数支持向上查找fixture,如果当前没有就去父目录查找,如果父目录没有就是爷爷的目录上查找,依次查找
注意:
1.conftest.py这个文件名称是不能修改的,如果修改是没办法识别里面的fixture的.
2.测试函数只能向上查找而不能向下查找,如上例子中的test_demo.py无法访问subdirectory/conftest.py中的fixture.
3.测试函数向上查找fixture也只能找直系亲属,比如子找父找爷爷...,但不能子找父亲的兄弟的conftest.py定义的fixture