pytest 常用的辅助函数和工具函数

pytest 常用的辅助函数和工具函数示例

python 复制代码
# @File: my_module.py


def fetch_data():
    return 'process data'

def process_data():
    data = fetch_data()
    return data.upper()
python 复制代码
import logging
import sys
import pytest

#01-------------------------------@pytest.fixture,sample_data 在测试函数中被调用,以提供必要的测试准备工作或资源
@pytest.fixture
def sample_data():
    arr = [1,2,3]
    return arr


def test_data(sample_data):
    res = sample_data[0]
    assert res == 1



#02-------------------------------pytest.raises 测试代码是否引发了预期的异常
def test_raise_divide():
    with pytest.raises(ZeroDivisionError):
        1 / 0


#03-------------------------------@pytest.mark.xfail 用于标记预期会失败的测试,测试失败不会影响整体测试结果
@pytest.mark.xfail
def test_expect_fail():
    assert 1 == 2
''' 
#04-------------------------------import pdb; pdb.set_trace() 用于在测试中插入断点,方便调试
def test_debug():
    ## import pdb; pdb.set_trace()
    assert 1 == 1
'''

#05-------------------------------@pytest.mark.usefixtures("setup_1", "setup_2")  在测试函数中应用多个夹具
@pytest.fixture
def setup_1():
    print('fixture 1')

@pytest.fixture
def setup_2():
    print('fixture 2')

@pytest.mark.usefixtures("setup_1", "setup_2")
def test_with_mul_fixtures():
    assert 1== 1

#06-------------------------------@pytest.mark.timeout  设置测试的超时时间,避免测试运行过长时间
@pytest.mark.timeout(1)
def test_long_running():
    import time
    time.sleep(2)

#07-------------------------------@pytest.mark.filterwarnings  用于过滤警告信息,控制哪些警告被显示或忽略
@pytest.mark.filterwarnings("ignore::UserWarning")
def test_ignore_warning():
    import warnings
    warnings.warn("This is a warning", UserWarning)


#08------------------------------ pytest.config  用于获取或修改 pytest 配置,虽然在较新版本中通常使用 pytest 插件系统替代
def test_config():
    config = pytest.config
    assert config.option.verbose

#09------------------------------@pytest.mark.order()控制测试的执行顺序(需要 pytest-order 插件)
@pytest.mark.order(1)
def test_first():
    assert 1==1

@pytest.mark.order(2)
def test_second():
    assert 1==1


#10------------------------------pytest.capture 的 caplog 用于捕获日志输出并进行断言
def test_logging(caplog):
    logger = logging.getLogger('test_logger')
    logger.warning('this is a warning')
    assert 'this is a warning' in caplog.text

#11------------------------------pytest.fixture 的 autouse,  自动使用夹具,而无需在测试函数中显式声明
@pytest.fixture(autouse=True)
def auto_fixture():
    print('this runs before each test')

def test_example():
    assert True

#12------------------------------pytest.mark.skipif 在特定条件下跳过测试
@pytest.mark.skipif(sys.platform=='win64', reason='Requires Unix-like OS')
def test_unix_only_feature():
    assert True


#13------------------------------pytest 的 monkeypatch 用于在测试运行时动态地修改或模拟对象、方法、类等。这可以帮助你隔离测试环境、模拟依赖项,或者控制外部依赖的行为

from TestCases.ModelG.my_module import process_data

def mock_fetch_data():
    return 'mock data'

def test_process_data(monkeypatch):
    # 使用 monkeypatch 来模拟 fetch_data 函数
    monkeypatch.setattr("TestCases.ModelG.my_module.fetch_data",mock_fetch_data)
    res = process_data()
    assert res == 'MOCK DATA'

test_data.py::test_data

test_data.py::test_raise_divide

test_data.py::test_expect_fail

test_data.py::test_with_mul_fixtures

test_data.py::test_long_running

test_data.py::test_ignore_warning

test_data.py::test_config

======= Global initialization =======

this runs before each test

PASSED [ 7%]this runs before each test

PASSED [ 15%]this runs before each test

XFAIL [ 23%]

@pytest.mark.xfail

def test_expect_fail():

> assert 1 == 2

E assert 1 == 2

test_data.py:35: AssertionError

this runs before each test

fixture 1

fixture 2

PASSED [ 30%]this runs before each test

PASSED [ 38%]this runs before each test

PASSED [ 46%]this runs before each test

FAILED [ 53%]

TestCases\ModelG\test_data.py:69 (test_config)

def test_config():

> config = pytest.config

E AttributeError: module 'pytest' has no attribute 'config'

test_data.py:71: AttributeError

this runs before each test

PASSED [ 61%]this runs before each test

PASSED [ 69%]this runs before each test

PASSED [ 76%]this runs before each test

PASSED [ 84%]this runs before each test

PASSED [ 92%]this runs before each test

PASSED [100%]

相关推荐
留不住丨晚霞15 分钟前
说说SpringBoot常用的注解?
java·开发语言
大模型真好玩17 分钟前
准确率飙升!GraphRAG如何利用知识图谱提升RAG答案质量(额外篇)——大规模文本数据下GraphRAG实战
人工智能·python·mcp
198918 分钟前
【零基础学AI】第30讲:生成对抗网络(GAN)实战 - 手写数字生成
人工智能·python·深度学习·神经网络·机器学习·生成对抗网络·近邻算法
hardStudy_h25 分钟前
C++——内联函数与Lambda表达式
开发语言·jvm·c++
applebomb28 分钟前
没合适的组合wheel包,就自行编译flash_attn吧
python·ubuntu·attention·flash
艾莉丝努力练剑1 小时前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(三)
c语言·开发语言·数据结构·学习·算法
Chasing__Dreams1 小时前
python--杂识--18.1--pandas数据插入sqlite并进行查询
python·sqlite·pandas
彭泽布衣2 小时前
python2.7/lib-dynload/_ssl.so: undefined symbol: sk_pop_free
python·sk_pop_free
witton2 小时前
Go语言网络游戏服务器模块化编程
服务器·开发语言·游戏·golang·origin·模块化·耦合
喜欢吃豆2 小时前
从零构建MCP服务器:FastMCP实战指南
运维·服务器·人工智能·python·大模型·mcp