首页 > 其他分享 >软件测试/测试开发全日制|Pytest conftest.py配置文件如何使用?

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

时间:2024-01-12 15:01:32浏览次数:27  
标签:配置文件 get py conftest hogwartssdet token Test 软件测试

软件测试/测试开发全日制|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

目录结构如下所示:

软件测试/测试开发全日制|Pytest conftest.py配置文件如何使用?_钩子函数_02

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行为以及共享代码资源。这将使我们的测试项目更具可维护性和可扩展性,为开发工作提供更多便利。希望本文可以帮到大家!

标签:配置文件,get,py,conftest,hogwartssdet,token,Test,软件测试
From: https://blog.51cto.com/u_15640304/9217848

相关文章

  • 软件测试/测试开发全日制|Pytest测试框架Fixture作用域详解
    前言Pytest的fixtrue是存在作用域的,比如作用域为函数级别,那么没执行一条用例,就会重新执行一次fixtrue,如果是类级别,那么多个类执行时会在去执行fixture。fixture的作用域有5个,分别是:function,class,module,package,session。有了这些作用域我们可以不用重复的去执行fixture,从......
  • python-函数进阶:函数返回多个返回值,lambda匿名函数
    如果一个函数要有多个返回值,要怎么书写呢?deftest_return():return1,2x,y= test_return()按照返回值的顺序,写对应顺序的多个变量接收即可变量之间用逗号隔开支持不同数据类型的return  匿名函数匿名函数使用lambda关键字进行定义定义语法:lambda传入参数:函数......
  • 轻松上手:PyTorch 预测书店销售趋势
    P1让我们先来设一个场景:你拥有一个书店,现在你要统计书店每天卖了多少本书,你可能写一个简单的列表来记录:[45、55、30]过了一段时间后,你还想分类记录每天不同类型的书销量如何,你可能记录如下:小说科学艺术第一天102030第二天152535第三天51015又过了一段时间,除了销量外,你还想进一步记......
  • python第三节:Str字符串类型(4)
    str.islower()判断是否都是小写字符。字符串不必都是小写字母,但是至少要有一个可以判断大小写的字符。例子:str1='abc'str2='aBcd'str3='字符a'str4='12'str5='df43'str6='字符Bcd'print(str1.islower())print(str2.islower())......
  • 无涯教程-JSON - Python编程
    本章介绍如何使用Python编程语言编码和解码JSON对象。让我们从准备环境开始,以使用Python进行JSON编程。在开始使用Python编码和解码JSON之前,您需要安装任何可用的JSON模块,在本教程中,我们已经下载并安装了Demjson,如下所示-$tarxvfzdemjson-1.6.tar.gz$cddemjson-1.6$pyt......
  • 在 Pandas 中,`and` 和 `or` 是 Python 中的关键字,用于逻辑运算。但是在 Pandas 中,我们
    在Pandas中,`and`和`or`是Python中的关键字,用于逻辑运算。但是在Pandas中,我们使用`&`和`|`来表示逻辑与和逻辑或。这是因为在Pandas中,`and`和`or`会产生歧义,而`&`和`|`则不会。因此,在Pandas中,我们应该使用`&`和`|`来表示逻辑与和逻辑或,而不是`and`和......
  • onnx.onnx_cpp2py_export.checker.ValidationError
    onnx.onnx_cpp2py_export.checker.ValidationError引言在深度学习领域,模型转换和模型部署是非常关键的环节。OpenNeuralNetworkExchange(ONNX)是一种开放的深度学习模型表示和转换的标准,为不同深度学习框架之间的模型共享和使用提供了便利。在ONNX中,模型的正确性和兼容性是非......
  • python 串联所有单词的子串 多种解法
    解法一:使用递归deffind_substrings(s,words):ifnotsornotwords:return[]word_length=len(words[0])num_words=len(words)total_length=word_length*num_wordssubstrings=[]deffind_substrings_helper(s,......
  • 软件测试需求分析,先搞清楚这几条
    需求规格说明书的检查,又叫黑盒静态测试,即不知道代码,又不执行代码,在什么都不了解的情况下,进行测试。一、检查要点:1、正确性:对照原始需求,需求是一定,不会产生误解的2、必要性:需求不能多,也不能少3、优先级:划分各个需求项,风险评估中的重要一点,有可能会舍弃优先级较低的需求4、明确性:不能......
  • Python数据可视化操作:使用pygal库绘制直方图、XY线图和饼状图
    pygal是一个功能强大的Python库,用于绘制漂亮且交互性强的数据可视化图表。本文将深入介绍如何使用pygal库绘制直方图、XY线图和饼状图,并通过案例讲解帮助读者更好地掌握这些功能。1.绘制直方图直方图是一种用于表示数据分布的图表,通过柱形的高度展示不同数值的频率。下面是绘制直......