软件测试/测试开发全日制|Pytest conftest.py配置文件如何使用?

在这里插入图片描述

前言

我们知道在python中要想实现数据的共享,可以定义一个“全局变量”,在另一个文件中使用的时候通过先导入,再使用的方式来访问。pytest中定义个conftest.py来实现数据,参数,方法、函数的共享。本文就给大家介绍一下conftest.py的用法。

conftest.py

conftest.py文件是pytest的一个特殊文件,它用于定义项目中的共享fixture、钩子函数(hook functions)、插件和配置。这个文件可以位于测试目录树的任何级别,pytest会自动识别并应用其中定义的内容。

conftest.py的功能

  • 设置项目和fixture
  • 导入外部插件
  • 指定钩子函数

conftest.py特点

  • conftest.py可以跨.py文件调用,有多个.py文件调用时,可让conftest.py只调用一次fixture,或调用多次fixture
  • conftest.py与运行的用例要在同一个pakage下,并且有init.py文件
  • 不需要import导入 conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用了,如果放到某个package下,那就在该package内有效,可有多个conftest.py
  • conftest.py配置脚本名称是固定的,不能改名称
  • conftest.py文件不能被其他文件导入
  • 所有同目录测试文件运行前都会执行conftest.py文件

conftest.py使用场景

fixture适用于在同一个py文件中多个用例执行时的使用;而conftest.py方式适用于多个py文件之间的数据共享。比如常见的有以下场景:

  • 请求接口需要共享登录接口的token/session
  • 多个case共享一套测试数据
  • 多个case共享配置信息

使用示例

conftest.py内容如下:

# conftest.py

import pytest
@pytest.fixture(scope='session')
def get_token():
    token = 'hogwartssdet'
    print('conftest中輸出token:%s' % token)
    return token

test_demo01.py内容如下:

# test_01.py
import pytest

class Test(object):
    def test01(self, get_token):
        token = 'hogwartssdet'
        print("【执行test01.py-Test类-test01用例,获取get_token:%s】" % get_token)
        assert get_token == token


if __name__ == "__main__":
    pytest.main(["-s", "test_01.py", "test_02.py"])

test_demo02.py内容如下:

# test_02.py
import pytest

class Test(object):
    def test02(self, get_token):
        token = 'hogwartssdet'
        print("【执行test02.py-Test类-test02用例,获取get_token:%s】" % get_token)
        assert get_token == token

    def test03(self, get_token):
        token = 'hogwartssdet'
        print("【执行test02.py-Test类-test03用例,获取get_token:%s】" % get_token)
        assert get_token == token

目录结构如下所示:

在这里插入图片描述

conftest.py中的fixture(scope=session)时,所有的测试.py文件执行前执行一次。如下所示:

【执行test01.py-Test类-test01用例,获取get_token:hogwartssdet】
PASSED
test_demo02.py::Test::test02 【执行test02.py-Test类-test02用例,获取get_token:hogwartssdet】
PASSED
test_demo02.py::Test::test03 【执行test02.py-Test类-test03用例,获取get_token:hogwartssdet】
PASSED

conftest.py中的fixture(scope=module)时,每一个测试.py文件执行前都会执行一次conftest文件中的fixture。如下所示:

test_demo01.py::Test::test01 conftest中輸出token:hogwartssdet
【执行test01.py-Test类-test01用例,获取get_token:hogwartssdet】
PASSED
test_demo02.py::Test::test02 conftest中輸出token:hogwartssdet
【执行test02.py-Test类-test02用例,获取get_token:hogwartssdet】
PASSED
test_demo02.py::Test::test03 【执行test02.py-Test类-test03用例,获取get_token:hogwartssdet】
PASSED

conftest.py中的fixture(scope=class)时,每一个测试文件中的测试类执行前都会执行一次conftest文件中的fixture。如下所示:

test_demo01.py::Test::test01 conftest中輸出token:hogwartssdet
【执行test01.py-Test类-test01用例,获取get_token:hogwartssdet】
PASSED
test_demo02.py::Test::test02 conftest中輸出token:hogwartssdet
【执行test02.py-Test类-test02用例,获取get_token:hogwartssdet】
PASSED
test_demo02.py::Test::test03 【执行test02.py-Test类-test03用例,获取get_token:hogwartssdet】
PASSED

conftest.py中的fixture(scope=function)时,所有文件的测试用例执行前都会执行一次conftest文件中的fixture,如下所示:

test_demo01.py::Test::test01 conftest中輸出token:hogwartssdet
【执行test01.py-Test类-test01用例,获取get_token:hogwartssdet】
PASSED
test_demo02.py::Test::test02 conftest中輸出token:hogwartssdet
【执行test02.py-Test类-test02用例,获取get_token:hogwartssdet】
PASSED
test_demo02.py::Test::test03 conftest中輸出token:hogwartssdet
【执行test02.py-Test类-test03用例,获取get_token:hogwartssdet】
PASSED

总结

conftest.py文件是pytest中强大而灵活的工具,能够帮助我们更好地管理和组织测试代码。通过合理利用conftest.py文件,可以实现全局fixture的管理、定制pytest行为以及共享代码资源。这将使我们的测试项目更具可维护性和可扩展性,为开发工作提供更多便利。希望本文可以帮到大家!

获取更多技术资料,请点击!

推荐

Python全栈开发与自动化测试开发班
由浅入深实战进阶,从小白到高手

以Python全栈开发为基础,深入教授自动化测试技能,为学员打造全面的技术能力。通过系统学习和实际项目实战,学员将具备在职场中脱颖而出的竞争力。不仅能够灵活运用Python进行开发,还能够保障项目质量通过自动化测试手段。这是一个全面提升职业竞争力的机会。

课程详情
Python开发必备基础技能与项目实战
Pvthon 编程语言/算法和数据结构/面向对象编程Web后端开发/前端开发/测试管理平台项目实战

人工智能ChatGPT实战
人工智能辅助学习各种开发和测试技能/Pytorch深度学框架/平台开发实战

数据分析与自动化办公
数据采集/Pandas与数据处理技术/ECharts与数据可视化技术/爬虫实战/自动化办公/批量文件处理

UI自动化测试与高级项目实战
Web自动化测试/App自动化测试/ PageObject设计模式

接口自动化测试
接口协议分析/Mock实战/服务端接口测试

性能测试
性能测试流程与方法/JMeter 脚本参数化/Grafana监控系统搭建

简历指导与模拟面试
1V1简历指导/模拟真实面试/测试开发岗面试全攻略名企私教服务
名企专家1v1辅导/行业专家技术指导/针对性解决工作难题/绩效提升辅导与晋升复盘

课程亮点
名企私教服务 先学习后付费 高额奖学金
专属社群+晚自习在线答疑
5V1全方位辅导作业+考试强化学习效果
简历修改 模拟面试 就业内推 面试复盘

在这里插入图片描述

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值