软件测试/测试开发全日制培训|Pytest的异常处理

2024-01-09

在这里插入图片描述

前言

在断言一些代码块或者函数时会引发意料之中的异常或者其他失败的异常导致程序无法运行时,使用 raises 捕获匹配到的异常可以让代码继续运行。

Python的异常处理: try...except...else...finally... ,示例如下:

try:
    print("正常的操作")
except TypeError:
    print("发生TypeError异常,执行这块代码")
    raise           # 并抛出这个异常
except:
    print("发生未知异常,执行这块代码")
else:
    print("如果没有异常执行这块代码有异常发生")
finally:
    print("退出try时总会执行")

Pytest的异常处理:pytest.raises

pytest.raises with 语句一起使用,成功断言到期望异常则测试通过,未断言到期望异常则测试失败,如下代码中, with 语句范围断言到期望异常TypeError - 测试通过示例代码如下:

import pytest


def test_01():
    with pytest.raises(TypeError) as e:
        raise TypeError
    print("2+2=4")


if __name__ == '__main__':
    pytest.main(["test_a.py", "-s"])

----------
执行结果如下:
============================= test session starts =============================
collecting ... collected 1 item

test_a.py::test_01 PASSED                                                [100%]2+2=4


============================== 1 passed in 0.02s ==============================

如下代码中, with 语句范围未断言到期望 TypeError - 测试失败

import pytest


def test_02():
    with pytest.raises(TypeError) as e:
        print("4-2=2")
    print("1+2=3")

if __name__ == '__main__':
    pytest.main(["test_a.py", "-s"])
-----------------
运行结果如下:
============================= test session starts =============================
collecting ... collected 1 item

test_a.py::test_02 FAILED                                                [100%]4-2=2

test_a.py:29 (test_02)
def test_02():
        with pytest.raises(TypeError) as e:
>           print("4-2=2")
E           Failed: DID NOT RAISE <class 'TypeError'>

test_a.py:32: Failed


============================== 1 failed in 0.05s ==============================

如果我们不知道预期异常的是什么,我们可以使用match和raise进行自定义异常,如下:

import pytest
 
def exc(x):
    if x == 0:
        raise ValueError("value not 0 or None")
    return 2 / x
 
def test_raises():
    with pytest.raises(ValueError, match="value not 0 or None"):
        exc(0)
    assert eval("1 + 2") == 3
 
if __name__ == '__main__':
    pytest.main(["test_a.py", "-s"])

match 还可以使用正则表达式进行匹配异常,如下:

with pytest.raises(ValueError, match=r"value not \d+$"):
	raise ValueError("value not 0")

使用assert语句进行断言

assert 是Python中用于检查条件是否满足的关键字。在pytest中, assert 语句是异常断言的基础。当条件不满足时, assert 会引发 AssertionError 异常,这有助于检测程序中的错误。例如:

def test_something():
    assert 2 + 2 == 4, "计算错误"

使用try…except块捕获异常

除了 assert try...except 是另一种处理异常的重要方式。在测试中, try...except 可以用来捕获并处理预期的异常。例如:

def test_exception_handling():
    try:
        # 可能引发异常的代码
        result = 10 / 0
    except ZeroDivisionError:
        # 异常处理代码
        assert True, "除数不能为零"

使用pytest.raises检查异常

pytest.raises 是pytest提供的一个工具,用于检查是否引发了预期的异常。它可以方便地验证函数是否抛出了特定类型的异常。例如:

import pytest

def test_exception():
    with pytest.raises(ValueError):
        raise ValueError

结合使用异常处理和断言进行测试

在实际的测试中,通常需要结合使用异常处理和断言来确保代码在异常情况下的行为符合预期。以下是一个结合使用 try...except assert 的示例:

def divide(x, y):
    try:
        result = x / y
    except ZeroDivisionError:
        return None
    return result

def test_divide_by_zero():
    assert divide(10, 0) is None, "除数不能为零时应返回None"

在这个例子中, test_divide_by_zero 测试函数使用 assert 来验证 divide 函数在除数为零时是否返回了None。

总结

