pytest:为你的Python代码做“体检”

在我们刚开始学编程时,通常写完代码,能够按预期效果运行,实现功能就算完事了。

但实际上,这样的程序很可能还存在隐藏的错误。例如,一个计算函数在常规输入下正常,但在边界条件下(如空输入或负数)可能失败。手动检查耗时且容易遗漏。

因此,除了开发之外,我们还需要对代码进行测试。

pytest 是一个 Python 测试框架,用于自动化验证代码的正确性。它通过简单的语法和清晰的错误提示,帮助开发者快速发现问题,确保代码在多种场景下可靠运行。

pytest 接口简洁,易于上手,适合单元测试和小型项目。相比 Python 内置的 unittest,pytest 无需复杂的类结构,测试更直观。

1. 安装与运行

pytest 可在控制台通过 pip 命令进行安装:

pip install pytest

编写一个简单测试,保存为 test_example.py:

def test_add():    assert 1 + 1 == 2

在终端运行 pytest,pytest 会自动发现并执行以 test_ 开头的文件和函数。

选项:使用 pytest -v 查看详细输出,显示每个测试的通过/失败状态。

2. 编写测试用例

测试用例是普通的 Python 函数,需以 test_ 开头,使用 assert 验证结果。

示例 1:测试字符串方法

def test_string():    assert "hello".upper() == "HELLO"

示例 2:测试自定义函数

def add(a, b):    return a + b
def test_add():    assert add(2, 3) == 5    assert add(0, 0) == 0

测试函数应清晰描述测试目标,并保持独立性。

3. 参数化测试

使用 @pytest.mark.parametrize 测试函数在不同输入下的行为,可减少重复代码。

示例:测试一个乘二函数

import pytest
@pytest.mark.parametrize("input,expected", [(1, 2), (3, 6), (5, 10)])def test_double(input, expected):    assert input * 2 == expected

这样在提高测试覆盖率的同时,可保持代码简洁。

4. 错误提示

如有断言失败,pytest 会提供具体的错误位置,便于定位问题。

示例:

def test_wrong():    assert 1 + 1 == 3

运行 pytest,输出会显示 assert 1 + 1 == 3 这行出错。

5. 常见问题

  • 测试未运行:确保文件名和函数名以 test_ 开头。

  • 运行缓慢:使用 pytest test_file.py 只运行特定文件。

  • 结果不清晰:使用 pytest -v 查看详细测试结果。

6. 进阶学习

掌握基础后,可进一步探索以下 pytest 高级功能:

  • 夹具(Fixtures):使用 @pytest.fixture 创建可重用的测试数据或环境设置,简化测试准备和清理。

  • 异常测试:通过 pytest.raises 验证代码是否按预期抛出异常

  • 标记(Markers):使用 @pytest.mark 为测试添加标签,如跳过测试(skip)或标记特定测试组。

  • 插件系统:集成插件如 pytest-cov(测试覆盖率)、pytest-mock(模拟对象)以扩展功能。

  • 配置与定制:通过 pytest.ini 文件配置默认行为,如设置默认参数或自定义测试发现规则。

  • 并行测试:使用 pytest-xdist 插件加速测试执行,适合大型项目。

  • 测试报告:生成 JUnit XML 或 HTML 报告,集成到持续集成(CI)流程中。

如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~


Crossin的新书《码上行动:用ChatGPT学会Python编程》已经上市了。本书以ChatGPT为辅助,系统全面地讲解了如何掌握Python编程,适合Python零基础入门的读者学习。【点此查看详细介绍】

购买后可加入读者交流群,Crossin为你开启陪读模式,解答你在阅读本书时的一切疑问。

Crossin的其他书籍:


添加微信 crossin123 ,加入编程教室共同学习~

感谢转发点赞的各位~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crossin的编程教室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值