做测试这行,最消磨人的不是写用例,而是同一套回归用例在每次发版前都要重跑一遍,跑完还得整理一堆报告。尤其是我负责的这套 ERP 系统,模块多、流程长、接口耦合深,纯手工点一遍,光冒烟测试就得耗上大半天,更别说全量回归。上个月我把 Hermes Agent 接进测试环境,用一句话下达指令,它自己拆任务、跑接口、点页面、比对数据库,帮我自动跑完了 72 项测试,最后还生成了 10 份像模像样的报告。这篇文章不讲虚的,把我从部署到落地的完整过程、踩过的坑、以及我总结的实战经验都写在这里,给正准备上手 AI 自动化测试的朋友一个参考。
1. 为什么我选择 Hermes Agent 来跑系统测试
1.1 传统自动化测试让我最头疼的三件事
先说背景。我自己是测试开发出身,Selenium、Appium、Pytest 这些框架都用过,接口自动化、UI 自动化、性能测试都搭过架子。按道理说,传统自动化已经能解决大部分重复劳动,但真正跑起来之后,有几个问题一直绕不开。
第一,脚本维护成本太高。业务需求一变更,接口字段加一个、页面按钮挪个位置,脚本就要跟着改。到了版本迭代高峰期,改脚本的时间比手动测试还长,团队干脆又退回手工点。
第二,测试数据准备和结果校验很麻烦。尤其是 ERP 这种重业务系统,一笔订单从创建、审核、出库到财务结算,中间要经过十几个接口和页面操作,数据状态动不动就串。传统脚本里写死了各种前置条件,数据一乱,整条用例就废了。
第三,报告整理极度耗时。跑完测试之后,要把结果汇总成领导能看的报告,截图、日志、失败原因、风险分析,全靠手工粘贴。72 项测试跑完,整理报告又花了我大半天。
1.2 Hermes Agent 到底做了什么不一样的事
我最早接触 Hermes Agent,是在一个技术社群里看到有人在讨论本地部署。当时我就想,如果让一个能理解自然语言的 Agent 来接管测试执行,是不是就能绕过“写脚本”这个环节?
实际用下来,它的核心价值不是“自动写脚本”,而是把“理解任务—拆解步骤—调用工具—汇总结果”这一整条链路自动化了。我只需要用口语化的一句话告诉它“跑一遍 ERP 系统的核心回归,重点检查库存模块”,它就能自动拆成若干子任务:先调接口查看库存服务是否健康,再启动 UI 自动化用例库去页面上走一遍出入库流程,接着把数据库里的库存数据捞出来比对,最后把所有结果汇总成一份带结论的报告。
这个过程里,我不需要关心每条用例内部怎么实现,只需要在前期把测试工具和用例库配置好,剩下的交给 Agent 去编排。它相当于一个懂业务、懂工具的“测试组长”,而不是一条只会的机械执行脚本。
1.3 和传统自动化框架放在一起对比
有人可能会问,Hermes Agent 是不是要把 Selenium、Pytest 这些框架全部替代掉?我的答案是:完全不是。它的定位是调度层和智能层,底层执行还是依赖这些工具。
我做了个对比,帮助团队理解这套架构:
| 对比维度 | 传统自动化框架 | Hermes Agent 方案 |
|---|---|---|
| 用例编写方式 | 代码编写,调试成本高 | 自然语言描述需求,可复用已有用例库 |
| 任务触发方式 | 手动执行命令或 CI 触发 | 一句话指令,Agent 自动拆解和编排 |
| 结果汇总 | 各工具独立产出报告 | 统一收集、智能分析、生成结构化报告 |
| 失败处理 | 脚本写死重试逻辑 | Agent 根据失败原因动态调整策略 |
| 上手门槛 | 需要掌握编程语言和框架 | 测试人员也能通过对话完成大部分操作 |
当然,传统自动化框架依然是执行层的基石,只是现在我不需要自己把每个环节串起来了。
1.4 这次实战覆盖的测试范围
这次实战,我在测试环境里对一套标准 ERP 系统做了全量回归,主要包括五个方面:接口自动化测试,覆盖采购、销售、库存、财务、生产等核心模块的 RESTful 接口;UI 自动化测试,走查登录、单据录入、审批流、报表查询等关键页面;核心业务流程测试,模拟从采购下单到财务结算的端到端链路;数据一致性校验,比对接口返回结果与数据库实际落库数据;异常场景测试,包括重复提交、并发操作、权限越权等边界情况。
72 项测试就是从这五个方面拆分出来的,分布在 12 个测试集合里。Hermes Agent 拿到任务后,先按模块和依赖关系排好执行顺序,能并行的并行,有依赖的按顺序跑,整个过程用了 40 多分钟跑完,比我以前手动逐个执行快了一倍不止。
2. Hermes Agent 本地部署与环境准备
2.1 部署前先想清楚的问题
先说一个最重要的建议:部署之前,先想清楚你要用 Agent 干什么,别一头扎进安装教程里。Hermes Agent 本身像一个“大脑”,没有工具它也干不了活。你要先盘点自己的测试资产,比如现有接口自动化用例、UI 自动化脚本、数据库连接信息、测试环境地址,这些才是 Agent 真正调用的“手脚”。
我这次的部署环境是 Windows 11 工作站,32GB 内存,显卡是 RTX 4070。如果只是做接口自动化测试,CPU 推理也够用;但要跑 UI 自动化和大模型本地推理,建议内存 32GB 以上,否则模型加载和浏览器渲染同时进行,很容易卡死。
网络方面,部署过程需要拉取依赖包和模型文件,提前配好镜像源或者保证网络通畅,能省不少事。
2.2 Windows 环境安装步骤
Hermes Agent 的官方文档对 Linux 环境比较友好,Windows 下的安装步骤相对零散。我结合自己的实操,整理一套能在 Windows 上跑通的流程。
第一步,准备 Python 虚拟环境。建议用 3.10 或 3.11 版本,太新的版本有时候会遇到个别依赖库还没适配的情况。执行下面的命令创建项目目录和虚拟环境:
mkdir hermes-agent cd hermes-agent python -m venv venv venv\Scripts\activate第二步,拉取项目代码并安装依赖。我用的是 Git 克隆仓库的方式,然后通过 pip 安装核心依赖:
git clone https://github.com/your-project/hermes-agent.git cd hermes-agent pip install -r requirements.txt这里有个小坑,Windows 下有几个依赖库需要预编译的 wheel 包,直接 pip 安装容易报错。我当时卡在pydantic和regex这两个包上,后来从预编译包网站下载对应 Python 版本的 wheel 文件手动安装,才顺利通过。
第三步,初始化配置文件。项目根目录下有个config.example.yaml,把它复制成config.yaml。需要修改的关键配置项包括:Agent 的名称和角色设定、模型接入参数、测试工具执行路径、工作目录的读写权限。我建议把 Agent 的工作目录单独设成一个文件夹,比如D:\hermes_workspace,避免和项目代码混在一起,环境隔离更干净。
第四步,验证安装结果。运行命令启动交互模式:
python main.py --interactive启动后输入一句“你好,帮我检查一下当前环境是否正常”,如果 Agent 能正常回复,说明核心流程已经通了大半。
2.3 模型接入与推理配置
Hermes Agent 本身不包含大模型,它需要接一个推理后端才能实现自然语言理解和任务拆解。我试过两种方式,各有优劣。
第一种是接入云端大模型的 API,比如兼容 OpenAI 接口的服务。优点是推理速度快,语义理解能力强,不需要本地显卡资源;缺点是对网络有依赖,并且测试数据会经过第三方服务,如果公司有数据安全要求,这条路会被卡死。
第二种是本地部署大模型,通过 Ollama 这类工具加载开源模型。我用的是 Qwen 系列的中小参数模型,在 32GB 内存加 RTX 4070 的环境下,加载 7B 量化版本可以流畅运行,单次推理延迟大概在 1 到 3 秒,完全够用。
配置上,核心就是让 Hermes Agent 知道模型服务的地址和模型名称。在config.yaml里设置模型接入信息,我用的是 Ollama 的本地服务地址:
llm: provider: ollama base_url: http://localhost:11434 model: qwen2.5:7b-instruct temperature: 0.2 max_tokens: 2048temperature我特意调到 0.2,就是希望 Agent 在拆解测试任务时尽量稳定、少发散。如果调成 0.7 以上,它可能会发挥出更有创造性的分析,但也会增加任务理解偏差的概率,对于测试场景,稳定大于创意。
2.4 把测试工具链全部挂到 Agent 上
Agent 能干活的前提,是它知道怎么调用工具。Hermes Agent 支持工具注册机制,我这次把五类测试工具挂了上去:接口测试工具,我用的是 Python 的requests封装了一套通用请求工具,支持 GET、POST、PUT、DELETE 方法,以及自定义 Header 和 Body;UI 自动化工具,封装了 Selenium 的常用操作,包括元素定位、点击、输入、截图;数据库比对工具,通过pymysql连接 MySQL,执行查询语句并返回结果;性能检测工具,调用了locust的接口进行压力测试;报告生成工具,内置了 Markdown 和 HTML 模板渲染。
工具注册的原理并不复杂,就是给每个工具写一个函数定义,包括工具名称、功能描述、参数说明,Agent 在解析用户意图时会根据描述自动选择合适工具。这里有个特别重要的经验:工具描述一定要写清楚,最好是带上使用场景示例。比如接口测试工具的描述,不要只写“发送 HTTP 请求”,而要写成“发送 HTTP 请求,适用于调用系统 RESTful API,支持传入 method、url、headers、body 参数”。描述越具体,Agent 选错工具的概率越低。
3. 一句话驱动测试的核心实现过程
3.1 从一句话到可执行任务,中间发生了什么
一句话之所以能驱动 72 项测试,靠的是 Hermes Agent 内部的“意图拆解”能力。我理解它的工作方式大致分四步。
第一步,解析指令。Agent 把我输入的“跑一遍 ERP 系统核心回归”这句话转换成结构化意图,识别出关键实体是“ERP 系统”和“核心回归”,动作是“执行测试”。
第二步,规划任务。Agent 根据注册的工具能力,把整体目标拆成多个子任务,比如先做接口健康检查、再做核心流程 UI 测试、最后做数据一致性校验。这个分解过程不是写死的,而是模型根据当前可用的工具动态生成的。
第三步,按序执行。Agent 逐个调用工具,执行过程中会把每个小步骤的输入输出记录下来。遇到失败项,它会先判断是环境问题还是业务断言失败,如果是环境问题,会尝试等待重试或更换执行策略。
第四步,汇总反馈。所有子任务执行完后,Agent 收集每一条测试用例的状态、耗时、错误信息,整理成结构化数据,再调用报告生成工具输出可读性强的报告。
这四个步骤听起来简单,但真正落地时有个关键前提:注册工具时要把工具之间的依赖关系想清楚。比如 UI 测试要依赖接口测试先确认登录接口正常,数据比对要等业务流程跑完才能执行。这种依赖关系,Agent 在拆解任务时不一定能完全自动判断,我建议在描述业务场景时把前后关系说清楚。
3.2 实际用到的测试指令长什么样
我在实战中试过各种指令写法,总结出三类比较实用的模板。
第一类是精准任务型,适合明确知道要跑哪些用例的场景。比如:
执行库存模块的全部接口测试用例,测试数据文件使用 inventory_case.json,失败用例重试 2 次,重试间隔 5 秒。
这类指令适合已经建好用例库的情况,这时候 Agent 主要承担调度工作,按并行策略把用例分发出去执行。
第二类是业务目标型,适合只知道自己想要什么业务结果,但不关心具体用例的场景。比如:
验证采购到付款的完整流程,从创建采购订单开始,经过审批、收货、生成应付单,最后完成付款,每一步都要校验数据库中的数据,最后输出业务流程图。
这种指令对 Agent 的规划能力要求更高,因为每一步具体调什么接口、校验什么字段、数据库查哪些表,需要它自己根据业务理解去查找和确认。
第三类是混合指令型,适合既有时限要求,又有关键关注点的场景。比如:
今晚我要发布新版本,测试环境跑一遍全量回归,优先执行核心交易链路,其他用例如果执行时间超过 8 分钟就跳过,最终报告里标注未执行的原因。
混合指令最能体现 Agent 的价值,它能理解“优先”“跳过”“标注原因”这些隐含需求,并体现在执行策略和报告输出中。
3.3 任务编排、并发执行与失败重试
72 项测试如果全部串行执行,即使每项平均 30 秒,也要 36 分钟。我在配置里开了并发执行,把没有依赖关系的用例分成 8 个并发组,整体耗时压缩到 15 到 20 分钟。
并发不是盲目开的,有几个注意点。测试环境能不能扛住并发请求,如果环境资源有限,建议并发数控制在 3 到 5;用例之间会不会互相影响,比如两个用例同时创建相同编码的数据,就会产生冲突,这种情况需要设置前置参数隔离;数据库连接池是否够用,并发太高会导致连接超时。
失败重试这块,我设置了全局策略和单用例策略两级控制。全局策略适用于基础设施类问题,比如环境未就绪、数据库连接失败,重试 3 次,间隔时间递增,第一次 5 秒、第二次 10 秒、第三次 20 秒。单用例策略适用于业务断言失败,这种大概率是真实缺陷,不重试,而是把失败详情记录下来,方便人工复现。
3.4 人类干预的边界在哪里
AI 再智能,测试还是需要保留人工确认环节。我这次实战设定了几个人类干预点:删除或修改生产环境前的任何操作,必须经过人工确认;批量发送外部通知或邮件,需要人工授权;执行代码变更或部署操作时,Agent 只能生成操作命令,不允许直接执行;测试结论为“系统不可用”的严重级别结果,需要测试负责人复核后才能写入最终报告。
这几个边界在 Agent 配置里都有明确限制。我会给它设置“禁止操作”清单,让它在规划任务时主动规避高风险动作,而不是执行到一半才被发现。
4. 自动化生成 10 份测试报告
4.1 报告体系怎么设计
72 项测试跑完,最重要的是如何把结果变成能指导决策的报告。我不是只输出一份大杂烩报告,而是让 Hermes Agent 按角色拆分成了 10 份,每一份面向不同使用场景。
这 10 份报告分别是:测试总览报告、接口测试详情报告、UI 测试详情报告、核心业务流程验证报告、数据一致性校验报告、异常场景测试报告、性能测试摘要报告、缺陷清单与风险分析报告、环境变更记录报告、版本发布建议报告。
每份报告不是孤立生成的,它们共享同一个测试结果数据库。Agent 在执行完所有用例后,先统一落库,再按报告模板针对性取数、分析、渲染。这样好处很明显:数据口径一致,不会出现总览报告说通过率 90%,详情报告里却对不上数的情况。
4.2 报告生成的实现原理
报告生成这部分,我用的是模板渲染加智能分析两条线。模板渲染负责格式化数据和图表,智能分析负责生成文字结论。
模板渲染的核心是准备一套 Markdown 或 HTML 模板,定义好标题、表格、图表位置,通过 Jinja2 模板引擎填充测试结果数据。接口耗时分布、用例通过率趋势、失败原因分类占比这些图表,我用的是 Plotly 生成交互式图形,再嵌入 HTML 报告里。
文字结论部分才是 Hermes Agent 真正发挥价值的地方。传统自动化报告只会告诉你“3 条用例失败”,但 Hermes 会分析失败原因并给出判断,比如“库存接口超时导致 3 条用例失败,其中 2 条为环境网络波动,1 条需要排查服务器日志,建议优先检查库存服务的连接池配置”。这种分析质量,已经接近中级测试工程师的判断水平。
4.3 报告里我实际看重的指标
报告数量多不代表信息越全越好。我把 10 份报告里最核心的指标整理成一个速查表,每次跑完测试先看这些数:
| 指标 | 说明 | 我的关注阈值 |
|---|---|---|
| 用例通过率 | 通过用例数除以总用例数 | 低于 95% 需要关注 |
| 严重缺陷数 | 阻断性或功能性缺陷 | 大于 0 时阻断发布 |
| 接口平均耗时 | 所有接口请求的平均响应时间 | 超过 500ms 预警 |
| 接口错误率 | 4xx/5xx 状态码占比 | 超过 2% 需要排查 |
| 数据一致性异常数 | 接口返回与数据库不一致的条数 | 大于 0 即视为问题 |
| 用例执行时长 | 总执行时长和单用例最大时长 | 单用例超 8 分钟需优化 |
| 失败重试率 | 失败后重试成功的比例 | 过高说明环境不稳定 |
| 风险等级分布 | 各类风险的数量和影响范围 | 高风险超过 2 项需评审 |
4.4 报告自动分发与团队同步
报告生成完,还要解决一个现实问题:怎么让团队及时看到。我配置了两个自动分发通道:邮件推送和团队看板同步。
邮件推送的逻辑是,Agent 在报告生成后自动调用 SMTP 接口,按订阅列表分发报告。总览报告发给项目经理和测试负责人,详细报告发给对应模块的开发负责人,缺陷清单发给开发团队和产品经理。邮件正文会包含关键结论摘要,附件是完整报告文件。
团队看板同步用的是飞书开放接口,把测试结论、通过率、高风险项等关键字段推送到专门的测试群和看板。这样开发和产品在群里就能第一时间看到测试结果,不用等邮件,也不用来回找测试要报告。
5. 真实环境中的问题排查与避坑
5.1 高频问题排查速查表
实际跑自动化测试,尤其是 AI Agent 这种新东西加入进来之后,问题肯定会遇到。我把这次实战中遇到的高频问题整理成速查表,给后来者一个快速定位的参考:
| 问题现象 | 可能原因 | 排查建议 |
|---|---|---|
| Agent 无法调用注册工具 | 函数描述不清晰或参数类型不匹配 | 检查工具描述是否说清使用场景,用最简单的例子单独调用验证 |
| 用例执行全部超时 | 并发数过高,测试环境资源耗尽 | 降低并发数,查看服务器 CPU 和内存占用 |
| 报告数据偏少,部分用例未执行 | Agent 在任务拆解时遗漏了部分用例 | 在指令里明确“执行 inventory_case.json 内的全部用例”,避免模糊描述 |
| 模型推理速度慢 | 本地模型参数量过大,或未开启 GPU 加速 | 换小参数模型,检查 Ollama 是否使用 GPU 推理 |
| 数据库比对结果不准 | 时区差异或数据格式不一致 | 统一使用 UTC 时间戳,比对前做数据标准化处理 |
| UI 测试元素定位失败 | 前端页面有动态元素或 iframe 嵌套 | 封装智能等待和 iframe 切换逻辑,减少硬编码 XPath |
| Agent 生成了错误结论 | 模型理解偏差或上下文信息不足 | 在指令里补充业务背景,比如金额字段需要保留两位小数 |
5.2 我踩过的三个典型坑
第一个坑是工具描述太简单,导致 Agent 选了错误工具。最开始我把接口测试工具的描述写成“发送 HTTP 请求”,结果 Agent 在处理需要登录鉴权的接口时,直接裸调接口拿不到数据,反复重试无果。后来我把描述改成了“发送带 Token 鉴权的 HTTP 请求,适用于系统内所有 RESTful API,支持自定义 Header”,问题就迎刃而解了。
第二个坑是并发执行时共享了测试数据。我有三组用例同时跑,其中两组都用了同一个测试账号和同一批测试商品数据,执行到一半出现数据锁冲突和重复提交错误。后来我把测试数据按用例组分片隔离,每个组用独立账号和独立前缀的数据,才彻底解决。
第三个坑是报告模板里字段和实际数据不一致。我在设计报告模板时假设所有用例都有“响应时间”字段,但部分断言型用例根本不做耗时统计,导致渲染出来一堆空值。后来我在模板里加了一层数据补全逻辑,没有的字段显示“不适用”,看起来干净很多。
5.3 稳定性优化的几条建议
给稳定性提几条建议,都是我实际验证过有效的方法。建议一:模型服务单独部署,不要和测试执行环境共用一台机器,否则模型推理和浏览器渲染会争抢资源,容易把 UI 自动化搞崩溃。建议二:为 Agent 设置超时降级策略,单个工具调用超过 2 分钟自动终止,并由 Agent 判断继续执行还是标记失败,避免一条用例卡住整个任务队列。建议三:保留完整执行日志,我在 Hermes 配置了 debug 级别的日志输出,每次执行都会生成 JSON 格式的结构化日志,出了问题可以直接通过关键词检索定位。建议四:定期回归工具链注册配置,升级依赖包或者新增用例类型后,用几组最小用例做冒烟验证,确保 Agent 还能正确调用所有工具。
6. 这套方案用下来的真实体会
6.1 效率数据不是最关键的
跑完 72 项测试生成 10 份报告,单看效率提升确实明显,但我觉得这套方案最值钱的地方,不是把人从重复执行中解放出来,而是把测试过程变成了一种可沉淀、可追溯、可分析的数据资产。过去跑完一轮测试,结果散落在各个工具的报告里,很难横向对比。现在有了 Agent 统一调度和汇总,测试历史数据都在库里,趋势分析、质量预测都有了基础。
另一个感受是,测试工程师的工作重心真正发生了转移。以前我花大量时间写脚本、跑脚本、整理报告,现在这些工作大部分交给 Agent 之后,我开始花更多时间研究业务规则、设计更有价值的测试场景、分析缺陷背后的根因,这些才是测试工作更核心的价值。
6.2 后续可以继续扩展的方向
这套方案的扩展空间很大。我目前已经在尝试的一个方向是让 Hermes Agent 在开发提交代码后自动生成增量测试计划,根据变更文件影响范围,自动筛选需要回归的用例集,而不是每次全量跑 72 项。这种“精准测试”一旦跑通,测试成本还能再降一半。
另一个方向是把 Agent 接入 CI/CD 流水线,让它在每天的夜间自动执行全量回归,早上团队到公司就能看到一份最新的质量报告。我还计划把 Hermes 生成的测试结论回传给项目管理系统,自动创建缺陷单和测试任务,省掉人工转录的环节。
最后再说一个我觉得特别实用的小技巧:如果想让 Agent 更懂你的业务系统,可以在配置里添加一份业务说明文档,把核心模块、字段含义、状态流转规则写清楚。Agent 在做数据比对和异常判断时,会参考这些背景知识,得出的结论会靠谱很多。我一开始就是漏了这个步骤,结果它把“待审核”状态误判成了数据异常,加了业务文档之后,这类情况就很少再出现了。