fixture scope为session级别是可以跨.py模块调用的,也就是当我们有多个.py文件的用例时,如果多个用例只需要调用一次fixture,可以将scope="session",并且写到conftest.py文件里。写到conftest.py文件可以全局调用这里面的方法。使用的时候不需要导入conftest.py整个文件。conftest.py文件的使用规则
1.conftest.py这个文件名是固定的,不可以更改。
2.conftest.py与运行用例在同一个包下,并且该包中有__init__.py文件
3.使用的时候不需要导入conftest.py,pytest会自动识别到这个文件
4.放到项目的根目录下可以全局调用,放到某个package下,就在这个package内有效
1.实例
在运行这个项目下的所有用例,只执行一次打开浏览器。执行完所有的用例之后在执行关闭浏览器,可以在这个项目下创建一个conftest.py文件,将打开浏览器操作的方法放在这个文件下,并添加一个装饰器@pytest.fixture(scope="session"),就能实现这个项目所有测试用例的浏览器复用,实例目录结构如下:
1.1conftest.py文件
conftest文件定义了公共方法,pytest会自动读取conftest.py定义的方法
import pytest
@pytest.fixture(scope="session")
def open():
print("打开浏览器")
yield
print("执行teardown !")
print("最后关闭浏览器")
1.2test_scope1.py文件
import pytest
def test_search1(open):
print("test_search1")
pass
def test_search2(open):
print("test_search2")
pass
def test_search3(open):
print("test_search3")
pass
if __name__ =="__main__":
pytest.main()
1.3test_scope2.py文件
class TestFunc():
def test_case1(self):
print("test_case1,需要登录")
def test_case2(self):
print("test_case2,不需要登录")
def test_case3(self):
print("test_case3,需要登录")
1.4执行结果
打开cmd,进入到test_scope/,执行如下命令:
pytest -vs 或着 pytest -v -s test_scope1.py test_scope2.py
执行结果: