PYTHON从入门到实践11-测试函数与类
Python测试技术摘要:本文介绍了Python代码测试的3种核心方法。1) 内置assert语句用于简单验证,示例演示了加法函数的测试用例;2) pytest测试框架提供更强大的功能,能自动发现并执行测试,生成清晰报告;3) pytest.fixture装饰器用于创建可复用的测试环境,示例展示了员工类及其加薪方法的测试。文章还包含测试类编写的最佳实践,强调测试独立性和命名规范。这些技术组合使用可
# 【1】PYTHON中测试函数 assert
# 【2】pytest 测试库
# ============================= test session starts =============================
# collecting ... collected 2 items
#
# A_1.py::test_1 PASSED [ 50%]
# A_1.py::test_2 PASSED [100%]
#
# ============================== 2 passed in 0.01s ==============================
# 【3】pytest.fixture装饰器
def my_adder(a, b):
return a + b
def test_1():
assert my_adder(1, 2) == 3
def test_2():
assert my_adder(-1, 2) == 1
# 【3】测试类
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
def give_raise(self, amount=5000):
self.salary = self.salary + amount
def test_employee():
emp = Employee("John", 20000)
emp.give_raise()
assert emp.salary == 25000
def test_employee_self():
emp = Employee("John", 20000)
emp.give_raise(10000)
assert emp.salary == 30000
在软件开发过程中,测试是确保代码质量的关键环节。Python提供了多种测试工具和方法,本文将重点介绍三种核心测试技术:assert语句、pytest测试框架以及pytest.fixture装饰器。通过本文,你将掌握如何为Python代码编写有效的测试用例。
一、Python中的assert语句
assert是Python内置的断言语句,用于测试一个条件是否为真。如果条件为假,assert会引发AssertionError异常。
基本语法:
python
复制
下载
assert condition, message
其中condition是要测试的条件表达式,message是当断言失败时显示的可选错误消息。
示例代码分析
python
复制
下载
def my_adder(a, b): return a + b def test_1(): assert my_adder(1, 2) == 3 def test_2(): assert my_adder(-1, 2) == 1
在这个例子中:
-
my_adder
是一个简单的加法函数 -
test_1
和test_2
是两个测试函数,使用assert验证my_adder
的输出是否符合预期
assert的优点
-
简单直接,无需额外导入
-
可以快速验证代码行为
-
在开发和调试阶段非常有用
assert的局限性
-
错误信息不够详细
-
不适合复杂的测试场景
-
需要手动组织测试用例
二、pytest测试框架
pytest是Python中最流行的测试框架之一,它提供了更强大的测试功能和更友好的测试报告。
安装pytest
bash
复制
下载
pip install pytest
pytest的特点
-
自动发现测试文件(以test_开头或_test结尾的文件)和测试函数(以test_开头的函数)
-
丰富的断言 introspection,失败时提供详细信息
-
支持fixture和参数化测试
-
丰富的插件生态系统
pytest测试示例
运行测试时,只需在命令行执行:
bash
复制
下载
pytest
输出示例:
text
复制
下载
============================= test session starts ============================= collecting ... collected 2 items A_1.py::test_1 PASSED [ 50%] A_1.py::test_2 PASSED [100%] ============================== 2 passed in 0.01s ==============================
pytest会自动:
-
发现所有测试用例
-
执行它们
-
生成清晰的测试报告
三、测试类的编写
在实际项目中,我们经常需要对类进行测试。下面是一个测试类的示例:
python
复制
下载
class Employee: def __init__(self, name, salary): self.name = name self.salary = salary def give_raise(self, amount=5000): self.salary = self.salary + amount def test_employee(): emp = Employee("John", 20000) emp.give_raise() assert emp.salary == 25000 def test_employee_self(): emp = Employee("John", 20000) emp.give_raise(10000) assert emp.salary == 30000
测试要点:
-
创建类的实例
-
调用方法
-
验证状态变化是否符合预期
四、pytest.fixture装饰器
fixture是pytest的一个强大功能,它提供了测试所需的固定环境,可以避免重复代码并提高测试的可维护性。
fixture的基本用法
python
复制
下载
import pytest @pytest.fixture def employee(): return Employee("John", 20000) def test_give_default_raise(employee): employee.give_raise() assert employee.salary == 25000 def test_give_custom_raise(employee): employee.give_raise(10000) assert employee.salary == 30000
fixture的优势:
-
复用测试数据
-
减少重复代码
-
使测试更清晰
-
支持复杂的setup/teardown操作
fixture的作用范围
可以通过scope参数控制fixture的作用范围:
-
function (默认):每个测试函数运行一次
-
class:每个测试类运行一次
-
module:每个模块运行一次
-
session:整个测试会话运行一次
python
复制
下载
@pytest.fixture(scope="module") def shared_resource(): # 初始化代码 yield resource # 清理代码
五、最佳实践
-
命名规范:
-
测试文件:test_.py或_test.py
-
测试函数/方法:test_*
-
fixture函数:不以test_开头
-
-
测试组织:
-
将测试与源代码分离
-
为每个模块创建对应的测试模块
-
使用类组织相关测试
-
-
断言消息:
-
为重要的assert添加描述性消息
python
复制
下载
assert result == expected, f"Expected {expected}, got {result}"
-
-
测试独立性:
-
每个测试应该独立运行
-
避免测试之间的依赖关系
-
六、总结
本文介绍了Python测试的三个关键方面:
-
使用assert进行简单验证
-
利用pytest框架组织和管理测试
-
通过fixture优化测试代码结构
良好的测试实践可以显著提高代码质量和开发效率。pytest提供了丰富的功能来满足各种测试需求,是Python项目中不可或缺的工具。
希望本文能帮助你更好地理解和应用Python测试技术。在实践中,建议从小规模测试开始,逐步建立完整的测试套件,为项目的稳定性和可维护性打下坚实基础。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)