当前位置: 首页 > news >正文

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

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

# @File: my_module.pydef fetch_data():return 'process data'def process_data():data = fetch_data()return data.upper()
import logging
import sys
import pytest#01-------------------------------@pytest.fixture,sample_data 在测试函数中被调用,以提供必要的测试准备工作或资源
@pytest.fixture
def sample_data():arr = [1,2,3]return arrdef 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 timetime.sleep(2)#07-------------------------------@pytest.mark.filterwarnings  用于过滤警告信息,控制哪些警告被显示或忽略
@pytest.mark.filterwarnings("ignore::UserWarning")
def test_ignore_warning():import warningswarnings.warn("This is a warning", UserWarning)#08------------------------------ pytest.config  用于获取或修改 pytest 配置,虽然在较新版本中通常使用 pytest 插件系统替代
def test_config():config = pytest.configassert 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_datadef 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%]


http://www.mrgr.cn/news/19749.html

相关文章:

  • js中的new Data操作归纳(会持续补充)
  • 第九届“创客中国”生成式人工智能中小企业创新创业大赛招商推介圆满落幕
  • 告别冗长 if...else 的多种方法
  • 如何在移动端app里嵌套web页面之react-native-webview
  • 1.第二阶段x86游戏实战2-前言
  • 前端常用的几种设计模式--观察者模式、单例模式等
  • 【openwrt-21.02】T750 openwrt MT7916 WPS PBC功能实现
  • FFmpeg源码:get_audio_frame_duration、av_get_audio_frame_duration2函数分析
  • 云计算之网络
  • 【JS笔试题】模拟一个微任务
  • Spring 状态机
  • Serverless 应用引擎 SAE 助力袋拉拉研发提效 70%
  • 深度学习|模型推理:端到端任务处理
  • 前端入门了解
  • Pencils Protocol生态新进展,即将上线 Vault 产品
  • 23合并 K 个升序链表
  • 【python】Python如何通过线程池来提高程序的执行效率
  • Python中的self有什么作用
  • Java重修笔记 第四十六天 Map 接口、HashMap 类
  • 硬件工程师笔试面试知识器件篇——三极管