不止是自动化!从“工具链”到“智能体军团”:性能测试的架构哲学跃迁!
在本系列前三篇文章中,我们已经系统地介绍了性能测试的理论基础和技术框架和智能体方案设计。那么,这套方案在实际开发中是如何落地的呢?今天将从技术实现的角度,展示如何利用 LangGraph 框架和多智能体协作模式,构建一个能够自动完成从场景设计、脚本生成、质量评审到执行分析全流程性能测试智能体。
引言
在本系列前三篇文章中,我们已经系统地介绍了性能测试的理论基础和技术框架和智能体方案设计。
那么,这套方案在实际开发中是如何落地的呢?
今天将从技术实现的角度,展示如何利用 LangGraph 框架和多智能体协作模式,构建一个能够自动完成从场景设计、脚本生成、质量评审到执行分析全流程性能测试智能体。


一、系统架构设计
1.1 整体架构
K6 性能测试智能体采用 SimpleAgents 框架,基于主从式多智能体协作模式。整个系统由一个主智能体(Main Agent)和四个专业子智能体组成,各司其职,协同完成性能测试任务。
架构图(文字描述):

1.2 核心组件
主智能体(Main Agent):
- 职责:任务分解、子智能体调度、工具调用、流程控制
- 能力:意图识别、工作流编排、用户交互、结果汇总
子智能体团队:
- Scenario Designer:场景设计专家,负责测试方案设计
- Script Writer:脚本编写专家,负责生成 K6 测试脚本
- Script Critic:脚本评审专家,负责代码质量把关
- Result Analyzer:结果分析专家,负责性能数据解读
工具链:
- K6 环境管理工具
- 脚本存储与验证工具
- 测试执行引擎
- 结果解析工具
二、子智能体实现详解
2.1 场景设计智能体(Scenario Designer)
场景设计智能体是整个测试流程的起点,负责将用户的测试需求转化为结构化的测试场景方案。
核心能力:
- 支持多种输入形式:接口信息、curl 命令、抓包数据、需求描述
- 智能补全缺失信息:当用户未提供性能目标时,自动使用合理的默认值
- 场景类型选择:基准测试、负载测试、压力测试、稳定性测试
- 负载模型设计:恒定负载、阶梯增长、峰值冲击
代码实现:
scenario_designer_sub_agent: SubAgent = { "name": "scenario-designer-agent", "description": """专业的性能测试场景设计专家。负责分析需求并设计完整的性能测试场景方案。调用时机:- 当需要根据需求文档设计性能测试方案时- 当需要优化现有测试场景设计时核心能力:- 分析业务需求并设计测试场景- 选择合理的负载模型(恒定、阶梯、峰值等)- 定义明确可量化的性能指标""", "system_prompt": K6PerformancePrompts.SCENARIO_DESIGNER, "tools": [],}
场景设计智能体的提示词设计了标准的输出格式,确保生成的方案包含:测试概览、测试场景、负载策略、性能目标、执行策略和风险评估。这种结构化的输出为后续的脚本生成提供了清晰的依据。
2.2 脚本编写智能体(Script Writer)
脚本编写智能体是 K6 脚本的生产者,负责将场景设计方案转化为可执行的 JavaScript 代码。
核心能力:
- 严格遵循 K6 API 规范
- 支持多种场景配置:constant-vus、ramping-vus、constant-arrival-rate
- 完整的性能阈值设置
- 代码最佳实践:使用 group、tags、自定义 metrics
代码实现:
script_writer_sub_agent: SubAgent = { "name": "script-writer-agent", "description": """K6 性能测试脚本开发专家。负责根据场景设计生成高质量的 K6 测试脚本。调用时机:- 首次生成:根据场景设计创建 K6 脚本- 优化改进:根据评审意见优化脚本核心能力:- 严格遵循 K6 API 规范- 生成可直接执行的测试脚本- 实现场景设计的所有要求- 编写清晰的代码结构和注释""", "system_prompt": K6PerformancePrompts.SCRIPT_WRITER, "tools": [], }
脚本编写智能体支持两种工作模式:
- 首次生成模式:从零开始编写完整脚本
- 优化改进模式:根据评审意见迭代优化
2.3 脚本评审智能体(Script Critic)
脚本评审智能体是质量守门员,负责对生成的脚本进行全方位评审,确保代码质量和测试效果。
核心能力:
- 语法正确性检查(30%权重)
- 场景实现完整性评估(30%权重)
- 最佳实践符合度检查(25%权重)
- 可维护性与可读性评估(15%权重)
代码实现:
script_critic_sub_agent: SubAgent = { "name": "script-critic-agent", "description": """K6 脚本质量评审专家。负责评估脚本的正确性、完整性和最佳实践符合度。调用时机:- 在 script-writer-agent 生成脚本后立即调用核心能力:- 基于场景设计评审脚本实现- 检查语法、结构、最佳实践- 提供详细的评分和改进建议- 判断脚本是否达到完美标准""", "system_prompt": K6PerformancePrompts.SCRIPT_CRITIC, "tools": [], }
评审智能体会输出结构化的评审报告,包括评分、发现的问题、缺失的功能、最佳实践建议和改进优先级。主智能体根据评分决定是否需要进一步优化(评分 < 8 分且迭代次数 < 3)。
2.4 结果分析智能体(Result Analyzer)
结果分析智能体是测试流程的终点,负责将原始的测试数据转化为有价值的业务洞察。
核心能力:
- 核心性能指标分析:响应时间、吞吐量、成功率
- 性能目标达成情况对比
- 性能瓶颈识别
- 趋势分析与容量评估
- 可落地的优化建议
代码实现:
result_analyzer_sub_agent: SubAgent = { "name": "result-analyzer-agent", "description": """性能测试结果分析专家。负责解析 K6 测试结果并生成分析报告。调用时机:- K6 测试执行完成后核心能力:- 解析 K6 测试结果数据- 对比性能目标识别达标情况- 识别性能瓶颈- 提供可落地的优化建议""", "system_prompt": K6PerformancePrompts.RESULT_ANALYZER, "tools": [], }
三、工具链实现
工具是智能体与外部系统交互的桥梁。K6 性能测试智能体提供了一套完整的工具链,涵盖脚本管理、测试执行、结果解析等核心功能。
3.1 脚本保存工具(save_k6_script)
该工具负责将脚本内容持久化到文件系统,是脚本生成与执行之间的关键桥梁。
核心功能:
- 自动创建存储目录
- 时间戳命名避免覆盖
- 文件名安全处理
- 完整的错误处理机制
代码实现:
@tooldef save_k6_script( script_content: str, script_name: str = "generated_test", workspace_dir: Optional[str] = None) -> str: """ 保存 K6 测试脚本到文件系统 Args: script_content: 完整的 K6 脚本内容(JavaScript 代码) script_name: 脚本文件名(不含扩展名) workspace_dir: 工作空间目录的绝对路径(可选) Returns: 包含脚本路径、文件大小等信息的 JSON 字符串 """ try: # 确定保存目录 if workspace_dir isNone: project_root = Path(__file__).parent.parent.parent.parent workspace_dir = project_root / "files" / "k6_scripts" else: workspace_dir = Path(workspace_dir) # 创建目录 workspace_dir.mkdir(parents=True, exist_ok=True) # 生成唯一文件名 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") safe_script_name = "".join(c if c.isalnum() or c in ['_', '-'] else'_' for c in script_name) filename = f"{safe_script_name}_{timestamp}.js" script_path = workspace_dir / filename # 保存脚本 script_path.write_text(script_content, encoding='utf-8') return json.dumps({ "success": True, "script_path": str(script_path.absolute()), "script_name": filename, "workspace_dir": str(workspace_dir.absolute()), "file_size": script_path.stat().st_size, "message": f"✅ 脚本已成功保存到: {script_path.absolute()}" }, ensure_ascii=False, indent=2) except Exception as e: return json.dumps({ "success": False, "error": f"保存脚本失败: {str(e)}" }, ensure_ascii=False)
设计亮点:
- 时间戳命名机制确保每次生成的脚本都有唯一的文件名
- 文件名安全处理:移除特殊字符,避免路径注入风险
- 统一的 JSON 返回格式,便于主智能体解析
3.2 测试执行工具(execute_k6_test)
该工具是与 K6 引擎交互的核心接口,负责执行性能测试并收集结果。
核心功能:
- 支持 JSON、CSV、Cloud 多种输出格式
- 动态覆盖脚本配置(VUs、duration)
- 自动生成结果文件
- 实时解析关键指标
代码实现:
@tooldef execute_k6_test( script_path: str, output_format: Literal["json", "csv", "cloud"] = "json", output_file: Optional[str] = None, vus: Optional[int] = None, duration: Optional[str] = None, extra_args: str = "") -> str: """ 执行 K6 性能测试脚本 Args: script_path: K6 测试脚本的绝对路径 output_format: 输出格式 (json/csv/cloud) output_file: 输出文件路径(可选,自动生成) vus: 虚拟用户数(可选,覆盖脚本配置) duration: 测试持续时间(可选,覆盖脚本配置) extra_args: 额外的 K6 命令行参数 Returns: 包含执行结果、输出文件路径和关键指标摘要的 JSON 字符串 """ try: # 检查脚本文件 script_file = Path(script_path) ifnot script_file.exists(): return json.dumps({ "success": False, "error": f"脚本文件不存在: {script_path}" }, ensure_ascii=False) # 自动生成输出文件名 if output_file isNone: output_dir = script_file.parent / "results" output_dir.mkdir(exist_ok=True) output_file = str(output_dir / f"{script_file.stem}_result.json") # 构建 K6 命令 cmd = ["k6", "run"] if output_format == "json": cmd.extend(["--out", f"json={output_file}"]) if vus isnotNone: cmd.extend(["--vus", str(vus)]) if duration isnotNone: cmd.extend(["--duration", duration]) cmd.append(str(script_file)) # 执行测试 result = subprocess.run( cmd, capture_output=True, text=True, timeout=600# 10分钟超时 ) # 解析控制台输出 summary = _parse_k6_console_output(result.stdout) return json.dumps({ "success": result.returncode == 0, "output_file": output_file, "command": " ".join(cmd), "summary": summary }, ensure_ascii=False, indent=2) except subprocess.TimeoutExpired: return json.dumps({ "success": False, "error": "测试执行超时 (>10分钟)" }, ensure_ascii=False)
设计亮点:
- 支持动态参数覆盖,用户可以在执行时调整测试参数
- 自动解析控制台输出,提取关键指标摘要
- 10 分钟超时保护,避免长时间挂起
3.3 结果解析工具(parse_k6_results)
该工具负责解析 K6 输出的原始测试数据,提取并计算性能指标。
核心功能:
- 支持 JSON 和 CSV 两种格式
- 计算响应时间百分位数(P50/P90/P95/P99)
- 统计成功率和失败率
- 分析 VUs 变化趋势
代码实现(部分核心逻辑):
def _calculate_statistics(metrics: Dict[str, List]) -> Dict[str, Any]: """计算性能指标统计数据""" analysis = {} # 响应时间分析 durations = metrics.get("http_req_duration", []) if durations: sorted_durations = sorted(durations) n = len(sorted_durations) analysis["response_time"] = { "count": n, "avg_ms": round(sum(durations) / n, 2), "min_ms": round(min(durations), 2), "max_ms": round(max(durations), 2), "p50_ms": round(_percentile(sorted_durations, 50), 2), "p90_ms": round(_percentile(sorted_durations, 90), 2), "p95_ms": round(_percentile(sorted_durations, 95), 2), "p99_ms": round(_percentile(sorted_durations, 99), 2) } # 失败率分析 failed = metrics.get("http_req_failed", []) if failed: failed_count = sum(1for f in failed if f > 0) fail_rate = (failed_count / len(failed) * 100) if len(failed) > 0else0 analysis["error_rate"] = { "failed_requests": failed_count, "total_requests": len(failed), "fail_rate_percent": round(fail_rate, 2), "success_rate_percent": round(100 - fail_rate, 2) } return analysis
3.4 环境检查工具(check_k6_environment)
该工具在测试执行前进行环境检查,确保 K6 已正确安装。
@tooldef check_k6_environment() -> str: """检查 K6 安装状态和版本信息""" try: result = subprocess.run( ["k6", "version"], capture_output=True, text=True, timeout=10 ) if result.returncode == 0: version_info = result.stdout.strip() return json.dumps({ "installed": True, "version": version_info, "message": "K6 环境正常" }, ensure_ascii=False, indent=2) else: return json.dumps({ "installed": False, "error": "K6 未正确安装或不在 PATH 中" }, ensure_ascii=False) except FileNotFoundError: return json.dumps({ "installed": False, "error": "K6 未安装", "installation_guide": "请访问 https://k6.io/docs/get-started/installation/ 安装 K6" }, ensure_ascii=False)
四、主智能体工作流程
主智能体是整个系统的大脑,负责协调子智能体和工具,编排完整的测试流程。
4.1 意图识别
主智能体首先需要理解用户的需求,判断需要执行的步骤:
- 只要方案设计:仅调用 Scenario Designer
- 要脚本不执行:场景设计 + 脚本生成(含保存)
- 完整测试流程:场景设计 + 脚本生成 + 执行 + 分析
- 已有脚本分析:直接执行 + 分析
4.2 脚本生成与优化循环
脚本生成采用迭代优化机制,确保代码质量:
1. 调用 Script Writer 生成脚本2. 调用 Script Critic 评审脚本3. 如果评分 < 8 分且迭代次数 < 3: - 将评审意见反馈给 Script Writer - 重新生成优化后的脚本 - 回到步骤 24. 如果评分 >= 8 分或达到最大迭代次数: - 主智能体调用 save_k6_script 保存脚本 - 进入下一阶段
关键设计原则:
- 工具权限分离:只有主智能体可以调用文件操作和执行工具,子智能体只返回文本内容
- 最多 3 轮迭代:避免无限循环
- 评分阈值 8 分:平衡质量与效率
4.3 测试执行与分析
测试执行阶段主智能体需要:
- 检查 K6 环境:
check_k6_environment() - 可选验证脚本:
validate_k6_script(script_path) - 询问用户确认:明确告知测试参数
- 执行测试:
execute_k6_test(script_path, ...) - 解析结果:
parse_k6_results(result_file) - 调用 Result Analyzer 生成分析报告
4.4 智能体创建代码
def create_k6_performance_agent(): """创建基于 create_simple_deep_agent 的 K6 性能测试智能体""" try: logger.info("🎯 创建 K6 性能测试智能体") agent = create_simple_deep_agent( model=model, tools=[ check_k6_environment, # 检查 K6 是否安装 save_k6_script, # 保存脚本到文件系统 validate_k6_script, # 验证脚本语法 execute_k6_test, # 执行 K6 测试 parse_k6_results # 解析测试结果 ], system_prompt=main_instructions, subagents=[ scenario_designer_sub_agent, script_writer_sub_agent, script_critic_sub_agent, result_analyzer_sub_agent ], middleware=[ get_dynamic_model_middleware(), TodoListMiddleware() ], debug=False ).with_config({"recursion_limit": 150}) logger.info("✅ K6 性能测试智能体创建成功") return agent except Exception as e: logger.error(f"❌智能体创建失败: {e}") raise# 创建智能体实例k6_performance_testing_agent_graph = create_k6_performance_agent()
五、技术亮点与最佳实践
5.1 多智能体协作模式
采用 SimpleAgents 框架的 create_simple_deep_agent 方法,实现了轻量级的多智能体协作。相比传统的单一智能体方案,多智能体模式具有以下优势:
- 专业化分工:每个子智能体专注于特定领域,提升输出质量
- 模块化设计:子智能体独立维护,易于扩展和优化
- 质量保障:通过 Critic 智能体实现自动化评审和优化循环
5.2 提示词工程
每个子智能体都配备了精心设计的系统提示词,包含:
- 职责定义:明确智能体的核心能力和工作范围
- 输入输出规范:标准化的数据格式和结构
- 工作流程指导:详细的操作步骤和注意事项
- 示例和模板:提供参考样例,提升输出一致性
5.3 工具设计原则
- 权限分离:子智能体只能返回文本,文件操作和系统调用仅限主智能体
- 原子化操作:每个工具只做一件事,职责单一
- 统一返回格式:所有工具返回 JSON 字符串,便于解析和错误处理
- 完善的错误处理:预见性地处理各种异常情况
5.4 质量控制机制
- 迭代优化:脚本生成采用"生成-评审-优化"循环
- 评分体系:4 个维度、100 分制量化评估脚本质量
- 人工确认:测试执行前强制要求用户确认,避免误操作
六、使用示例
以下是一个完整的使用示例:
用户输入:
我需要对一个电商系统的登录接口进行性能测试。接口信息:- URL: https://api.example.com/v1/auth/login- 方法: POST- 请求参数: {"username": "xxx", "password": "xxx"}性能目标:- P95 响应时间 < 300ms- 成功率 > 99.9%- 支持 500 并发用户请帮我设计测试场景并生成 K6 脚本,然后执行测试。
执行流程:
- 场景设计阶段:主智能体调用 Scenario Designer,生成测试方案
- 脚本生成阶段:
- Script Writer 生成初版脚本
- Script Critic 评审,评分 7.5 分,指出缺少自定义 metrics
- Script Writer 根据反馈优化脚本
- Script Critic 再次评审,评分 9 分,通过
- 主智能体调用 save_k6_script 保存脚本
- 测试执行阶段:
- 检查 K6 环境
- 询问用户确认(告知将执行 500 VUs、5 分钟测试)
- 执行测试
- 解析结果
- 结果分析阶段:Result Analyzer 生成详细分析报告
最终输出:
完整的性能测试报告,包括:
- 核心性能指标(响应时间、吞吐量、成功率)
- 性能目标达成情况对比
- 识别的性能瓶颈
- 可落地的优化建议
七、总结
K6 性能测试智能体通过多智能体协作、工具链集成和提示词工程,实现了性能测试的自动化和智能化。
通过持续优化和迭代,K6 性能测试智能体将成为软件质量保障的得力助手,让性能测试更加简单、高效、智能。
如何高效转型Al大模型领域?
作为一名在一线互联网行业奋斗多年的老兵,我深知持续学习和进步的重要性,尤其是在复杂且深入的Al大模型开发领域。为什么精准学习如此关键?
- 系统的技术路线图:帮助你从入门到精通,明确所需掌握的知识点。
- 高效有序的学习路径:避免无效学习,节省时间,提升效率。
- 完整的知识体系:建立系统的知识框架,为职业发展打下坚实基础。
AI大模型从业者的核心竞争力
- 持续学习能力:Al技术日新月异,保持学习是关键。
- 跨领域思维:Al大模型需要结合业务场景,具备跨领域思考能力的从业者更受欢迎。
- 解决问题的能力:AI大模型的应用需要解决实际问题,你的编程经验将大放异彩。
以前总有人问我说:老师能不能帮我预测预测将来的风口在哪里?
现在没什么可说了,一定是Al;我们国家已经提出来:算力即国力!
未来已来,大模型在未来必然走向人类的生活中,无论你是前端,后端还是数据分析,都可以在这个领域上来,我还是那句话,在大语言AI模型时代,只要你有想法,你就有结果!只要你愿意去学习,你就能卷动的过别人!
现在,你需要的只是一份清晰的转型计划和一群志同道合的伙伴。作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。

第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)