查询天气交通的Agent工具的测试
1.单元测试
- 目标:验证每个函数/方法在隔离环境下的正确性。
- 范围:
# 导入被测试模块
from weather_traffic_agent import (
LLMWeatherTrafficAgent,
WeatherTool,
TrafficTool,
WeatherAPI,
TrafficAPI,
QueryType
)
- 特点:不依赖真实网络,使用
Mock完全模拟 API。 - 优先级:最高,必须全部通过才能继续。
|
测试内容 |
方法 |
|
环境变量缺失 |
模拟 返回 ,断言抛出 |
|
正常/异常 |
Mock ,检查返回值格式 |
|
正常/异常 |
Mock ,检查返回值格式 |
|
返回工具调用 |
Mock ,构造带 的响应 |
|
完整流程 |
模拟两次模型调用,验证最终回复内容包含工具结果 |
|
模型不调用工具 |
模拟直接文本回复,验证 直接返回该文本 |
|
工具执行失败 |
模拟工具返回 ,验证最终回复包含错误信息 |
2.集成测试
- 目标:验证 Agent 内部模块(解析 → 模糊处理 → 调用 API → 生成回复)之间的协作。
- 范围:
- 完整流程:从用户输入到最终回复,使用 Mock API。
- 错误传播:API 错误如何在整个链条中传递并返回给用户。
- 上下文存储:检查
self.context是否正确记录。
- 特点:测试
process方法,但 API 仍用 Mock,避免外部依赖。
|
测试场景 |
描述 |
|
1. 天气查询 |
模拟模型返回 工具调用,执行后生成最终回复 |
|
2. 交通查询 |
模拟模型返回 工具调用 |
|
3. 无工具调用 |
模拟模型直接回复(闲聊) |
|
4. 工具执行失败 |
模拟工具返回错误,验证最终回复包含错误信息 |
|
5. 未知工具 |
模拟模型请求未知工具,验证错误处理 |
|
6. 多轮对话(可选) |
模拟连续两次对话,验证上下文记忆(需要 Agent 支持) |
|
7. 环境变量缺失 |
已在单元测试中覆盖,不再重复 |
3.业务逻辑测试
- 目标:验证具体业务规则(如交通距离合理性、日期映射、多城市处理)是否符合需求。
- 内容:涵盖正常流程、异常边界、业务约束(如时间不能为负)。
- 注意:与集成测试有部分重叠,但更关注业务语义而非调用链。
mock版本+真实LLM
|
分类 |
测试方法 |
验证行为 |
|
天气正常 |
, |
正确识别城市、调用工具、返回天气 |
|
天气异常 |
, , |
API 超时、无效日期、过去日期时,Agent 能转发错误并生成友好提示 |
|
天气边界 |
, |
不存在城市(工具报错)和只问天气无城市(模型直接回复)的处理 |
|
交通正常 |
|
识别起终点、调用工具、返回交通信息 |
|
交通异常 |
, , |
API 错误、相同城市、无效城市时的错误处理 |
|
交通边界 |
, |
缺终点/起点时,Agent 要求补充信息(或自动补起点) |
|
联动 |
, , |
多工具调用、部分参数缺失、全部参数缺失时的综合处理 |
4.输入鲁棒性与安全性测试
- 目标:评估系统对各类非法、恶意、边界输入的承受能力。
- 内容:拼写错误、同义词、提示注入尝试(虽无 LLM,但测试解析器不受影响)、特殊字符、空输入、超长输入。
- 目的:确保系统不崩溃且返回合理提示。
|
类别 |
测试用例 |
验证点 |
|
鲁棒性 |
拼写错误、同音字、中英混合 |
能正确识别城市 |
|
特殊字符、超长输入 |
不崩溃,友好提示 |
|
|
矛盾/隐含否定 |
正确提取意图 |
|
|
非常规日期 |
识别并提示无效 |
|
|
重复城市名、无关关键词 |
正确提取城市或询问 |
|
|
安全性 |
提示注入、获取系统提示、获取API Key |
不执行注入,不泄露敏感信息 |
|
跨城市越权(不存在的城市) |
合理拒绝或引导 |
5.性能与并发测试
- 目标:测量响应时间、并发处理能力和长时间运行的稳定性。
|
指标 |
串行(1并发) |
并发 5 |
并发 10 |
|
请求总数 |
40 |
20 |
30 |
|
成功数 |
40 |
20 |
30 |
|
成功率 |
100% |
100% |
100% |
|
平均耗时 (秒) |
2.831 |
2.723 |
2.633 |
|
中位数 (秒) |
2.884 |
2.650 |
2.608 |
|
最小值 (秒) |
1.839 |
1.939 |
2.133 |
|
最大值 (秒) |
3.741 |
3.404 |
3.260 |
|
标准差 (秒) |
0.414 |
0.398 |
0.253 |
|
95%分位数 (秒) |
3.584 |
3.404 |
3.218 |
|
99%分位数 (秒) |
3.741 |
3.404 |
3.260 |
6.可观测性与配置测试
- 目标:验证日志记录、上下文存储、配置变更后的行为。
|
测试类别 |
测试项 |
状态 |
关键验证点 |
|
可观测性 |
天气查询后上下文存储 |
通过 |
存在, 正确记录, 为 (LLM Agent 特性) |
|
可观测性 |
交通查询后上下文存储 |
通过 |
存在, 正确记录, 为 |
|
可观测性 |
日志输出 |
通过 |
生效,控制台输出调试信息 |
|
配置 |
默认城市(上海) |
通过 |
未指定城市时,回复非空, 存在 |
|
配置 |
默认城市(广州) |
通过 |
同上 |
|
配置 |
模型参数传递 |
通过 |
自定义 、 、 正确传递到 OpenAI 客户端 |
|
配置 |
超时处理 |
通过 |
工具超时时,Agent 生成友好的错误提示(非崩溃) |
7.提示词测试
提示词测试其实已经在测试中覆盖,根据测试结果不断优化提示词。
|
测试维度 |
覆盖用例 |
|
指令遵循(调用正确工具) |
, , |
|
边界表达(日期解析) |
|
|
对抗鲁棒性(注入拒绝) |
|
|
拒绝模拟调用(无工具时直接回复) |
, |
8.回归测试
- 目标:确保所有修改未破坏已有功能。
- 方法:将上述所有测试固化为自动化套件,每次提交后全部运行。
|
测试维度 |
测试文件 |
关键验证点 |
|
核心逻辑 |
|
解析、模糊处理、回复生成、工具执行 |
|
流程集成 |
|
完整流程、错误传播、上下文存储 |
|
业务场景 |
|
正常、异常、边界、联动(Mock LLM) |
|
真实 LLM |
、 |
真实模型下的天气/交通查询、异常、模糊、联动 |
|
鲁棒性 |
|
拼写错误、特殊字符、提示注入、敏感信息泄露 |
|
性能 |
|
响应时间、并发成功率 |
|
可观测性 |
|
日志、上下文、配置参数、超时处理 |

浙公网安备 33010602011771号