共计 1457 个字符,预计需要花费 4 分钟才能阅读完成。
1. 新手常见误区分析
刚开始编写 skill 测试用例时,我们往往会踩一些坑。这里总结了几个最常见的问题:

-
过度依赖 UI 测试 :很多新手喜欢一上来就写端到端测试,导致测试执行慢且脆弱。实际上,按照测试金字塔,我们应该以单元测试为主。
-
硬编码测试数据 :直接在测试代码中写死数据,导致测试难以复用和维护。更好的做法是用数据驱动的方式。
-
断言不够全面 :只检查返回状态码,忽略数据结构、业务逻辑等关键验证点。
-
缺乏异常场景测试 :只测试 happy path,不验证错误处理逻辑。
2. 分层测试策略
根据测试金字塔理论,skill 项目的测试应该这样分层:
-
单元测试(70%):重点测试各个独立函数和方法。可以使用 mock 隔离外部依赖。
-
集成测试(20%):验证模块间交互,特别是与外部服务的集成。
-
E2E 测试(10%):只覆盖关键用户旅程,保持数量最少。
3. 实战代码模板
下面是一个完整的 Python+pytest 测试模板:
import pytest
from skill import SkillProcessor
# 测试固件
@pytest.fixture
def skill_processor():
"""初始化 Skill 处理器"""
return SkillProcessor()
# 数据驱动测试
@pytest.mark.parametrize("input_text, expected_intent", [("打开空调", "turn_on_ac"),
("调高温度", "increase_temp"),
("关闭灯光", "turn_off_light"),
])
def test_intent_recognition(skill_processor, input_text, expected_intent):
"""测试意图识别"""
result = skill_processor.parse_intent(input_text)
# 多维度断言
assert result["status"] == 200 # 状态码
assert result["intent"] == expected_intent # 业务逻辑
assert "timestamp" in result # 数据结构
# 异常场景测试
def test_invalid_input(skill_processor):
"""测试无效输入处理"""
with pytest.raises(ValueError):
skill_processor.parse_intent("")
4. 避坑指南
在实际项目中,还需要注意以下问题:
- 异步操作等待 :UI 测试中要合理设置等待时间,避免因加载延迟导致测试失败。
# 使用显式等待
from selenium.webdriver.support.ui import WebDriverWait
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "result")))
-
测试数据清理 :每个测试用例执行后要清理测试数据,保持测试环境干净。
-
测试独立性 :确保测试用例之间没有依赖,可以独立运行。
5. 进阶建议
当测试用例稳定后,可以考虑:
-
集成到 CI/CD:每次代码提交都自动运行测试,及时发现问题。
-
添加性能测试 :确保 skill 在高负载下也能稳定运行。
-
实施契约测试 :当 skill 依赖外部服务时,用契约测试保证接口兼容性。
6. 开放性问题
最后留给大家思考:在有限的测试资源下,如何平衡测试覆盖率和执行速度?这是一个需要根据项目特点不断调整的问题。
