Python-05-测试调试与工程化

2026-07-15wei👁 7 阅读7 分钟阅读📝 3184 字💬 0 评论
Python-05-测试调试与工程化

Python 测试、调试与工程化

一、断言(assert)

python
def divide(a, b):    assert b != 0, "除数不能为零"    return a / b # assert 仅用于开发调试,生产环境可用 -O 禁用 

二、单元测试(pytest)

安装

bash
pip install pytest 

基本测试

python
# test_math.pydef add(a, b):    return a + b def test_add():    assert add(2, 3) == 5    assert add(-1, 1) == 0    assert add(0, 0) == 0 def test_add_raises():    import pytest    with pytest.raises(TypeError):        add("2", 3) 

运行:pytest test_math.py -v

fixture(测试夹具)

python
import pytest @pytest.fixturedef sample_data():    return {"name": "Alice", "scores": [90, 85, 95]} def test_average(sample_data):    avg = sum(sample_data["scores"]) / len(sample_data["scores"])    assert avg == 90.0 @pytest.fixture(scope="module")def db_connection():    conn = create_test_db()    # setup    yield conn                  # 测试使用    conn.close()               # teardown 

参数化测试

python
@pytest.mark.parametrize("a,b,expected", [    (2, 3, 5),    (-1, 1, 0),    (0, 0, 0),    (100, 200, 300),])def test_add(a, b, expected):    assert add(a, b) == expected 

setup/teardown

python
class TestUserService:    def setup_method(self):        self.db = connect_test_db()    def teardown_method(self):        self.db.close()    def test_create(self):        assert self.db is not None 

三、调试

python
print(f"DEBUG: x={x}, type={type(x)}")   # f-string 快速查看print(f"{x=}")                            # 3.8+ 调试语法,输出 x=42 

pdb 断点调试

python
import pdb def buggy_func(a, b):    result = a / b    pdb.set_trace()       # 程序在此暂停,进入交互模式    return result # pdb 常用命令:# n (next)    执行下一行# s (step)    进入函数内部# c (continue) 继续执行# l (list)    显示代码# p 变量      打印变量值# q (quit)    退出 

3.7+ 可用内置 breakpoint() 替代 pdb.set_trace()

IDE 调试器

VS Code / PyCharm 中:

  1. 行号左侧点击设置断点(红点)
  2. F5 启动调试
  3. F10 逐行执行
  4. F11 进入函数
  5. 左侧面板查看变量值

四、虚拟环境

venv(内置)

bash
# 创建python -m venv myenv # 激活# Windows:myenv\Scripts\activate# macOS/Linux:source myenv/bin/activate # 退出deactivate 

conda

bash
conda create -n myenv python=3.11conda activate myenvconda deactivate 

五、依赖管理

pip + requirements.txt

bash
# 安装pip install requestspip install -r requirements.txt # 导出pip freeze > requirements.txt 

pyproject.toml(现代方式)

toml
[project]name = "myapp"version = "0.1.0"requires-python = ">=3.9"dependencies = [    "requests>=2.28",    "click>=8.0",] [project.optional-dependencies]dev = ["pytest", "black", "ruff"] 
bash
pip install -e .           # 可编辑模式安装pip install -e ".[dev]"    # 包含开发依赖 

六、代码规范

PEP 8 要点

  • 缩进用 4 个空格(不用 Tab)
  • 每行最多 79 字符
  • 函数/类之间空两行
  • 函数名用小写加下划线 calculate_total()
  • 类名用驼峰 MyClass
  • 常量用全大写 MAX_SIZE
  • import 放在文件顶部,按标准库→第三方→本地分组

自动格式化(black)

bash
pip install blackblack myfile.py           # 格式化单个文件black src/                # 格式化目录black . --check           # 仅检查不改动 

静态检查(ruff / flake8)

bash
pip install ruffruff check .              # 检查代码问题ruff check --fix .        # 自动修复 # flake8(传统)pip install flake8flake8 src/ 

类型检查(mypy)

bash
pip install mypymypy src/ 
python
def greet(name: str) -> str:       # 参数和返回值类型    return f"Hello, {name}" from typing import Optional, List, Dict, Union def find_user(id: int) -> Optional[dict]:    pass def process(items: List[str]) -> Dict[str, int]:    pass def parse(value: Union[int, str]) -> str:    pass 

七、Git 基础

常用命令

bash
# 初始化git initgit clone https://github.com/user/repo.git # 工作流git add file.py              # 暂存文件git add .                    # 暂存所有git commit -m "提交信息"git push origin main # 查看状态git status                   # 工作区状态git diff                     # 查看改动git log --oneline -10        # 最近 10 条提交 # 分支git branch                   # 列出分支git branch feature-x         # 创建分支git checkout feature-x       # 切换分支git checkout -b feature-x    # 创建并切换git merge feature-x          # 合并到当前分支git branch -d feature-x      # 删除分支 # 回退git reset --soft HEAD~1      # 撤销 commit,保留改动git checkout -- file.py      # 撤销工作区改动 

.gitignore

__pycache__/*.pyc.envvenv/.venv/.vscode/*.logdist/build/ 

常见工作流

bash
git checkout -b feature/new-api# ... 编写代码 ...git add .git commit -m "feat: 添加用户 API"git push origin feature/new-api# 在 GitHub 上创建 Pull Request → 合并到 main 

八、推荐工具链

工具 用途
pip 包管理
venv / conda 虚拟环境
black 代码格式化
ruff 代码检查
mypy 类型检查
pytest 单元测试
pre-commit Git 提交前自动检查
poetry 依赖管理(替代 pip+requirements.txt)

pre-commit 配置示例(.pre-commit-config.yaml):

yaml
repos:  - repo: https://github.com/astral-sh/ruff-pre-commit    rev: v0.1.0    hooks:      - id: ruff      - id: ruff-format  - repo: https://github.com/pre-commit/mirrors-mypy    rev: v1.5.0    hooks:      - id: mypy 
wei
技术博客作者
3184 字 · 0 评论
2026-07-15

评论 (0)

暂无评论,来写第一条吧

登录后发表评论

分类

友链

关于本站

用 SpringBoot + Nuxt3 搭建的个人技术博客,记录编程之路的思考与收获。

© 2026 好啵博客 · Built with ❤️ & SpringBoot + Nuxt3