conftest.py是什么?
conftest.py是fixture函数的一个集合,可以理解为公共的提取出来放在一个文件里,然后供其它模块调用。不同于普通被调用的模块,conftest.py使用时不需要导入,Pytest会自动查找
conftest.py使用场景
如果我们有很多个前置函数,写在各个py文件中是不很乱?再或者说,我们很多个py文件想要使用同一个前置函数该怎么办?这也就是conftest.py的作用
conftest.py使用原则
conftest.py这个文件名是固定的,不可以更改。
conftest.py与运行用例在同一个包下,并且该包中有__init__.py文件使用的时候
不需要导入conftest.py,会自动寻找。
conftest.py使用举例
conftest.py文件(scope=“session”)
import pytest
@pytest.fixture(scope="session")
def login():
print("输入账号密码")
yield
print("清理数据完成")
case文件:
import pytest
class TestLogin1():
def test_1(self, login):
print("用例1")
def test_2(self):
print("用例2")
def test_3(self, login):
print("用例3")
if __name__ == '__main__':
pytest.main()
运行结果
从上图可以看出,conftest.py内的fixture方法的作用范围是session,调用时,整个.py文件只会调用一次
conftest.py作用域
我们先来看下目录结构
内层case文件:b.py
import pytest
class TestLogin1():
#调用了内层fixture
def test_1(self, login2):
print("用例1")
#调用了外层fixture
def test_3(self, login):
print("用例3")
if __name__ == '__main__':
pytest.main()
内层conftest.py
import pytest
@pytest.fixture(scope="session")
def login2():
print("内层fixture前置")
外层case:a.py
import pytest
class TestLogin1():
#调用了内层fixture
def test_1(self, login2):
print("用例1")
#调用了外层fixture
def test_3(self, login):
print("用例3")
if __name__ == '__main__':
pytest.main()
外层conftest.py
import pytest
@pytest.fixture(scope="session")
def login():
print("外层fixture")
运行内层b.py
由上图过行结果可以看出,内外层的conftest.py都可以被找到并被调用执行
我们再来运行一下外层case,a.py
可以看到,外层调用内层的fixture是失败的
由以上运行结果可以总结出:
conftest.py的作用域与Python变量作用域相同
内层包内conftest.py不允许被其它包的测试类或方法使用,相当于本地变量
外层conftest.py可被内层测试类和方法使用,相当于全局变量