pytest提供了多种方法来处理异常和断言,确保代码的正确性和稳定性。通过结合使用 assert 语句、 try...except 块和 pytest.raises 工具,你可以更有效地测试你的Python代码,并且在出现异常时能够进行适当的处理。

获取更多技术资料,请点击!

推荐

Python全栈开发与自动化测试开发班
由浅入深实战进阶,从小白到高手

以Python全栈开发为基础,深入教授自动化测试技能,为学员打造全面的技术能力。通过系统学习和实际项目实战,学员将具备在职场中脱颖而出的竞争力。不仅能够灵活运用Python进行开发,还能够保障项目质量通过自动化测试手段。这是一个全面提升职业竞争力的机会。

课程详情
Python开发必备基础技能与项目实战
Pvthon 编程语言/算法和数据结构/面向对象编程Web后端开发/前端开发/测试管理平台项目实战

人工智能ChatGPT实战
人工智能辅助学习各种开发和测试技能/Pytorch深度学框架/平台开发实战

数据分析与自动化办公
数据采集/Pandas与数据处理技术/ECharts与数据可视化技术/爬虫实战/自动化办公/批量文件处理

UI自动化测试与高级项目实战
Web自动化测试/App自动化测试/ PageObject设计模式

接口自动化测试
接口协议分析/Mock实战/服务端接口测试

性能测试
性能测试流程与方法/JMeter 脚本参数化/Grafana监控系统搭建

简历指导与模拟面试
1V1简历指导/模拟真实面试/测试开发岗面试全攻略名企私教服务
名企专家1v1辅导/行业专家技术指导/针对性解决工作难题/绩效提升辅导与晋升复盘

课程亮点
名企私教服务 先学习后付费 高额奖学金
专属社群+晚自习在线答疑
5V1全方位辅导作业+考试强化学习效果
简历修改 模拟面试 就业内推 面试复盘

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件测试/测试开发全日制培训|Pytest的异常处理 的相关文章

