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

相关推荐
神奇夜光杯1 分钟前
Python酷库之旅-第三方库Pandas(117)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
小丑西瓜66612 分钟前
c++智能指针
开发语言·c++·学习·基础语法·智能指针
爱是小小的癌19 分钟前
C语言自定义类型-联合与枚举
c语言·开发语言
hac132225 分钟前
HashMap线程不安全|Hashtable|ConcurrentHashMap
java·开发语言·安全
前端李易安31 分钟前
javascript中的数据类型以及存储上的区别
开发语言·javascript·ecmascript
吉小雨31 分钟前
Playwright 自动化验证码教程
运维·数据库·python·自动化
轩源源36 分钟前
C/C++内存管理
c语言·开发语言·数据结构·c++·算法·缓存·内存空间的开创
Eiceblue43 分钟前
通过C# 裁剪PDF页面
开发语言·pdf·c#·visual studio
程序者王大川1 小时前
【GO开发】MacOS上搭建GO的基础环境-Hello World
开发语言·后端·macos·golang·go
TuringSnowy1 小时前
Pandas_sqlite
python·pandas