Python中级教程-测试开发

360影视 2025-01-05 11:15 3

摘要:TestCase:测试用例类,包含具体的测试方法setUp/tearDown:测试前后的准备和清理工作assertions:断言方法,用于验证结果

测试开发单元测试unittest 框架

unittest 是 Python 的标准测试框架,提供了一套完整的测试工具。

核心概念:

TestCase:测试用例类,包含具体的测试方法

setUp/tearDown:测试前后的准备和清理工作

assertions:断言方法,用于验证结果

示例代码:

import unittestclass Calculator:def add(self, a, b):return a + bclass TestCalculator(unittest.TestCase):def setUp(self):self.calc = Calculatordef test_add(self):result = self.calc.add(3, 5)self.assertEqual(result, 8)def tearDown(self):passif __name__ == '__main__':unittest.main5pytest 使用

pytest 是 Python 最流行的第三方测试框架,提供更简洁的语法和强大的功能。

主要特点:

简单的断言语法

自动发现测试用例

丰富的插件生态

示例代码:

# test_calculator.py import pytestdef test_addition:assert 1 + 1 == 2def test_zero:assert 1 + 0 == 1@pytest.mark.parametrize("a,b,expected", [(3, 5, 8),(-1, 1, 0),(0, 0, 0),])def test_add_params(a, b, expected):assert a + b == expected测试用例设计

测试用例设计原则:

单一职责:每个测试用例只测试一个功能点

完整性:覆盖正常流程和异常情况

独立性:测试用例之间互不影响

可重复性:多次运行结果一致

边界值测试

等价类划分

错误输入处理

特殊情况测试

测试夹具用于提供测试所需的预置条件和环境。

pytest fixtures 示例:

import pytest@pytest.fixturedef database:# 设置测试数据库 db = Databasedb.connectyield db# 清理操作 db.disconnectdef test_database_query(database):result = database.query("SELECT * FROM users")assert len(result) > 0参数化测试

参数化测试允许用不同的参数运行相同的测试代码。

pytest 参数化示例:

import pytest@pytest.mark.parametrize("input,expected", [("hello", 5),("python", 6),("", 0),("测试", 2)])def test_string_length(input, expected):assert len(input) == expected测试覆盖率coverage 工具

coverage.py 是 Python 代码覆盖率统计的标准工具。

安装和基本使用:

pip install coveragecoverage run -m pytestcoverage reportcoverage html # 生成HTML报告代码覆盖率分析

覆盖率类型:

语句覆盖率:执行到的代码行数百分比

分支覆盖率:条件分支的覆盖情况

路径覆盖率:代码执行路径的覆盖情况

配置文件 (.coveragerc) 示例:

[run]source = myprojectomit = */tests/*[report]exclude_lines =pragma: no coverdef __repr__raise NotImplementedError测试报告生成

pytest-html 报告生成:

pip install pytest-htmlpytest --html=report.html --self-contained-html

覆盖率报告解读:

Missing:未覆盖的代码行

Stmts:语句总数

Miss:未覆盖的语句数

Cover:覆盖率百分比

最佳实践:

设置最低覆盖率要求

定期生成覆盖率报告

重点关注核心业务逻辑的覆盖

将覆盖率检查集成到 CI/CD 流程

补充说明

测试命名规范

测试文件名应以test_开头

测试类名应以Test开头

测试方法名应以test_开头

测试执行顺序

测试用例应该保持独立性

不要依赖测试执行顺序

使用 fixtures 管理测试依赖

调试技巧

使用pytest -v查看详细输出

使用pytest -k "pattern"选择特定测试

使用pytest --pdb在失败时进入调试器

持续集成建议

来源:晋茂教育

相关推荐