news 2026/4/14 21:05:23

让 AI 自己修 Bug:揭秘测试 Agent 的“自我修正”与 Docker 沙箱实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
让 AI 自己修 Bug:揭秘测试 Agent 的“自我修正”与 Docker 沙箱实现

导读

接上篇,我们确立了基于LangGraph的状态机架构。本篇将深入代码细节,探讨该 Agent 的三大核心技术支柱:基于 Prompt 的代码生成Docker 沙箱执行环境、以及最核心的Reflexion 自我修正机制

一、智能代码生成:从规范到Pytest

代码生成是 Agent 的第一生产力。然而,直接让 LLM “写个测试”往往会得到无法运行的幻觉代码。我们采用了分层提示结构化输出策略。

1、提示工程策略

我们为 LLM 设计了专门的 System Prompt,强调角色的专业性:“你是一名资深的 QA 自动化工程师,精通 Pytest 和 OpenAPI 标准。” 。

关键的 Prompt 技巧包括:

  • 思维链(CoT):要求 LLM 在写代码前先解释测试逻辑。“首先,我需要调用登录接口获取 Token;然后,我将 Token 放入 Header 中调用目标接口...”
  • 工具约束:明确限制使用的库。“仅使用 requests 和 pytest,不要使用 mock 库,我们需要真实的集成测试。”
  • 错误处理模板:强制要求代码包含 try-except 块,以便更好地捕获运行时异常。
2、解决幻觉问题

OpenAPI 规范可能非常庞大,超出 LLM 的上下文窗口。为此,我们在生成阶段引入了RAG技术。Agent 不会一次性读取整个 Spec,而是根据当前要测试的端点,从向量数据库中检索相关的 Schema 定义。这大大提高了生成的准确性,减少了因上下文溢出导致的“遗忘”现象。

二、容器化沙箱:安全与隔离的执行环境

“在我的机器上能运行”是自动化测试的经典笑话。为了保证环境的一致性和安全性,Agent 绝不在宿主机上直接执行生成的代码,而是利用 Docker 容器。

1、架构实现

Agent 通过 Python 的 docker SDK 与 Docker 守护进程通信。

(1)镜像准备:预先构建一个包含 pytest, requests, allure-pytest 等依赖的基础镜像 test-runner:latest。

(2)代码注入:将 LLM 生成的代码字符串写入临时文件,并通过 volumes 挂载或 docker cp 命令注入容器。

(3)执行与捕获:使用 container.exec_run("pytest test_generated.py") 执行测试。关键在于设置 detach=False 从而同步等待结果,并捕获 ExitCode。

表 2:宿主机执行与 Docker 沙箱执行的风险对比

风险维度

宿主机直接执行

Docker 沙箱执行

文件系统安全

极高风险。恶意代码可删除系统文件 (rm -rf /)。

安全。仅限于容器内部文件系统,且容器用完即毁。

网络安全

可访问内网所有资源,存在 SSRF 风险。

可通过 Docker Network 限制仅访问被测 API 容器。

环境依赖

依赖宿主机 Python 库,版本冲突频发(Dependency Hell)。

环境纯净,依赖版本通过 Dockerfile 严格锁定。

资源控制

恶意死循环可能耗尽宿主机 CPU/内存。

可通过--cpus和--memory参数限制容器资源 。

2、隔离策略

为了进一步提升安全性,我们采用了特权级限制,确保容器内的进程无法逃逸到宿主机内核。对于生成的代码,Agent 严格禁止网络访问除目标 API 以外的任何地址。

三、自我修正循环:Reflexion模式的应用

这是该 Agent 最具智能特性的部分。传统的测试脚本一旦报错,就需要人工介入。而基于 LangGraph 的 Agent 会将报错视为一次“学习机会”。

1、错误分类与决策

Agent 必须区分两类错误:

(1)测试代码错误:比如语法错误、导入丢失、变量名拼写错误。这类错误需要通过修改测试代码来修复。

(2)被测系统错误:测试代码运行正常,但断言失败(例如预期 200,实际返回 500)。这可能是一个真实的 Bug,也可能是测试期望有误。

2、修正工作流

当捕获到 Traceback 后,LangGraph 将状态流转至 Reflect 节点。该节点构建一个新的 Prompt:

"你生成的代码在执行时报错了。 错误信息:{traceback} 原始代码:{code} 请分析错误原因。如果是语法错误,请修正代码。如果是 API 返回值不符合预期,请检查是否是 Spec 理解错误,或者标记为潜在 Bug。"

这种机制使得 Agent 能够自动修复诸如“忘记导入 datetime 库”或“JSON 字段名解析错误”等低级问题,从而大幅提高测试生成的成功率 。

下期预告:

系统跑通了,但它的实际效果如何?真的能降本增效吗? 请关注系列终章:《ROI 实录:引入 AI Agent 后,我们的接口测试维护成本降低了 70%》


📡更多系列文章、开源项目、关键洞察、深度解读、技术干货

🌟请持续关注佳杰云星

💬欢迎在评论区留言或私信领取 Docker 沙箱实现源码片段~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 2:40:51

全面守护Windows系统安全:OpenArk Rootkit检测工具深度解析

在日益复杂的网络安全环境下,Windows系统面临着来自Rootkit等高级威胁的严峻挑战。OpenArk作为新一代反Rootkit工具,为系统安全防护提供了强有力的技术支撑。这款开源免费的Windows安全工具让深度系统监控变得简单易用,无论是技术爱好者还是普…

作者头像 李华
网站建设 2026/4/13 14:27:43

四旋翼多无人机协同路径规划系统仿真

四旋翼多无人机协同路径规划系统仿真 【内容介绍】 全套课程报告 MATLAB 源程序,全面解析四旋翼多无人机协同路径规划系统的理论与实践。报告详细介绍了系统的数学建模、算法原理与代码实现,包括目标跟踪、编队形成、碰撞与障碍规避等关键控制策略。报告…

作者头像 李华
网站建设 2026/4/12 9:19:30

揭秘VSCode量子计算项目进度管理:3步实现精准实时追踪

第一章:VSCode 量子作业的进度跟踪在开发量子计算项目时,使用 Visual Studio Code(VSCode)作为集成开发环境可以显著提升编码效率。结合 Q# 等量子编程语言插件,开发者能够实时编写、调试和跟踪量子作业的执行状态。VS…

作者头像 李华
网站建设 2026/4/13 11:40:10

【量子开发进阶之路】:为什么顶尖团队都在用交互式可视化?

第一章:量子电路可视化的交互操作在现代量子计算开发中,量子电路的可视化不仅是理解逻辑结构的关键,更是调试与优化的重要手段。通过图形化界面进行交互式操作,开发者能够直观地构建、修改和分析量子线路,显著提升开发…

作者头像 李华
网站建设 2026/4/14 0:24:03

【独家披露】资深工程师私藏的VSCode Jupyter量子模拟参数清单

第一章:VSCode Jupyter量子模拟参数概述在现代量子计算开发中,VSCode 结合 Jupyter Notebook 插件为开发者提供了高效的交互式编程环境。通过集成 Python 与 Qiskit 等量子计算框架,用户可在本地或远程执行量子电路模拟,并实时查看…

作者头像 李华