news 2026/8/30 9:11:55

AI Agent驱动自动化测试:构建智能感知-决策-执行闭环平台

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI Agent驱动自动化测试:构建智能感知-决策-执行闭环平台

简介:这是一套面向中高级测试工程师与AI工程实践者的AI驱动型自动化测试平台系统,聚焦解决传统测试中用例设计低效、执行覆盖率不足、缺陷定位滞后等核心痛点,适用于Web、移动、API及桌面应用的智能化质量保障场景。压缩包共133个文件,含25个Python脚本(实现AI模型训练、测试调度与结果分析)、26个JavaScript文件(前端交互与可视化看板)、23个CSS与14个HTML文件(响应式管理界面),以及Redis配置、启动批处理(.bat)、数据库SQL与日志等支撑文件,整体16.58MB,结构清晰,模块边界明确。目前已有40人学习下载。读者可直接部署运行三类核心服务:基于历史数据智能生成高覆盖测试用例的Py模块、支持24小时自动执行的Worker服务、以及集成NLP缺陷归因与改进建议的分析看板,配套完整配置说明与启动脚本,开箱即用。

1. 项目概述:当AI遇见自动化测试

最近几年,AI的风吹遍了各个角落,从写代码到画图,再到现在的自动化测试。作为一个在测试领域摸爬滚打了十多年的老鸟,我亲眼见证了从纯手工“点点点”,到脚本录制回放,再到如今基于数据驱动、关键字驱动的自动化测试框架的演进。但说实话,很多所谓的“自动化”依然笨重,脚本维护成本高,对UI变化异常敏感,一个按钮ID变了可能整个用例集就挂了。直到我开始深入接触大语言模型和AI Agent,一个念头越来越清晰:能不能让AI来“理解”我们的应用,并自主地、智能地执行测试?这就是“AI+自动化测试平台系统”这个项目标题背后,我和团队在过去一年里一直在折腾的核心。

简单来说,这不是一个简单的“用AI生成测试脚本”的工具。那太初级了。我们想做的是一个平台系统,一个能够将AI的认知、决策、学习能力与自动化测试的执行、断言、报告能力深度融合的智能体(AI Agent)。它应该能理解自然语言描述的需求(比如“测试用户从登录到成功下单的完整流程”),自动规划测试路径,在真实的浏览器或移动端环境中执行操作,并能像资深测试工程师一样,观察页面反馈,判断测试结果,甚至在遇到异常时尝试自我修复或给出精准的排查建议。这听起来有点像天方夜谭,但结合现有的开源模型、成熟的自动化测试框架(如Playwright、Selenium)以及一些工程化的设计,我们已经能让它跑起来,并解决不少实际痛点了。

这个平台适合谁呢?首先肯定是测试开发工程师和追求测试效能提升的团队,它提供了一种全新的自动化范式。其次,对于产品经理或业务分析师,他们可以用更自然的方式参与测试用例的设计。甚至,对于开发人员,在提交代码后,可以快速触发一个AI测试Agent,让它对新功能进行一轮探索性测试,提前发现一些明显的交互问题。接下来,我就把这个还在不断迭代中的项目核心设计、实现细节以及我们踩过的那些“坑”,毫无保留地分享出来。

2. 核心设计思路:构建一个测试领域的“数字员工”

构建这样一个系统,首要问题是定义它的工作模式。我们放弃了“脚本生成-执行”的传统两步走模式,而是采用了“感知-决策-执行-学习”的智能循环。你可以把它想象成招聘一个测试实习生,但它的学习速度和执行力是人类的千百倍。

2.1 架构总览:从指令到测试报告的全链路