随机推荐

  • 软件测试/测试开发全日制|Pytest结合yaml实现数据驱动

    前言 我们之前介绍过pytest的参数化 我们使用了 pytest mark parametrize argnames argvalues 来实现批量传送参数的目的 但是我们不进行数据驱动的话 我们一旦对数据进行变更 就需要在代码里对我们的
  • MySQL中设置自增主键id从1开始

    可能遇到过这种问题 当你只想新增一条数据时 发现使用Insert语句后 发现id并不是从1开始的 握草 怎么回事 其实很简单 通过执行一下SQL 对应你的表就可以解决 ALTER TABLE user AUTO INCREMENT 1 具体
  • 题解 | #链表中的节点每k个一组翻转#C++暴力遍历解法

    求大家投下我们腾讯吧 发的一堆sp被鸽了 大数据面试题 Hive 华为14A还是保研华中科技大学 求大家投下我们腾讯吧 发的一堆sp被鸽了 终极 2024校招八股文 MySQL索引 第一篇 招芯片验证实习生 碰到渣导悲哀3年 给秋招画个句号
  • 锚定「中央计算+区域控制」,确定性机遇已凸显!

    中央计算 区域控制 的新一代整车电子架构 已经成为车企继电动化 智能化后的新竞争焦点 有关整车计算与域控 业界普遍认为将过去在不同域 座舱 智驾等 功能转移到集中的计算平台 可以更容易地进行整车OTA 以及灵活部署新功能 同时 基于通用操作
  • Web测试是在测什么?容易被忽视的小细节总结!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 网页bug怎么都测不出来?赶紧进来看看吧

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Vue:通过ref获取DOM元素

    一 场景描述 我们在页面的开发过程中 经常需要操作 dom 元素 来实现我们需要的效果 以往 js 中 我们是通过给 dom 添加 id 然后 通过 js 代码 document 来获取这个 dom 简写代码案例 h2 这里是h2标签 h2
  • 【计算机开题报告】基于JSP的服装店销售管理系统

    1 选课目的意义 21世纪是一个信息化时代 随着中国经济的发展和人民生活水平的提高 服装商场的普及程度日益增大 竞争也在逐渐白炽化 为了进一步提高服装商场的经营效率 在服装店销售管理中引入计算机管理系统成为了必然的选择 由于中国环境的特殊性
  • 软件测试开发/全日制/测试管理丨用户端 Web 自动化测试

    随着Web应用的普及和不断发展 用户端Web自动化测试成为确保Web应用质量的重要手段 这种测试方法不仅提高了测试效率 也帮助团队及时发现和解决潜在问题 确保用户体验的连贯性和稳定性 工具选择 用户端Web自动化测试的第一步是选择适当的工具
  • 【计算机开题报告】二手车交易平台

    一 选题依据 简述国内外研究现状 生产需求状况 说明选题目的 意义 列出主要参考文献 选题目的 意义 如今时代网络技术正在快速发展 电子商务技术也以极为强势的姿态闯入人们的视野之中 随着人们生活质量的提升 为了对身边二手物品进行回收利用 二
  • 如何用CHAT写新能源颗粒报告?

    问CHAT 写一份新能源颗粒报告 CHAT回复 新能源颗粒 也就是生化质能源颗粒 以其清洁 可再生的特性 在环保能源市场上拥有越来越广泛的应用 以下为对于新能源颗粒行业的一份报告 1 行业概述 新能源颗粒来源广泛 主要包括农业废弃物 林业废
  • springboot git配置文件自动刷新失败问题排查

    http ip port refresh 说明 springBoot版本是1 5 9 接口路径与2 x 不同 路径区别 refresh VS actuator refresh 用postman调用refresh接口刷新git配置 报错如下
  • 系列六、IO流 - 节点流 & 处理流

    一 节点流 处理流 1 1 节点流概述 节点流可以从一个特定的数据源读写数据 例如FileReader FileWriter 1 2 处理流概述 处理流 包装流 是连接在已存在的流之上 为程序提供更为强大的读写功能 例如BufferedRe
  • RT-Thread 内核基础(六)

    RT Thread内核配置示例 RT Thread的一个重要特性是高度可裁剪性 支持对内核进行精细调整 对组件进行灵活拆卸 配置主要是通过修改工程目录下的rtconfig h文件来进行 用户可以通过打开 关闭该文件中的宏定义来对代码进行条件
  • 软件测试开发/全日制/测试管理丨Docker容器技术

    Docker 是一种轻量级的容器技术 通过将应用程序及其所有依赖项封装到一个可移植的容器中 实现了应用程序的便携性 可部署性和可伸缩性 下面是关于 Docker 容器技术的主要概念和优势 主要概念 容器 Container 容器是一个轻量级
  • MySQL 通用表空间的这几个选项你会用么?

    在 MySQL 数据库中有效管理存储和性能至关重要 通用表空间为实现这一目标提供了灵活性 本文讨论通用表空间并探讨其功能 优点和实际用法 并附有说明性示例 什么是通用表空间 与默认保存系统表的单个系统表空间不同 通用表空间是用户定义的多个
  • 【计算机开题报告】智能社区管理系统

    一 设计目的及意义 随着经济的发展 人们生活水平的提高 工作和日常事务繁忙 人们对服务就有了更深入 更精细的要求 而计算机技术的迅猛发展 使得这种需求变为可能 传统的社区服务业也与互联网技术结合更加密切 这是社会发展的必然趋势 为解决社区中
  • HttpRunner(22):httprunner设置代理及请求证书验证

    httprunner设置代理 httprunner 库本身没有提供设置代理的接口 但是底层使用了urllib requests 等库 可以设置HTTP PROXY 和HTTPS PROXY 环境变量 常用的网络库会自动识别这些环境变量 日常
  • PostMan进行并发压测流程

    需求 两个记账接口在同一时间大量处理同一账户账务时 锁表顺序不同导致死锁 在修改完代码后模拟生产记账流程进行测试 需要对两个接口进行并发测试 在进行压测的时候 需要对流水号进行递增 处理流程 1 新建Collections 2 设置全局变量
  • 软件测试/测试开发全日制培训|Pytest的异常处理

    前言 在断言一些代码块或者函数时会引发意料之中的异常或者其他失败的异常导致程序无法运行时 使用 raises 捕获匹配到的异常可以让代码继续运行 Python的异常处理 try except else finally 示例如下 try pr