Python 自动化测试
外观
Python自动化测试[编辑 | 编辑源代码]
自动化测试是软件开发中通过脚本自动验证代码功能是否符合预期的过程。Python因其简洁语法和丰富的测试框架,成为自动化测试的热门选择。本章节将系统介绍Python自动化测试的核心概念、工具及实践方法。
核心概念[编辑 | 编辑源代码]
自动化测试指使用程序替代人工执行测试用例,主要分为三类:
- 单元测试:验证单个函数/方法的正确性
- 集成测试:检查多个模块的交互
- 端到端测试:模拟用户操作验证完整系统
关键优势:
- 提高测试效率(可重复执行)
- 减少人为错误
- 支持持续集成(CI/CD)
测试框架[编辑 | 编辑源代码]
Python主流测试框架对比:
框架 | 特点 | 适用场景 |
---|---|---|
unittest | Python标准库,xUnit风格 | 传统单元测试 |
pytest | 插件丰富,语法简洁 | 中小型项目 |
Robot Framework | 关键字驱动,支持GUI测试 | 验收测试 |
pytest示例[编辑 | 编辑源代码]
# test_calculator.py
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
执行命令及输出:
$ pytest -v test_calculator.py
============================= test session starts =============================
collected 1 item
test_calculator.py::test_add PASSED [100%]
测试金字塔[编辑 | 编辑源代码]
实际案例[编辑 | 编辑源代码]
Web应用登录测试(使用Selenium):
from selenium import webdriver
def test_login():
driver = webdriver.Chrome()
driver.get("https://example.com/login")
username = driver.find_element("id", "username")
password = driver.find_element("id", "password")
username.send_keys("testuser")
password.send_keys("securepass")
driver.find_element("id", "submit").click()
assert "Dashboard" in driver.title
driver.quit()
高级技巧[编辑 | 编辑源代码]
参数化测试[编辑 | 编辑源代码]
使用pytest的@pytest.mark.parametrize
:
import pytest
@pytest.mark.parametrize("input,expected", [
("3+5", 8),
("2*4", 8),
("6/2", 3.0)
])
def test_eval(input, expected):
assert eval(input) == expected
Mock对象[编辑 | 编辑源代码]
使用unittest.mock
模拟数据库调用:
from unittest.mock import MagicMock
def get_user_count():
# 实际会连接数据库
return db.query("SELECT COUNT(*) FROM users")
def test_user_count():
mock_db = MagicMock()
mock_db.query.return_value = 42
global db
db = mock_db
assert get_user_count() == 42
数学验证[编辑 | 编辑源代码]
测试数值计算时可能需要验证公式正确性,例如测试平方根函数: 对应测试用例:
import math
def test_sqrt():
x = 2.0
y = math.sqrt(x)
assert abs(y*y - x) < 1e-9 # 处理浮点误差
最佳实践[编辑 | 编辑源代码]
- 测试命名应具有描述性(如
test_divide_by_zero
) - 每个测试只验证一个功能点
- 使用setup/teardown管理测试环境
- 测试代码也需遵循DRY原则
扩展阅读[编辑 | 编辑源代码]
- 测试覆盖率工具:coverage.py
- 行为驱动开发:behave框架
- 性能测试:locust框架
通过系统化地实施自动化测试,可显著提升代码质量和开发效率。建议从单元测试开始,逐步构建完整的测试体系。