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

相关推荐
Code apprenticeship几秒前
Java面试题(2)
java·开发语言
J不A秃V头A3 分钟前
Python爬虫:获取国家货币编码、货币名称
开发语言·爬虫·python
阿斯卡码1 小时前
jupyter添加、删除、查看内核
ide·python·jupyter
SRY122404193 小时前
javaSE面试题
java·开发语言·面试
无尽的大道3 小时前
Java 泛型详解:参数化类型的强大之处
java·开发语言
ZIM学编程3 小时前
Java基础Day-Sixteen
java·开发语言·windows
放逐者-保持本心,方可放逐3 小时前
react 组件应用
开发语言·前端·javascript·react.js·前端框架
埃菲尔铁塔_CV算法4 小时前
图像算法之 OCR 识别算法:原理与应用场景
图像处理·python·计算机视觉
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据
人工智能·python·机器学习·数据挖掘
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-2.技术栈
人工智能·python·机器学习·数据挖掘