📝 面试求职: 「面试试题小程序」 ,内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试,命中率杠杠的。(大家刷起来…)
📝 职场经验干货:
今天我们来聊聊 Pytest,一个专门用来做 单元测试 和 自动化测试 的工具。如果你是第一次接触测试,可能会想:“测试是啥?我写代码没啥问题啊!” 其实,测试是开发中非常重要的一环,它能帮我们确保代码的质量,避免因为小问题导致的“大崩溃”。而 Pytest 就是一个简单易用又功能强大的测试工具,能让你的测试写起来更轻松,跑起来更流畅。
接下来的内容,我们会从以下几个方面展开:
-
什么是单元测试,为什么选择 Pytest?
-
如何用 Pytest 写第一个测试用例?
-
Pytest 的一些高级功能,比如参数化测试和断言重写。
-
实战:用 Pytest 测试一个简单的项目。
-
常见问题和注意事项。
别担心,我会结合实例,手把手教会你使用 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%免费】