Pytest:单元测试利器,自动化测试开发的专业工具!

📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)

📝 职场经验干货:

软件测试工程师简历上如何编写个人信息(一周8个面试)

软件测试工程师简历上如何编写专业技能(一周8个面试)

软件测试工程师简历上如何编写项目经验(一周8个面试)

软件测试工程师简历上如何编写个人荣誉(一周8个面试)

软件测试行情分享(这些都不了解就别贸然冲了.)

软件测试面试重点,搞清楚这些轻松拿到年薪30W+

软件测试面试刷题小程序免费使用(永久使用)


今天我们来聊聊 Pytest,一个专门用来做 单元测试自动化测试 的工具。如果你是第一次接触测试,可能会想:“测试是啥?我写代码没啥问题啊!” 其实,测试是开发中非常重要的一环,它能帮我们确保代码的质量,避免因为小问题导致的“大崩溃”。而 Pytest 就是一个简单易用又功能强大的测试工具,能让你的测试写起来更轻松,跑起来更流畅。

接下来的内容,我们会从以下几个方面展开:

  1. 什么是单元测试,为什么选择 Pytest?

  2. 如何用 Pytest 写第一个测试用例?

  3. Pytest 的一些高级功能,比如参数化测试和断言重写。

  4. 实战:用 Pytest 测试一个简单的项目。

  5. 常见问题和注意事项。

别担心,我会结合实例,手把手教会你使用 Pytest。话不多说,咱们开始吧!


1. 什么是单元测试,为什么选择 Pytest?

单元测试 是一种测试方法,它的目标是验证代码中的最小功能单元(通常是函数或类)是否正常工作。比如,你写了一个加法函数 add(a, b),单元测试就会验证它是否正确返回了两个数的和。

那为什么要用 Pytest 呢?以下是 Pytest 的几个优势:

  • 简单易用:不像一些复杂的测试框架,Pytest 只需要写几个简单的函数就能完成测试。

  • 功能强大:支持参数化测试、测试夹具(fixtures)、断言重写等高级功能。

  • 兼容性好:可以和其他测试框架(比如 Unittest)无缝配合。

  • 社区活跃:文档丰富,遇到问题很容易找到解决方案。

小贴士:测试不仅是为了找 bug,更是为了防止未来的改动破坏已有功能。写测试是对自己和团队负责的一种态度哦!


2. 如何用 Pytest 写第一个测试用例?

准备好了吗?我们从最简单的测试用例开始!

安装 Pytest

首先,确保你的环境里安装了 Pytest。打开终端,运行以下命令:

pip install pytest

安装完成后,可以通过以下命令验证:

pytest --version

如果显示版本号,就说明安装成功啦!

写一个简单的测试用例

假设我们有一个简单的 add 函数,存放在一个文件 math_functions.py 中:

# math_functions.py

def add(a, b):
    return a + b

现在,我们来为这个函数编写一个测试用例。在同一目录下创建一个名为 test_math_functions.py 的文件,内容如下:

# test_math_functions.py

from math_functions import add

def test_add():
    assert add(2, 3) == 5  # 测试 2 + 3 是否等于 5
    assert add(-1, 1) == 0  # 测试 -1 + 1 是否等于 0

运行测试用例

在终端运行以下命令:

pytest

Pytest 会自动找到以 test_ 开头的文件和函数,并运行其中的测试用例。如果测试通过,你会看到绿色字样,测试失败则会显示哪里出了问题。


3. Pytest 的高级功能

Pytest 不仅仅支持简单的测试用例,还提供了很多强大的功能!这里挑几个实用的给大家讲讲。

参数化测试

如果一个函数需要测试多组不同的输入输出,该怎么办?用 Pytest 的 参数化测试 可以大大简化代码:

import pytest
from math_functions import add

@pytest.mark.parametrize("a, b, expected", [
    (2, 3, 5),     # 测试用例 1
    (-1, 1, 0),    # 测试用例 2
    (0, 0, 0),     # 测试用例 3
])
def test_add(a, b, expected):
    assert add(a, b) == expected

运行测试时,Pytest 会自动将每组参数依次传入测试函数,简直不要太方便!


测试夹具(Fixtures)

测试夹具 是 Pytest 中的一个高级功能,用于在测试开始前设置测试环境,或者在测试结束后清理资源。比如,我们要测试一个数据库连接,可以这么写:

import pytest

@pytest.fixture
def db_connection():
    # 模拟创建数据库连接
    connection = "Connected to database"
    yield connection  # yield 之前是“设置”,之后是“清理”
    print("Closing database connection...")

def test_db_query(db_connection):
    assert db_connection == "Connected to database"

运行测试时,Pytest 会自动调用 db_connection,并在测试结束时清理资源。

小贴士:Fixtures 能帮你减少重复代码,尤其在复杂的测试场景中非常实用。


断言重写

Pytest 内置了强大的 断言重写 功能,它能自动捕获断言失败时的详细信息,让调试变得更轻松:

def test_example():
    x = 5
    y = 10
    assert x == y, "x 和 y 不相等"  # 如果失败,会打印详细信息

即使没有写额外的提示信息,Pytest 也会展示断言失败时的变量值,对调试非常友好!


4. 实战:用 Pytest 测试一个简单的项目

假设我们有一个简单的 User 类,用来管理用户信息。代码如下:

# user.py

class User:
    def __init__(self, username, age):
        self.username = username
        self.age = age

    def is_adult(self):
        return self.age >= 18

编写测试用例

为这个类编写测试用例,存放在 test_user.py 文件中:

# test_user.py

from user import User

def test_user_creation():
    user = User("Alice", 25)
    assert user.username == "Alice"
    assert user.age == 25

def test_is_adult():
    adult = User("Bob", 20)
    child = User("Charlie", 15)
    assert adult.is_adult() is True
    assert child.is_adult() is False

运行测试命令:

pytest

如果一切正常,你会看到所有测试用例通过!


5. 常见问题和注意事项

  • 测试文件和函数命名规则:测试文件名必须以 test_ 开头,测试函数名也要以 test_ 开头,这样 Pytest 才能自动识别。

  • 模块导入问题:如果测试文件和代码文件在不同目录下,可能需要设置 Python 的模块搜索路径。

  • 测试失败的调试:用 pytest -v 命令可以看到更详细的信息,帮助定位问题。


总结

今天我们学习了 Pytest 的基础用法,包括如何写测试用例、运行测试、使用参数化和夹具等高级功能,还用 Pytest 测试了一个简单的项目。相信通过这些内容,你已经对 Pytest 有了一个初步的了解。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
在这里插入图片描述​​
在这里插入图片描述​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值