整个平台的核心是一个调度中枢,它连接着四大模块:

  1. 自然语言理解与任务规划模块(大脑皮层):接收用户的自然语言指令,例如“测试一下新上线的购物车优惠券叠加功能”。这里我们并没有简单地将指令翻译成Selenium代码,而是利用大语言模型(LLM)将其分解为结构化的测试任务序列。例如,模型会输出:[登录 -> 浏览商品A加入购物车 -> 浏览商品B加入购物车 -> 进入购物车页面 -> 应用优惠券X -> 应用优惠券Y -> 验证总价是否正确 -> 尝试结算]。这一步的关键是让LLM理解业务的领域知识,因此我们需要通过高质量的Prompt工程和少量示例(Few-shot Learning)来“调教”它。
  2. 环境感知与动作执行模块(眼和手):这是与传统自动化测试框架对接的部分。我们选择了Playwright作为核心执行引擎,因为它对现代Web应用的兼容性更好,支持多浏览器,且自带强大的自动等待和网络拦截能力。这个模块的职责是:接收规划好的原子任务(如“点击登录按钮”),将其转化为Playwright能执行的代码,并驱动真实的浏览器。同时,它还要充当AI的“眼睛”,在执行前后捕获页面状态(如截图、DOM快照、控制台日志、网络请求),这些信息将反馈给决策模块。
  3. 状态验证与异常决策模块(判断力):这是AI智能的核心体现。执行一个动作后,系统需要判断是否成功。传统的断言是硬编码的(如检查某个元素是否存在)。而我们的系统会让LLM根据当前页面截图、关键HTML片段以及任务目标,进行综合判断。例如,任务目标是“登录成功”,那么AI会分析页面是否跳转到了用户中心,或者是否出现了“欢迎,[用户名]”的文本。如果发现异常(比如弹出了错误提示框),AI模块会被再次调用,分析异常原因,并决定下一步动作:是重试、跳过、记录缺陷,还是触发一个预设的修复流程(如清空缓存后重试)。
  4. 知识积累与用例进化模块(记忆力):系统不应每次测试都从零开始。所有成功的测试路径、遇到的异常及解决方案,都会被结构化地存储到知识库中。当下次遇到类似任务时,系统可以优先从知识库中召回相似的解决方案,提高效率和准确性。这相当于这个“数字员工”在不断积累自己的测试经验。

注意:这里我们没有选择Appium作为移动端首选,是因为初期我们更聚焦于Web和桌面WebView场景。Playwright对移动端浏览器模拟的支持已经相当不错,且代码统一。如果未来需要深度原生App测试,可以考虑集成Appium,但那样会引入更高的复杂度和环境维护成本。

2.2 技术选型背后的“为什么”

  • 为什么用Playwright而非Selenium?除了前面提到的优势,Playwright的page.screenshot()page.content()能非常方便地获取高质量的视觉和结构信息,供LLM分析。其强大的expect断言库虽然我们不完全依赖,但可以作为AI判断的辅助验证基准。Selenium在超大规模并发和生态成熟度上仍有优势,但对于一个需要频繁与AI交互、注重执行稳定性和现代API的项目,Playwright目前是更优解。
  • LLM的选择与成本考量:我们尝试过GPT-4、Claude 3以及一些开源模型如Qwen。GPT-4在理解复杂指令和逻辑推理上表现最佳,但成本高。对于动作执行这类相对格式化的任务,我们使用较小的、经过微调的模型(如GPT-3.5-Turbo或开源模型),以降低成本。关键的设计是分层调用:复杂的规划和分析用强模型,简单的动作转换用弱模型或规则引擎。
  • 平台化与集成:系统被设计为微服务架构,核心的“AI测试引擎”是一个独立服务,通过REST API或消息队列接收任务。这样可以轻松集成到现有的CI/CD流水线中,比如在Jenkins或GitLab CI的一个Pipeline里,一个阶段是构建部署,下一个阶段就可以调用我们的AI测试服务进行智能验证。我们也提供了Web管理界面,用于管理测试场景、查看AI执行报告、维护知识库。

3. 核心模块拆解与实操要点

3.1 让AI理解测试意图:Prompt工程是关键

这是整个系统最难也是最有挑战性的部分。你不能简单地对LLM说“测试登录功能”。你需要定义一套清晰的指令规则。

我们设计的核心Prompt结构如下:

