news 2026/5/1 11:21:05

让 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/5/1 10:36:55

21、帧缓冲接口设计与STBmenu GUI工具包使用指南

帧缓冲接口设计与STBmenu GUI工具包使用指南 1. SDL基础操作与事件处理 在使用SDL进行图形显示时,首先需要了解如何将图像显示在屏幕上以及如何处理用户事件。以下是一个简单的“Hello, world!”示例: SDL_Rect helloRect = {150,100,0,0}; /* {x, y, width, height}…

作者头像 李华
网站建设 2026/5/1 9:12:14

lidR终极指南:5步掌握激光雷达林业分析核心技术

还在为传统林业调查的繁琐耗时而苦恼吗?🌲 想要快速获取精准的森林参数却无从下手?lidR包作为R语言中最专业的激光雷达数据处理工具,能够让你在几小时内完成以往需要数月的林业调查工作! 【免费下载链接】lidR Airborn…

作者头像 李华
网站建设 2026/5/1 7:19:27

为什么顶尖量子工程师都在用VSCode调试Qiskit?真相令人震惊

第一章:为什么顶尖量子工程师都在用VSCode调试Qiskit?真相令人震惊在量子计算领域,Qiskit 已成为最主流的开发框架之一,而 VSCode 凭借其强大的扩展生态和调试能力,正悄然成为顶尖量子工程师的首选 IDE。两者的结合不仅…

作者头像 李华
网站建设 2026/5/1 8:07:41

2026中专机电专业必考职业资格证指南

机电专业涉及机械、电子、自动化等多领域,职业资格证是就业和职业发展的重要凭证。以下是2026年中专机电专业学生需关注的必考证书,包含证书名称、考试内容、报考条件及用途,并附CDA证书相关信息。机电专业核心职业资格证证书名称发证机构报考…

作者头像 李华
网站建设 2026/5/1 6:05:21

Q#调用Python模块时代码导航失效?资深工程师教你4步快速排查

第一章:Q#-Python 的代码导航概述在量子计算与经典编程语言融合的背景下,Q# 与 Python 的协同开发模式逐渐成为主流。通过 Q# 编写的量子算法可以借助 Python 进行控制流管理、数据预处理和结果可视化,而高效的代码导航能力是实现这一协作的关…

作者头像 李华
网站建设 2026/5/1 9:57:05

【高级运维技巧】:如何用Docker Compose打造高可用Agent集群?

第一章:高可用Agent集群的核心概念 在分布式系统架构中,Agent 集群承担着数据采集、任务执行与状态上报等关键职责。构建高可用的 Agent 集群,意味着系统能够在部分节点故障时仍保持服务连续性,确保业务不受中断。 高可用性的核心…

作者头像 李华