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