你是一个专业的Web应用测试AI助手。请将下面的用户需求分解为一系列可顺序执行的、原子级的测试步骤。 每个步骤必须严格遵循以下JSON格式: { “step_id”: 序号, “action_type”: “导航|点击|输入|验证|等待”, “target_description”: “对目标元素的自然语言描述,如‘带有‘登录’文本的按钮’、‘用户名输入框’”, “value”: “需要输入的文字或验证的预期值,如‘testuser’、‘页面标题应为‘首页’’”, “rationale”: “执行此步骤的原因或目标” } 当前应用信息: - 应用名称:[你的应用名] - 主要页面:登录页、首页、商品列表页、购物车页、个人中心 - 通用测试账号:username: test@demo.com, password: demo123 用户需求:“{用户输入的需求}” 请开始分解:

实际操作中,我们会把应用的真实URL、一些关键的CSS选择器示例(作为Few-shot)也放入Prompt上下文,能显著提高分解的准确性。例如,在Few-shot里展示一个例子:“点击登录按钮” ->{“action_type”: “点击”, “target_description”: “文本内容为‘登录’的按钮”, …}

实操心得:LLM对于模糊的描述容易产生歧义。比如“保存设置”,它可能不知道要点哪个按钮。因此,在知识库构建初期,我们需要人工干预,对AI分解出的步骤进行校正和丰富,把这些校正后的“标准操作”存入知识库。后续遇到类似描述时,系统会优先匹配知识库中的记录,匹配不上再调用LLM。这形成了一个“人工标注-模型学习-自动匹配”的增强循环。

3.2 从自然语言到浏览器动作:精准的“元素定位”策略

AI给出了“点击‘登录’按钮”的指令,Playwright如何找到这个按钮?传统自动化靠的是稳定的ID或XPath,但AI的描述是动态的。

我们的策略是多模态定位融合

  1. 语义匹配优先:利用Playwright的get_by_text()get_by_label()get_by_role()等语义化定位器。这是最接近人类描述的方式。page.get_by_text(“登录”, exact=True)就能找到文本精确为“登录”的元素。
  2. 视觉辅助定位(实验性):对于没有清晰文本或标签的元素,我们尝试结合截图和视觉AI模型。例如,当AI描述“点击页面右上角的用户头像图标”时,系统会截取页面截图,用小型的视觉模型识别出头像区域,再映射回DOM的大致位置,辅助Playwright进行定位。这一步目前精度有待提高,是未来的优化方向。
  3. 回退与重试机制:如果通过描述找不到元素,系统会触发一个“元素查找失败”的异常处理流程。这个流程会再次调用LLM,提供当前的页面HTML摘要和截图,询问“根据当前页面,如何定位‘登录按钮’?请提供可能的CSS选择器或XPath”。LLM有时能根据页面结构给出一个可用的选择器。同时,系统会记录这次失败,后续由人工补充该元素的稳定定位方式到知识库。

一个典型的执行代码片段(Python)如下:

async def execute_ai_step(step, page): action = step[“action_type”] target_desc = step[“target_description”] value = step.get(“value”) # 1. 尝试语义化定位 element = None if “文本” in target_desc: # 简单提取文本内容,实际中会用更复杂的NLP解析 text_match = re.search(r“文本[为是]‘(.+?)’“, target_desc) if text_match: element = page.get_by_text(text_match.group(1)) elif “输入框” in target_desc and “用户名” in target_desc: element = page.get_by_label(“用户名”) # 假设有label # 2. 如果找到元素,执行动作 if element: await element.wait_for(state=“visible”) if action == “点击”: await element.click() elif action == “输入”: await element.fill(value) # … 其他动作类型 # 3. 执行后,捕获状态供验证模块使用 screenshot = await page.screenshot(full_page=True, type=“jpeg”) html_snippet = await page.content() return {“status”: “success”, “screenshot”: screenshot, “html”: html_snippet} else: # 3. 定位失败,触发异常处理流程 return {“status”: “element_not_found”, “description”: target_desc}

3.3 智能验证:超越硬编码断言

