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%]

相关推荐
Ivanqhz2 分钟前
图着色寄存器分配算法(Graph Coloring)
开发语言·javascript·python·算法·蓝桥杯·rust
一直都在5722 分钟前
JAVA类的加载过程
java·开发语言
2301_819414303 分钟前
Python入门:从零到一的第一个程序
jvm·数据库·python
我命由我123454 分钟前
Element Plus 问题:选择框表单校验没有触发
开发语言·前端·javascript·html·ecmascript·html5·js
iPadiPhone7 分钟前
性能之基:Java IO 体系深度解析、面试陷阱与实战指南
java·开发语言·后端·面试
于先生吖8 分钟前
前后端分离开发 Java 跑腿系统:用户 + 骑手 + 后台三端实战
java·开发语言
野犬寒鸦8 分钟前
从零起步学习JVM|| 第二章:JVM基本组成及JVM内存区域详解
服务器·开发语言·后端·学习·面试·职场和发展
2401_8914821710 分钟前
C++中的原型模式
开发语言·c++·算法
1941s11 分钟前
Google Agent Development Kit (ADK) 指南 第三章:核心概念与架构
人工智能·python·langchain·agent·adk