| name | run-tests |
| description | 后端代码测试验证规则。此技能在以下情况下自动触发:
- 任何后端代码修改(backend/ 目录下的 .py 文件)
- 新增功能开发
- Bug 修复
- 代码重构
核心原则:
1. 后端代码修改必须有对应的测试用例
2. 修改业务逻辑时必须同步更新相关测试用例
3. 测试全部通过才算功能完成
触发关键词:后端、backend、python、测试、test、pytest、功能、feature、修复、fix、实现、修改、完成、验证
alwaysApply: true
|
后端测试验证规则
一、强制要求
当修改后端代码时,必须遵循以下规则:
-
新功能必须有测试
- 每个新增的函数/类必须有对应的单元测试
- 测试文件放在
backend/tests/ 对应目录下
- 测试函数命名:
test_<功能名>_<场景>
-
修改代码必须同步更新测试
- 修改业务逻辑后,必须检查并更新相关测试用例
- 如果修改导致测试失败,需判断是代码 bug 还是测试需要更新
- 业务变更 → 更新测试用例
- 代码 bug → 修复代码
-
测试必须全部通过
- 功能完成的标准:所有相关测试通过
- 不允许跳过或注释掉失败的测试
-
测试用例必须反映最新业务
- 测试用例应该与当前业务逻辑保持一致
- 修改功能时,同时更新测试的预期结果
二、验证命令
2.1 测试命令
cd backend && uv run pytest tests/ -v
cd backend && uv run pytest tests/<module>/ -v
cd backend && uv run pytest tests/<module>/test_<name>.py -v
cd backend && uv run pytest -k "<pattern>" -v
2.2 代码质量检查(必须)
cd backend && uv run ruff check --fix
cd backend && uv run ruff check
注意:测试通过 + ruff 检查通过,才算代码验证完成。
三、测试目录结构
backend/tests/
├── conftest.py # 共享 fixtures
├── core/ # 核心模块测试
│ ├── test_config.py
│ └── test_errors.py
├── models/ # 数据模型测试
│ └── test_conversation.py
├── repositories/ # 仓库层测试
│ └── test_base.py
├── schemas/ # Schema 测试
│ ├── test_agent.py
│ ├── test_chat.py
│ ├── test_events.py
│ └── test_websocket.py
└── services/ # 服务层测试
├── test_conversation.py
└── test_streaming.py
四、工作流程
4.1 新增功能时
-
先写测试(推荐 TDD)
def test_new_feature_basic():
"""测试新功能的基本场景"""
result = new_feature(input)
assert result == expected
def test_new_feature_edge_case():
"""测试边界情况"""
...
def test_new_feature_error_handling():
"""测试错误处理"""
with pytest.raises(ExpectedError):
new_feature(invalid_input)
-
实现功能代码
-
运行测试验证
cd backend && uv run pytest tests/services/test_new_feature.py -v
-
测试通过后才算完成
4.2 修改现有功能时
-
先找到相关测试文件
grep -r "test_<功能名>" backend/tests/
-
理解当前测试的预期行为
-
修改业务代码
-
同步更新测试用例
- 如果返回值/行为变了 → 更新测试的
assert 语句
- 如果新增了字段/参数 → 新增测试覆盖
- 如果删除了功能 → 删除相关测试
-
运行测试验证
cd backend && uv run pytest tests/ -v
4.3 修复 Bug 时
- 先写失败测试(复现 Bug)
- 修复代码
- 验证测试通过
- 运行完整测试套件确保无回归
4.4 重构时
- 先运行现有测试确保通过
- 进行重构
- 重新运行测试确保通过
五、测试编写规范
5.1 测试函数命名
def test_<被测对象>_<场景>_<预期结果>():
def test_create_agent_with_valid_data_returns_agent():
def test_create_agent_with_empty_name_raises_error():
5.2 测试结构(AAA 模式)
def test_example():
input_data = {...}
result = function_under_test(input_data)
assert result == expected
5.3 使用 fixtures
@pytest.fixture
def sample_agent():
return Agent(name="test", type="faq")
def test_agent_update(sample_agent):
sample_agent.name = "updated"
assert sample_agent.name == "updated"
六、完成标准
功能完成的检查清单:
验证流程:
cd backend && uv run pytest tests/ -v
cd backend && uv run ruff check --fix
只有满足以上所有条件,功能才算真正完成。
七、常见场景示例
场景 1:修改函数返回值
def test_get_item():
result = get_item(1)
assert result["id"] == 1
assert result["name"] == "test"
assert result["status"] == "active"
场景 2:修改函数签名
def test_process_with_options():
result = process(data, options={"flag": True})
assert result == expected_with_options
场景 3:修改业务逻辑
def test_price_category_cheap():
assert get_category(150) == "cheap"