执行了“登录”操作,如何判定成功?传统方法是assert “欢迎” in page.title()。我们的AI验证模块工作流更复杂:

  1. 收集证据:动作执行后,收集页面标题、URL、关键区域截图、特定元素的文本内容(如欢迎语)、是否有错误提示元素出现等。
  2. 提交LLM裁决:将任务目标(“验证登录成功”)、收集到的证据以及页面HTML摘要,一起提交给LLM。Prompt类似于:“根据以下页面信息,判断‘用户登录成功’这一目标是否达成。页面标题是‘…’,主区域存在文本‘…’,是否存在class包含‘error’的元素?请只回答‘是’或‘否’,并附上简要理由。”
  3. 结果处理:如果LLM判断为“是”,则步骤通过。如果为“否”,则进入异常处理流程,LLM提供的“理由”会成为后续排查和报告的重要信息。

踩坑实录:直接让LLM看整个HTML是不现实且低效的(Token消耗大,且噪音多)。我们必须要做信息过滤。我们的做法是,预先定义每个“页面类型”(如登录页、首页)需要关注的关键区域选择器。例如,对于登录页,我们只提取#login-form这个容器内的HTML和截图。这需要前期对应用进行一些简单的“配置”,但一旦配置好,就能大幅提升AI判断的效率和准确率。

4. 平台系统搭建与核心环节实现

4.1 系统架构与技术栈实现

我们采用前后端分离的微服务架构,具体技术栈如下:

  • 后端(AI测试引擎):Python + FastAPI。Python在AI生态和Playwright支持上优势明显。FastAPI用于提供任务提交、状态查询等API。核心的AI任务规划、验证模块调用LLM的API(如OpenAI或本地部署的Ollama服务)。执行器部分使用异步的Playwright,通过playwright.async_api管理浏览器实例。
  • 任务队列与状态管理:使用Celery+Redis。用户提交一个测试任务(如“测试购物流程”)后,API将其封装为一个Celery任务,放入队列。Celery Worker从队列中取出任务,调用AI引擎执行。Redis用于存储任务状态、中间结果和缓存。
  • 前端(管理平台):Vue 3 + Element Plus。用于创建测试场景(其实就是输入自然语言描述)、查看任务执行队列、浏览详细的测试报告(包括AI执行的每一步截图、LLM的判断理由)、管理知识库。
  • 数据存储:PostgreSQL。存储用户信息、测试场景定义、历史任务记录、知识库条目。对于大量的执行截图和日志,我们存储在对象存储(如MinIO)中,数据库中只存路径。
  • 部署:使用Docker Compose将所有服务(Web前端、FastAPI后端、Celery Worker、Redis、PostgreSQL)容器化,便于部署和扩展。

4.2 一个完整测试任务的执行流水线

让我们跟踪一个任务“测试新用户注册流程”的生命周期:

  1. 任务提交:用户在前端输入描述,点击执行。前端调用POST /api/tasks
  2. 任务规划:FastAPI后端收到请求,首先调用规划服务。该服务将用户描述和系统Prompt发送给LLM,获得结构化的步骤列表[步骤1: 导航到注册页, 步骤2: 输入邮箱, …]。将此规划存入数据库,状态为“已规划”。
  3. 任务入队:后端创建一个Celery任务execute_test_plan,参数为任务ID和规划步骤,发送到Redis队列。
  4. 任务执行:空闲的Celery Worker接收到任务。
    • Worker启动一个新的Playwright浏览器实例(或从池中获取)。
    • 循环执行每个步骤: a.动作转换与执行:根据步骤描述,调用动作执行模块定位元素并操作浏览器。 b.状态捕获:执行后截图,获取页面信息。 c.智能验证:将步骤目标、捕获的状态提交给验证模块,调用LLM进行判断。 d.结果记录:将每一步的结果(成功/失败、截图路径、LLM判断理由)实时写回数据库。 e.异常处理:如果某步失败,根据预设策略(如重试、终止任务)或调用LLM进行决策,然后继续。
  5. 任务完成:所有步骤执行完毕,Worker更新任务状态为“完成”或“失败”,并生成一份整合报告。
  6. 结果反馈:用户在前端可以实时查看任务执行进度流,最终查看详细的报告。报告会高亮显示AI认为有问题的步骤,并附上LLM的分析,非常直观。

