13.2 端到端测试策略
13.2.1 测试分类
维度
分类
13.2.2 Mock测试 vs 真实测试
Mock 测试
from unittest.mock import Mock, patch, MagicMock
import asyncio
class MockLLMResponse:
"""模拟LLM响应"""
def __init__(self, tool_calls: list):
self.tool_calls = tool_calls
class E2ETestWithMocks:
"""使用Mock的端到端测试"""
def setup_mock_llm(self):
"""设置Mock LLM"""
self.mock_llm = Mock()
# 预设第一步响应:读取文件
self.mock_llm.generate.side_effect = [
MockLLMResponse([
{"tool_name": "read_file", "args": {"path": "data.txt"}}
]),
MockLLMResponse([
{"tool_name": "analyze_text", "args": {"text": "file content"}}
]),
MockLLMResponse([
{"tool_name": "write_file", "args": {"path": "result.txt", "content": "analysis"}}
])
]
def setup_mock_tools(self):
"""设置Mock工具"""
self.mock_tools = {
"read_file": Mock(return_value="file content"),
"analyze_text": Mock(return_value="analysis result"),
"write_file": Mock(return_value=True),
}
async def test_file_analysis_workflow(self):
"""测试文件分析工作流"""
self.setup_mock_llm()
self.setup_mock_tools()
# 创建Agent(使用Mock)
agent = Agent(
llm=self.mock_llm,
tools=self.mock_tools
)
# 运行任务
result = await agent.run("分析data.txt文件并保存结果到result.txt")
# 验证
assert result.success == True
assert self.mock_tools["read_file"].called
assert self.mock_tools["analyze_text"].called
assert self.mock_tools["write_file"].called
# 验证调用顺序
calls = self.mock_llm.generate.call_args_list
assert len(calls) == 3 # 三步调用真实测试
13.2.3 测试夹具设计
13.2.4 回归测试基线
13.2.5 完整的E2E测试套件
最后更新于
