LangGraph 深度测试指南:端到端与节点级测试策略
LangGraph 应用的深度测试需要系统化的方法,以下是端到端测试和节点级测试的完整解决方案:
一、节点深度测试策略
1. 节点测试金字塔模型
2. 核心测试类型
(1) 功能正确性测试
def test_tool_node():
# 准备测试状态
state = AgentState(
messages=[HumanMessage(content="查询北京天气")],
user_query="北京天气",
tool_results=[]
)
# 执行节点
result = tool_node(state)
# 验证输出
assert "temperature" in result["tool_results"][0]
assert "condition" in result["tool_results"][0]
assert isinstance(result["tool_results"][0]["temperature"], float)
(2) 边界条件测试
@pytest.mark.parametrize("input", [
{
"user_query": ""}, # 空输入
{
"user_query": "A" * 1000}, # 超长输入
{
"user_query": "SELECT * FROM users;"}, # SQL注入尝试
{
"user_query": "<script>alert('xss')</script>"} # XSS尝试
])
def test_node_boundary_conditions(input):
state = AgentState(
messages=[HumanMessage(content=input["user_query"])],
user_query=input["user_query"],
tool_results=[]
)
# 验证节点能优雅处理异常输入
result = input_validation_node(state)
assert "error" not in result
assert "sanitized_input" in result
(3) 性能基准测试
def test_node_performance(benchmark):
state = create_realistic_state()
# 使用pytest-benchmark
result = benchmark(tool_node, state)
# 断言性能指标
assert benchmark.stats["mean"] < 0.2 # 200ms内完成
assert benchmark.stats["max"] < 0.5 # 最大不超过500ms
3. 节点模拟技术
(1) LLM输出模拟
from unittest.mock import patch
def test_llm_node_with_mock():
with patch("langchain_community.chat_models.ChatOpenAI.invoke") as mock_llm:
# 配置模拟响应
mock_llm.return_value = AIMessage(content=