4.3 知识库的设计与应用

知识库是这个系统能否越用越聪明的关键。我们设计了两张核心表:

  • 元素定位知识表:存储应用名、页面URL、元素描述、推荐定位方式(Playwright Locator语法)、置信度。当AI需要定位一个元素时,会先在知识库中模糊匹配“元素描述”,如果找到置信度高的记录,就直接使用“推荐定位方式”,不再调用复杂的定位逻辑。
  • 测试模式表:存储场景描述、成功步骤序列、常见异常及处理方案。当用户输入一个新需求时,系统会先在知识库中搜索相似的“场景描述”,如果匹配度高,可以直接推荐或复用已有的测试步骤序列,极大提升效率。

知识库的积累初期靠人工录入(将成功的测试任务固化下来),后期可以设计自学习机制:当一个任务被人工审核确认为成功且路径高效时,系统可以自动将其模式化,存入知识库。

5. 常见问题、挑战与我们的应对策略

在实际开发和试运行中,我们遇到了无数问题。以下是几个最具代表性的:

5.1 AI的“幻觉”与不可控输出

这是使用LLM最大的风险。AI可能分解出根本不存在的步骤,或者给出荒谬的验证逻辑。

  • 我们的策略
    1. 设置严格的输出格式:强制要求LLM以指定JSON格式输出,不符合格式的直接视为错误。
    2. 增加验证层:对于规划出的步骤,在执行前可以加一个“可行性预检”环节。用一个更简单的模型或规则,快速检查步骤序列是否符合常识(比如“提交订单”步骤不可能出现在“登录”步骤之前)。
    3. 人工审核回路:对于核心业务流程的测试规划,首次执行时可以设置为“模拟执行”模式,只输出规划步骤而不真实操作浏览器,由人工确认后再正式执行。
    4. 使用更可控的中间语言:我们正在探索让LLM输出一种更结构化的中间指令语言(比如一种自定义的DSL),再由一个稳定的解释器转换成Playwright命令。这样可以把LLM的创造力限制在一个更安全的框架内。

5.2 执行稳定性与环境依赖

自动化测试的老大难问题。浏览器版本变化、网络延迟、动态加载的元素都会导致失败。

  • 我们的策略
    1. 充分利用Playwright特性:使用auto-waiting,所有操作(点击、填充)都会自动等待元素可操作。设置合理的timeoutretry策略。
    2. 强化状态检测:在执行关键步骤前,AI验证模块会先检查“前置状态”是否就绪。例如,在“输入支付密码”前,会先验证是否确实进入了支付页面。
    3. 环境隔离与一致性:使用Docker固定浏览器和依赖的版本。在CI/CD中,测试环境尽量与生产环境保持一致。
    4. 定义清晰的“失败”:区分“环境失败”(如网络超时)和“业务失败”(如密码错误)。对于环境失败,系统自动重试;对于业务失败,则记录为真正的缺陷。

5.3 成本与性能瓶颈

频繁调用GPT-4 API,费用惊人。同时,串行执行步骤,测试耗时较长。

  • 我们的策略
    1. 模型分级调用:如前述,规划用强模型,简单的动作转换和验证用弱模型(如GPT-3.5-Turbo)或本地小模型。
    2. 结果缓存:对于相同的页面状态和验证目标,AI判断结果可以缓存一段时间,避免重复调用。
    3. 并行化探索:对于独立的测试模块(如测试登录、测试搜索),可以启动多个浏览器实例并行执行。但这需要AI调度器具备更强的协调能力,避免资源冲突(如共用账号)。
    4. 离线模式与自建模型:长期来看,对于动作执行等确定性较高的任务,可以训练专有的小型模型,或完全用规则引擎替代,彻底摆脱对云端大模型的依赖。开源模型(如Qwen、Llama)在本地部署后的调优也是一个方向。

