前言

大家好,前几期我们从 RAG 到单 Agent 再到 Self-Healing,已经逐步把 AI 融入 Web UI 自动化。本期实现质的飞跃:构建多 Agent 协作测试平台,让不同 Agent 分工协作,显著提升生成代码的质量和稳定性。

核心架构:Planner(规划) → Coder(编码) → Executor(执行) → Reviewer(评审) 循环优化。

一、多 Agent 协作整体流程

  1. Planner Agent:理解需求,拆解测试步骤,生成测试计划
  2. Coder Agent:根据计划生成规范的 POM 代码 + Self-Healing
  3. Executor Agent:执行测试,收集结果和截图
  4. Reviewer Agent:评审代码和执行结果,提出改进意见(如需则返回 Coder 优化)

二、环境准备(沿用前几期)

Bash

pip install langchain langchain-ollama langgraph  # langgraph 用于多 Agent 编排

三、核心代码实现(细致版)

1. 定义四个 Agent 的 Prompt(核心灵魂)

Python

from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate

llm = ChatOllama(model="qwen2.5:14b", temperature=0.1)

# Planner Agent
planner_prompt = ChatPromptTemplate.from_template(
    """你是一位测试架构师。根据用户需求,输出结构化的测试计划。
    需求:{input}
    输出格式(严格遵守):
    - 测试目标:
    - 核心流程步骤:
    - 需要检查的关键点:
    - 可能的风险点:
    - 建议使用的 Page 类"""
)

# Coder Agent
coder_prompt = ChatPromptTemplate.from_template(
    """你是一位 Playwright 专家,使用 POM + Self-Healing 模式编写代码。
    测试计划:{plan}
    要求:
    1. 继承 BasePage 类
    2. 所有点击使用 safe_click 或 self_healing_click
    3. 加入详细的 try-except + 截图
    4. 使用稳定定位器
    只输出完整可运行的 Python 代码,不要解释。"""
)

# Reviewer Agent
reviewer_prompt = ChatPromptTemplate.from_template(
    """你是一位严苛的测试代码 Reviewer。
    代码:{code}
    执行结果:{execution_result}
    请从以下维度评审并给出改进建议:
    - 代码规范性
    - 健壮性(错误处理)
    - 定位器稳定性
    - 是否需要优化"""
)

2. 使用 LangGraph 构建多 Agent 工作流(2026 推荐方式)

Python

from langgraph.graph import StateGraph, END
from typing import TypedDict

class TestState(TypedDict):
    input: str
    plan: str
    code: str
    execution_result: str
    review_feedback: str
    final_code: str

def planner_node(state: TestState):
    response = llm.invoke(planner_prompt.format(input=state["input"]))
    state["plan"] = response.content
    return state

def coder_node(state: TestState):
    response = llm.invoke(coder_prompt.format(plan=state["plan"]))
    state["code"] = response.content
    return state

def executor_node(state: TestState):
    result = execute_playwright_test(state["code"])  # 使用前几期定义的 tool
    state["execution_result"] = result
    return state

def reviewer_node(state: TestState):
    response = llm.invoke(reviewer_prompt.format(
        code=state["code"], 
        execution_result=state["execution_result"]
    ))
    state["review_feedback"] = response.content
    # 如果需要优化,可返回 coder_node
    if "需要优化" in response.content:
        return coder_node(state)
    state["final_code"] = state["code"]
    return state

# 构建工作流
workflow = StateGraph(TestState)
workflow.add_node("planner", planner_node)
workflow.add_node("coder", coder_node)
workflow.add_node("executor", executor_node)
workflow.add_node("reviewer", reviewer_node)

workflow.set_entry_point("planner")
workflow.add_edge("planner", "coder")
workflow.add_edge("coder", "executor")
workflow.add_edge("executor", "reviewer")
workflow.add_edge("reviewer", END)

app = workflow.compile()

使用示例

Python

result = app.invoke({"input": "测试电商网站完整下单流程:登录 → 加入购物车 → 结算 → 支付"})
print(result["final_code"])

四、常见报错及解决方案(实战总结)

  1. "TimeoutError: waiting for selector" 解决:加强 page.wait_for_load_state("networkidle") + 使用 self_healing_click
  2. "Playwright code execution failed: No module named 'playwright'" 解决:在 Executor 中动态安装或确保虚拟环境一致
  3. Agent 生成代码使用 XPath 或 脆弱的 CSS 选择器 解决:在 Coder Prompt 中强约束:“必须优先使用 getByRole、getByLabel、getByTestId”
  4. Reviewer Agent 一直循环优化(死循环) 解决:添加最大迭代次数(max_iterations=3),或在 Reviewer Prompt 中加入“如果达到可接受标准则停止”
  5. Ollama 显存不足 / 推理过慢 解决:使用更小模型(qwen2.5:7b)做 Coder,llava 用于视觉;或升级硬件
  6. 截图路径不存在 解决:在 BasePage 初始化时自动创建 os.makedirs("screenshots", exist_ok=True)
  7. 多 Agent 协作时上下文丢失 解决:使用 LangGraph 的持久化状态或手动传递关键信息
  8. 生成的代码缩进错误或语法问题 解决:在 Executor 执行前增加代码格式化(使用 black 库)或让 Reviewer 重点检查语法

五、生产落地建议

  • 将工作流封装成 Web 服务(FastAPI)
  • 集成 Allure 报告 + 测试管理平台(TestRail / Xray)
  • 核心流程固定人工规则 + AI 自愈混合使用
  • 定期收集失败案例,反馈优化 Agent Prompt

六、今日感悟

从单 Agent 到多 Agent 协作,我深刻体会到:构建 AI 测试平台的核心不是单个模型,而是合理的 Agent 分工和 Review 机制。这套系统已经接近生产可用,极大降低了测试脚本的维护成本。

下一期预告(AI Web UI 自动化专栏 #04)AI 自动化测试平台 Web 界面实战(FastAPI + React/Vue 简单前端 + 一键生成执行测试)

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