五种 Agentic 模式赋能自动化测试的实践解析
五种 Agentic 模式赋能自动化测试的实践解析
一、什么是 Agentic 模式
Agentic 模式是构建智能体应用的设计蓝图,它定义了智能体如何分解任务、协作执行和迭代优化。与简单的"聊天机器人"不同,采用 Agentic 模式设计的智能体能够无缝接入私有测试生态,实现效率跃升。
本文将详细解析反思、提示链、规划、并行处理和路由五种核心 Agentic 模式,为智能体设计提供可落地的工程方法。
二、反思模式:从"粗糙初稿"到"精雕细琢"
核心机制
反思模式通过自我修正的闭环循环,让 Agent 从"一次性输出"升级到"迭代打磨"。其核心是评估和优化的闭环:生成 → 评估 → 改进 → 再评估,直到满足标准。
应用场景:回归测试计划生成
class EvaluationStatus(enum.Enum):
PASS = "PASS"
FAIL = "FAIL"
class Evaluation(BaseModel):
evaluation: EvaluationStatus
feedback: str # 改进建议
reasoning: str # 评估依据
def generate_test_plan(change_log: str, feedback=None) -> dict:
"""生成回归测试计划"""
prompt = f"基于变更日志生成回归测试计划..."
if feedback:
prompt += f"\n结合反馈优化: {feedback}"
# 调用 LLM 生成计划
return plan
def evaluate(plan: dict, jacoco_data: list) -> Evaluation:
"""基于 JaCoCo 风险评估计划可行性"""
# 提取风险点,检查时长、覆盖度等指标
return Evaluation(evaluation=status, feedback=feedback, reasoning=reasoning)
# 反思循环
max_iterations = 3
current_plan = generate_test_plan(CHANGE_LOG)
while current_iteration < max_iterations:
evaluation_result = evaluate(current_plan, JACOCO_DATA)
if evaluation_result.evaluation == EvaluationStatus.PASS:
break
else:
current_plan = generate_test_plan(CHANGE_LOG, feedback=evaluation_result.feedback)
价值对比
| 传统方式 | 反思模式 |
|---|---|
| 依赖经验猜测 | 数据驱动自纠 |
| 容易多跑无用功 | 动态调整避免冗余 |
| 人工评审耗时 | 自动化迭代优化 |
三、提示链模式:智能体的"接力赛"
核心机制
将复杂任务拆解成一系列预定义的、顺序化的步骤,前一步的输出作为后一步的输入。每个阶段专注单一职责,确保流程可靠可控。
应用场景:从用户故事到测试用例
# 步骤1:完善用户故事
prompt1 = PromptTemplate(
input_variables=["user_story"],
template="""基于用户故事,完善描述并生成详细的 Acceptance Criteria。
确保 AC 覆盖功能、非功能(性能、安全)、正向/负向场景。
用户故事:{user_story}"""
)
refined_story = (prompt1 | llm1).invoke({"user_story": user_story})
# 步骤2:基于完善后的故事生成测试用例
prompt2 = PromptTemplate(
input_variables=["refined_story"],
template="""基于完善后的 story 及其 AC,生成全面的测试用例列表。
每个测试用例包含:测试ID、描述、前置条件、步骤、预期结果。
完善后的story:{refined_story}"""
)
test_cases = (prompt2 | llm2).invoke({"refined_story": refined_story})
设计要点
- 阶段划分清晰:规划 → 验证 → 执行
- 信息传递准确:前一步输出结构化,便于后一步解析
- 职责单一:每个 LLM 调用聚焦特定任务
四、规划模式:“总导演 + 剧组工作人员”
核心机制
规划模式包含三个核心角色:
- 总导演(Planner):分解任务为动态子任务列表
- 工作人员(Workers):执行具体子任务
- 剪辑师(Synthesizer):整合结果并反思
应用场景:UI 自动化测试
# Step 1: 生成测试计划
prompt_planner = (
"Create a step-by-step plan for UI automation testing.\n"
"Decompose into dynamic sub-tasks, assign to worker types:\n"
"- DOMAnalyzer: 分析页面元素风险\n"
"- ScriptGenerator: 生成测试脚本\n"
"- BrowserRunner: 跨浏览器执行\n"
"- VisualReporter: 生成可视化报告"
)
plan = ollama_generate(prompt_planner)
# Step 2: 执行子任务
for step in plan.get("steps", []):
assigned_to = step.get("assigned_to")
if assigned_to == "DOMAnalyzer":
output = analyze_dom(step)
elif assigned_to == "ScriptGenerator":
output = generate_scripts(step, prev_output)
# ... 其他 worker
worker_outputs[task_id] = output
# Step 3: 整合与反思
synthesizer_prompt = f"""
Synthesize outputs into final UI test plan.
Check compatibility >95%, stability high?
Suggest replan if not.
Outputs: {worker_outputs}
"""
final_plan = ollama_generate(synthesizer_prompt)
优势
- 减少单次 LLM 调用的认知负荷
- 支持动态调整工作流程
- 复杂任务分解后推理质量更高
五、并行处理模式:Map-Reduce 加速
核心机制
将大任务拆分成相互独立的子任务,分发给多个智能体并发执行,最后聚合结果。类似 Map-Reduce 过程,可显著提高测试效率。
应用场景:电商 App 功能测试
async def parallel_tasks() -> str:
topic = "e-commerce app functionality testing"
prompts = [
"Generate test report for user registration/login module...",
"Generate test report for product search module...",
"Generate test report for shopping cart module...",
"Generate test report for payment module..."
]
# Map 阶段:并发执行
tasks = [generate_content(prompt) for prompt in prompts]
results = await asyncio.gather(*tasks)
# Reduce 阶段:聚合结果
test_reports = '\n'.join(results)
aggregation_prompt = f"""
Based on the following test reports, create a cohesive summary.
Include Markdown table: Module, Status, Bug Count, Key Metrics, Suggestions.
{test_reports}
"""
return (aggregation_prompt | llm).invoke({"test_reports": test_reports})
性能对比
| 执行方式 | 时间复杂度 | 适用场景 |
|---|---|---|
| 串行执行 | O(n) | 任务间有依赖 |
| 并行处理 | O(max(task_time)) + O(reduce) | 独立子任务 |
六、路由模式:智能分流与专精处理
核心机制
路由智能体充当"超级调度员",根据输入特征将任务分发给下游 specialized 智能体。小问题用小模型,大问题用大模型,实现"分而治之"。
应用场景:Bug 智能分诊
class Category(enum.Enum):
UI = "ui"
API = "api"
PERFORMANCE = "performance"
UNKNOWN = "unknown"
class RoutingDecision(BaseModel):
category: Category
reasoning: str
# Step 1: 路由分类
prompt_router = PromptTemplate(
template="""分析 bug ticket,确定分类:
- ui: UI/前端问题(渲染卡顿、元素错位)
- api: API/后端问题(认证失败、接口错误)
- performance: 性能问题(加载慢、高延迟)
- unknown: 不明确或多类别
Bug Ticket: {query}
输出 JSON: {\"category\": \"...\", \"reasoning\": \"...\"}"""
)
routing_decision = (prompt_router | llm).invoke({"query": user_query})
# Step 2: 专精处理
if routing_decision.category == Category.UI:
response = ui_specialist.handle(query)
elif routing_decision.category == Category.API:
response = api_specialist.handle(query)
elif routing_decision.category == Category.PERFORMANCE:
response = perf_specialist.handle(query)
成本优化策略
| 任务复杂度 | 路由目标 | 模型选择 |
|---|---|---|
| 简单分类 | 路由层 | 轻量模型(8B) |
| UI 诊断 | UI Specialist | 中等模型(32B) |
| 复杂性能分析 | Performance Specialist | 大模型(120B) |
七、模式选择指南
| 模式 | 适用场景 | 核心优势 |
|---|---|---|
| 反思 | 需要迭代优化的任务 | 自我修正,质量提升 |
| 提示链 | 可线性分解的任务 | 流程可控,职责清晰 |
| 规划 | 复杂多步骤任务 | 动态调整,分工协作 |
| 并行处理 | 独立子任务集合 | 效率最大化 |
| 路由 | 多类型输入处理 | 专精优化,成本可控 |
八、结语
Agentic 模式为测试自动化提供了系统化的工程方法。反思模式确保输出质量,提示链保证流程可控,规划模式应对复杂场景,并行处理提升效率,路由模式实现资源优化。
这些模式不是孤立的,实际应用中可以组合使用。例如,规划模式中的每个 worker 可以采用提示链处理子任务,整体框架使用反思模式进行结果优化。
随着大模型能力的提升,部分工程方法可能会简化,但在当前阶段,掌握这些模式能够帮助测试工程师更高效地解决实际问题,从"执行者"转变为"智能体设计师"。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)