5.4 测试覆盖度的评估

如何衡量这个AI测试平台的效果?它发现的缺陷多吗?它能替代多少手工测试?

  • 我们的度量指标
    1. 任务成功率:AI独立完成一个端到端测试任务的百分比。
    2. 缺陷发现率:与手工测试或其他自动化测试对比,发现的有效缺陷数量。
    3. 回归测试效率提升:执行相同范围的回归测试用例,所需时间对比。
    4. 维护成本:与传统自动化脚本相比,适应UI变更所需的调整工作量。 目前来看,AI测试在探索性测试、新功能快速验证、复杂业务流程遍历上优势明显,能发现一些脚本未覆盖的边界情况。但在需要极度精确断言(如计算数值、验证复杂业务规则)的场景,仍需与传统自动化或手工测试结合。

构建“AI+自动化测试平台”是一条充满挑战但极具前景的路。它不是一个一蹴而就的替代方案,而是一个强大的辅助和增强工具。我们的实践表明,它已经能够处理许多标准化的Web流程测试,并将测试人员从重复的脚本编写和维护中解放出来,去从事更有价值的测试设计、复杂逻辑验证和用户体验评估工作。这个系统还在持续迭代中,最大的感受是,与其教AI写代码,不如教它理解目标,然后让它自己去操控浏览器。这中间的工程化挑战,正是我们作为测试开发工程师的价值所在。如果你也对这个方向感兴趣,不妨从一个小场景开始,比如用Playwright+OpenAI API先做一个能自动登录你公司系统的脚本,感受一下AI驱动测试的魔力与阵痛,这绝对是未来几年测试领域最值得投入精力的方向之一。

本文还有配套的精品资源,点击获取

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

脑电数据成最高隐私:从智利裁决看神经数据保护的工程落地

如果有一天,你发现自己佩戴的脑电手环采集了原始脑电信号,然后这些信号被上传到云端,训练了一个“专注力评测模型”,你会怎么想?第一反应可能是:这算过度收集隐私。第二反应才是:法律允许吗&…

作者头像 李华
网站建设 2026/8/30 9:11:36

GPT-SoVITS 语音合成在 Mac 上跑满速:MPS 加速配置与调优实战

GPT-SoVITS 语音合成在 Mac 上跑满速:MPS 加速配置与调优实战 【免费下载链接】GPT-SoVITS 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS GPT-SoV…

作者头像 李华
网站建设 2026/8/30 9:10:46

机战UX超清重绘:十万图AI抽卡打造高清游戏素材

这一次我们来看一个机战主题的重绘资源项目:《机战UX》超清重绘版。项目作者是大灰鹅,标题里最抓眼球的数字是“耗费十万图抽卡”,可以把它理解为一次大规模的AI素材重绘工程,目的是把原本在3DS上运行的《超级机器人大战UX》游戏素…

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

可逆不可学习样本:深度学习版权保护的新思路

这次我们来看一个深度学习版权保护方向的研究题目: Reversible Unlearnable Examples: Towards the Copyright Protection in Deep Learning Era 。一句话概括,它解决的是“数据集公开了,但又没完全公开”的问题——数据所有者希望数据可以…

作者头像 李华
网站建设 2026/8/30 9:05:32

十分钟上手 Fooocus AI 绘图工具:从下载到出图的完整教程

十分钟上手 Fooocus AI 绘图工具:从下载到出图的完整教程 【免费下载链接】Fooocus Focus on prompting and generating 项目地址: https://gitcode.com/GitHub_Trending/fo/Fooocus 第一次接触 AI 绘图,最怕的不是不会画,而是一堆看不…

作者头像 李华
网站建设 2026/8/30 8:59:42

免费自托管的可视化数据库:NocoDB 快速上手指南

免费自托管的可视化数据库:NocoDB 快速上手指南 【免费下载链接】nocodb 🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative 项目地址: https://gitcode.com/GitHub_Trending/no/nocodb Excel 里做不了下拉枚举、…

作者头像 李华