pytest简易教程(07):fixture跨模块共享(conftest.py)
pytest简易教程汇总,详见:https://www.cnblogs.com/uncleyong/p/17982846
关于conftest.py
如果多个模块使用的fixture相同,那么,我们可以将fixture写在conftest.py中(通过conftest.py管理共享的fixture),这样达到跨模块和文件的效果
conftest的特点:
1、文件名称默认为conftest.py,是pytest里面固定的名字,不能随意更改,通常在里面写用例执行前的一些初始化操作
2、conftest.py文件可以有多个(全局、局部),搜索优先级自底而上(从和模块同级目录开始找,一直到项目根目录),遵循就近原则
3、conftest.py中的fixture可以跨文件调用,支持函数引用、通过装饰器调用,也可以自动适配(此时autouse要改为True;如果就近的一个都是False,远的一个都是True,此时还是会自动适配近的,详见文末示例)
4、conftest.py文件作用范围是它同级test文件,或者下面的test文件
5、不需要import导入conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用
6、conftest.py文件不能被其他文件导入
示例
仅局部conftest.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
@pytest.fixture()
def login():
print("---登录")
@pytest.fixture()
def fun(login):
print("---fun")
test_qzcsbj.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
def test_a(fun):
print("--------------test_a")
结果:

添加全局conftest.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
@pytest.fixture(autouse=True, scope="function")
def f():
print("---fixture : function-前")
yield
print("---fixture : function-后")
@pytest.fixture(autouse=True, scope="class")
def f2():
print("---fixture : class-前")
yield
print("---fixture : class-后")
@pytest.fixture(autouse=True, scope="module")
def f3():
print("---fixture : module-前")
yield
print("---fixture : module-后")
@pytest.fixture(autouse=True, scope="package")
def f4():
print("---fixture : package-前")
yield
print("---fixture : package-后")
@pytest.fixture(autouse=True, scope="session")
def f5():
print("---fixture : session-前")
yield
print("---fixture : session-后")
结果:

全局和局部有同名的fixture
全局添加:
@pytest.fixture(autouse=True, scope="function")
def f0():
print("---fixture : function-前(全局)")
yield
print("---fixture : function-后(全局)")
局部添加:
@pytest.fixture(autouse=False, scope="function")
def f0():
print("---fixture : function-前(局部)")
yield
print("---fixture : function-后(局部)")
结果:调用的fixture是局部的f0,虽然是False,但是全局是True,所以哪怕没调用,也会执行这个局部fixture

如果
全局添加:
@pytest.fixture(autouse=False, scope="function")
def f0():
print("---fixture : function-前(全局)")
yield
print("---fixture : function-后(全局)")
局部添加:
@pytest.fixture(autouse=True, scope="function")
def f0():
print("---fixture : function-前(局部)")
yield
print("---fixture : function-后(局部)")
结果:

指定引用全局fixture
用例中可以通过@pytest.mark.usefixtures()指定引用全局autouse=False的fixture
__EOF__
本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!

浙公网安备 33010602011771号