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

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

前言

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

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

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

Pytest的异常处理:pytest.raises

pytest.raiseswith语句一起使用,成功断言到期望异常则测试通过,未断言到期望异常则测试失败,如下代码中, 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块捕获异常

除了asserttry...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...exceptassert的示例:

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代码,并且在出现异常时能够进行适当的处理。

相关文章
|
12天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
58 8
|
20天前
|
测试技术 持续交付
探索软件测试中的自动化测试策略
随着软件开发周期的加速和市场需求的不断增长,传统的手动软件测试方法已难以满足现代软件开发的高效性和准确性要求。本文旨在探讨自动化测试在软件测试中的重要性、实施策略及其对提高软件质量的影响。通过分析自动化测试的优势与挑战,以及提供实用的自动化测试工具和框架选择指南,旨在帮助读者理解并应用自动化测试以提升软件开发效率和产品质量。
|
19天前
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
30 1
|
17天前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
18天前
|
数据管理 测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
在当今快速迭代的软件开发环境中,自动化测试已成为确保软件质量和加速产品上市的关键手段。本文旨在探讨软件测试中的自动化测试策略,包括选择合适的自动化测试工具、构建有效的自动化测试框架以及实施持续集成和持续部署(CI/CD)。通过分析自动化测试的最佳实践,本文为软件开发团队提供了一系列实用的指南,以优化测试流程、提高测试效率并减少人为错误。
45 4
|
18天前
|
监控 测试技术 定位技术
探索软件测试中的自动化测试框架选择与实施###
本文不概述传统意义上的摘要内容,而是直接以一段对话形式引入,旨在激发读者兴趣。想象一下,你是一名勇敢的探险家,面前摆满了各式各样的自动化测试工具地图,每张地图都指向未知的宝藏——高效、精准的软件测试领域。我们将一起踏上这段旅程,探讨如何根据项目特性选择合适的自动化测试框架,并分享实施过程中的关键步骤与避坑指南。 ###
29 4
|
18天前
|
测试技术 持续交付 数据安全/隐私保护
软件测试的艺术与科学:探索自动化测试框架
在软件开发的世界中,测试是确保产品质量的关键环节。本文将深入探讨自动化测试框架的重要性和实现方法,旨在为读者揭示如何通过自动化测试提升软件测试效率和准确性。我们将从测试的基本概念出发,逐步引导读者了解自动化测试框架的设计和实施过程,以及如何选择合适的工具来支持测试活动。文章不仅提供理论知识,还将分享实用的代码示例,帮助读者将理论应用于实践。无论你是测试新手还是经验丰富的开发者,这篇文章都将为你打开一扇通往更高效、更可靠软件测试的大门。
19 1
|
23天前
|
数据可视化 测试技术 API
软件测试中的自动化测试框架选择与实践
在当今快节奏的软件开发环境中,自动化测试成为了确保软件质量和加速交付的关键。本文将探讨自动化测试的重要性,并比较几种流行的自动化测试框架,包括Selenium、Appium和TestComplete。文章还将提供一些最佳实践和案例研究,以帮助读者更好地理解和实施自动化测试策略。
|
23天前
|
敏捷开发 前端开发 Java
软件测试中的自动化测试框架选择与实践
在当今软件开发生命周期中,自动化测试已成为提升软件质量和开发效率的关键手段。本文旨在探讨自动化测试框架的选择标准及其在实际项目中的应用实践。通过对主流自动化测试框架的分析比较,结合具体案例,本文将阐述如何根据项目需求和团队特点选择合适的自动化测试工具,并分享实施过程中的经验教训。
32 1
|
22天前
|
Java 测试技术 API
软件测试中的自动化测试框架选择与应用##
在快速迭代的软件开发周期中,选择合适的自动化测试框架对于提高软件质量和开发效率至关重要。本文探讨了当前流行的几种自动化测试框架的特点和适用场景,旨在为软件开发团队提供决策依据。 ##
下一篇
DataWorks