登录回归不用先搭平台我用 Hermes 跑通拆解→脚本→报告实战③·提示词可复制文 / 测试员周周全网同名先给结论登录回归不必先搭测试平台也不必先写一摞 Skills。把登录页 URL、账号、预期结果说清楚甚至只丢一个页面Hermes 能一条龙做完拆解 → 用例表 → Playwright → JSON → HTML → 复盘建议下文提示词均可直接复制。复制下面整段打开 Hermes 就能开聊还没扒元素 ID 也行能打开页面就让它先看再写环境隔离就改成「根据截图推断」请打开 http://localhost:5000/login结合页面结构推断用户名、密码、登录按钮的稳定定位方式优先 id/name其次 role/label。然后按我给的账号 admin/123456列出登录回归的 P0/P1 用例草案不要先写代码。再回到后文「明细版」补全 ID一般多一轮对话比从头手抄定位器省心。01这是 Hermes 系列第 3 篇实战篇。上一篇我们跑通了 Hermes 飞书。本篇只回答一件事登录回归这种老任务能不能交给 Agent从拆解到报告一条龙做完如果你也遇到过这些场景这篇就是给你写的每天重复执行相同的回归测试枯燥又容易出错想引入 AI 辅助测试但不知道从哪一句提示词开始测试报告要手动整理费时费力团队新人多缺的不是模板而是带上下文的、可执行步骤我承诺与文首一致不必先有 AI 方法论说清楚链接、账号和预期甚至只丢一个页面Hermes 就能把你最耗时的「从 0 到 1」扛掉大半。02说句扎心的这些年我们不是没想过自动化。更早那一波是自建测试平台 / 测试管理系统前后端、权限、报表、和流水线对齐——像个小产品。能管协作但太重很多团队最后卡在维护和运营而不是卡在“没需求”。近半年行业里又在聊Skills、插件化编排——确实比大平台轻但你仍然要写技能、改版本、对齐文档多聪明的人也会被“维护另一套制品库”拖住。我现在更常用第三种把页面交给 Hermes。URL、截图、甚至“这页大概长什么样”的一句话配上账号与预期它能在工具链里看清表单与跳转再推导用例、补全定位器、生成可跑脚本和报告草稿。不是替你签发布上线而是把写第一版用例和脚本的时间砍到接近零。如果你已经配好了Playwright / 浏览器相关能力这类路径往往连单独的 Skills 文件都不用先写——对话即工作流需要固化时再考虑抽成模板或脚本仓库。边界也要讲清楚纯内网、涉密、Hermes 无法直连你本机服务时下面生成的脚本仍要你本地执行合规审计要求下P0 用例建议人工过一眼再跑批。03本篇交付对电商后台登录做回归UI 与登录相关的结果断言并产出结构化报告。你会带走可复制提示词拆解 → 用例表 → Playwright → JSON → HTML → 复盘建议一条完整闭环说人话 → 出表格 → 出脚本 → 跑批 → 出可视化知道哪一步适合全自动、哪一步必须人审04系统背景我们要测试的是一个电商秒杀与财务一体化系统的后台管理模块。系统功能包括商品管理添加、编辑、删除、上下架订单管理财务管理用户管理测试目标本次实战聚焦登录功能的回归测试包括测试项测试内容预期结果正常登录正确用户名 密码登录成功跳转到后台首页密码错误正确用户名 错误密码提示密码错误用户名不存在错误用户名 任意密码提示用户不存在空用户名用户名为空 任意密码提示请输入用户名空密码任意用户名 密码为空提示请输入密码测试环境项目配置系统 URLhttp://localhost:5000测试账号admin/123456浏览器Chrome / Firefox测试工具Hermes Agent Playwright下表中的 URL 与账号仅为本地演示示例实操时请替换为你自己的环境与凭据。05文首已给30 秒起手式下面从「明细版」走起方便你和正文里的用例表、脚本字段一一对照元素 ID、5 条用例与后文 Playwright 完全对齐。第一步告诉 Hermes 要做什么打开你与 Hermes 的对话飞书机器人或 CLI输入以下提示词我要对一个电商后台管理系统做登录页UI的回归测试。系统信息登录页面http://localhost:5000/login测试账号用户名 admin密码 123456用户名输入框 IDusername密码输入框 IDpassword登录按钮 IDlogin-btn请帮我拆解测试任务为可执行的步骤生成 5 个测试用例正常登录、密码错误、用户名不存在、空用户名、空密码输出结构化的测试用例表格Hermes 返回的任务拆解Hermes 会返回类似下面的内容【任务理解】你需要对电商后台管理系统的登录功能进行回归测试包含 5 个测试场景。【测试步骤拆解】步骤 1环境准备打开浏览器访问登录页面清除缓存和 Cookie步骤 2执行测试用例用例 1正常登录admin / 123456用例 2密码错误admin / wrong123用例 3用户名不存在testuser / 123456用例 4空用户名空 / 123456用例 5空密码admin / 空步骤 3记录结果每个用例的执行结果通过/失败实际响应与预期对比截图保存失败用例步骤 4生成报告汇总测试结果统计通过率输出问题列表第二步让 Hermes 生成测试用例继续输入请把上面的测试步骤转换成可执行的测试用例表格包含以下列用例编号用例名称前置条件测试步骤测试数据预期结果优先级Hermes 会返回编号名称前置条件测试步骤测试数据预期结果优先级TC001正常登录已注册账号1.打开登录页 2.输入用户名 3.输入密码 4.点击登录用户名admin 密码123456登录成功跳转到 /products 页面P0TC002密码错误已注册账号1.打开登录页 2.输入用户名 3.输入错误密码 4.点击登录用户名admin 密码wrong123提示密码错误停留在登录页P0TC003用户名不存在无1.打开登录页 2.输入不存在的用户名 3.输入任意密码 4.点击登录用户名testuser 密码123456提示用户不存在P1TC004空用户名无1.打开登录页 2.不输入用户名 3.输入密码 4.点击登录用户名(空) 密码123456提示请输入用户名P1TC005空密码已注册账号1.打开登录页 2.输入用户名 3.不输入密码 4.点击登录用户名admin 密码(空)提示请输入密码P106第三步生成 Playwright 自动化脚本输入提示词请用 Python Playwright 为上面的 5 个测试用例生成自动化测试脚本。要求每个用例一个独立函数包含断言检查失败时自动截图输出测试结果到 JSON 文件添加详细注释方便新人理解Hermes 会生成类似下面的脚本#!/usr/bin/env python3电商后台登录功能回归测试脚本使用 Playwright 进行浏览器自动化测试生成Hermes Agentfrom playwright.sync_api import sync_playwrightimport jsonfrom datetime import datetime测试配置BASE_URL http://localhost:5000LOGIN_URL f{BASE_URL}/loginTEST_ACCOUNT {username: admin, password: 123456}def run_test(case_id, case_name, username, password, expected_success, expected_message):执行单个登录测试用例参数:case_id: 用例编号case_name: 用例名称username: 测试用户名password: 测试密码expected_success: 是否预期登录成功expected_message: 预期的提示信息返回:dict: 测试结果包含是否通过、实际消息、截图路径等result {case_id: case_id,case_name: case_name,status: pending,actual_message: ,screenshot: None,error: None}with sync_playwright() as p:# 启动浏览器browser p.chromium.launch(headlessFalse) # headlessFalse 可以看到操作过程page browser.new_page()try:# 步骤 1打开登录页面page.goto(LOGIN_URL, timeout10000)# 步骤 2输入用户名if username:page.fill(#username, username)# 步骤 3输入密码if password:page.fill(#password, password)# 步骤 4点击登录按钮page.click(#login-btn)# 步骤 5等待响应等待 URL 变化或提示消息page.wait_for_timeout(2000)# 步骤 6检查结果if expected_success:# 预期成功检查是否跳转到 products 页面if /products in page.url:result[status] passedresult[actual_message] 登录成功页面跳转正确else:result[status] failedresult[actual_message] f登录失败当前 URL: {page.url}result[screenshot] fscreenshots/{case_id}_failed.pngpage.screenshot(pathresult[screenshot])else:# 预期失败检查是否有错误提示error_message page.text_content(.error-message) or page.text_content(.alert)if error_message and expected_message in error_message:result[status] passedresult[actual_message] f正确显示错误提示{error_message}else:result[status] failedresult[actual_message] f错误提示不匹配实际{error_message}result[screenshot] fscreenshots/{case_id}_failed.pngpage.screenshot(pathresult[screenshot])except Exception as e:result[status] failedresult[error] str(e)result[screenshot] fscreenshots/{case_id}_error.pngpage.screenshot(pathresult[screenshot])finally:browser.close()return resultdef main():主测试函数print( * 60)print(电商后台登录功能回归测试)print( * 60)# 定义 5 个测试用例test_cases [{case_id: TC001,case_name: 正常登录,username: admin,password: 123456,expected_success: True,expected_message: 登录成功},{case_id: TC002,case_name: 密码错误,username: admin,password: wrong123,expected_success: False,expected_message: 密码错误},{case_id: TC003,case_name: 用户名不存在,username: testuser,password: 123456,expected_success: False,expected_message: 用户不存在},{case_id: TC004,case_name: 空用户名,username: ,password: 123456,expected_success: False,expected_message: 请输入用户名},{case_id: TC005,case_name: 空密码,username: admin,password: ,expected_success: False,expected_message: 请输入密码}]# 执行测试results []for case in test_cases:print(f\n执行 {case[case_id]}: {case[case_name]}...)result run_test(**case)results.append(result)# 打印结果status_icon ✅ if result[status] passed else ❌print(f{status_icon} {case[case_id]}: {result[status]})print(f 结果{result[actual_message]})# 生成测试报告report {test_time: datetime.now().isoformat(),total_cases: len(results),passed: sum(1 for r in results if r[status] passed),failed: sum(1 for r in results if r[status] failed),results: results}# 保存报告with open(test_report.json, w, encodingutf-8) as f:json.dump(report, f, ensure_asciiFalse, indent2)# 打印汇总print(\n * 60)print(测试汇总)print( * 60)print(f总用例数{report[total_cases]})print(f通过{report[passed]} ✅)print(f失败{report[failed]} ❌)print(f通过率{report[passed]/report[total_cases]*100:.1f}%)print(f\n详细报告已保存到test_report.json)if __name__ __main__:main()07第四步运行测试脚本在终端执行以下命令1. 安装依赖首次执行需要pip install playwright2. 安装浏览器playwright install chromium3. 创建截图目录mkdir -p screenshots4. 运行测试python login_test.py执行过程你会看到类似这样的输出电商后台登录功能回归测试执行 TC001: 正常登录...✅ TC001: passed结果登录成功页面跳转正确执行 TC002: 密码错误...✅ TC002: passed结果正确显示错误提示密码错误执行 TC003: 用户名不存在...✅ TC003: passed结果正确显示错误提示用户不存在执行 TC004: 空用户名...✅ TC004: passed结果正确显示错误提示请输入用户名执行 TC005: 空密码...✅ TC005: passed结果正确显示错误提示请输入密码测试汇总总用例数5通过5 ✅失败0 ❌通过率100.0%详细报告已保存到test_report.json测试报告内容打开test_report.json你会看到{test_time: 2026-04-08T18:30:00,total_cases: 5,passed: 5,failed: 0,results: [{case_id: TC001,case_name: 正常登录,status: passed,actual_message: 登录成功页面跳转正确,screenshot: null,error: null},{case_id: TC002,case_name: 密码错误,status: passed,actual_message: 正确显示错误提示密码错误,screenshot: null,error: null}// ... 其他用例]}08第五步生成 HTML 测试报告输入提示词请把上面的 JSON 测试报告转换成 HTML 格式的可视化报告。要求包含测试汇总总用例数、通过率、执行时间用表格展示每个用例的详情通过用例用绿色标记失败用例用红色标记失败用例附上截图样式简洁专业适合发给团队和领导Hermes 会生成 HTML 报告模板你可以用 Python 脚本自动填充数据生成 HTML 报告的辅助脚本def generate_html_report(report_data, output_filetest_report.html):生成 HTML 测试报告html_template 登录功能回归测试报告测试时间{test_time}总用例数{total}通过{passed}失败{failed}通过率{pass_rate}%测试用例详情{test_rows}用例编号用例名称状态实际结果截图# 生成测试用例行test_rows for result in report_data[results]:status_class passed if result[status] passed else failedstatus_icon ✅ if result[status] passed else ❌screenshot_html f if result[screenshot] else -test_rows f{result[case_id]}{result[case_name]}{status_icon} {result[status]}{result[actual_message]}{screenshot_html}# 计算通过率pass_rate report_data[passed] / report_data[total_cases] * 100# 填充模板html_content html_template.format(test_timereport_data[test_time],totalreport_data[total_cases],passedreport_data[passed],failedreport_data[failed],pass_ratef{pass_rate:.1f},test_rowstest_rows)# 保存文件with open(output_file, w, encodingutf-8) as f:f.write(html_content)print(f✅ HTML 报告已生成{output_file})使用示例import jsonwith open(test_report.json, r, encodingutf-8) as f:report_data json.load(f)generate_html_report(report_data)09第六步让 Hermes 给出改进建议输入提示词这是今天的测试结果总用例数5通过5失败0通过率100%请帮我分析测试覆盖是否充分还有哪些边界场景需要补充给出一份测试改进建议Hermes 会返回【测试结果分析】✅ 当前测试覆盖情况正常场景已覆盖TC001异常场景已覆盖密码错误、用户名不存在TC002、TC003边界场景已覆盖空输入TC004、TC005 建议补充的测试场景安全性测试- SQL 注入尝试用户名输入 OR 11- XSS 攻击尝试用户名输入- 暴力破解防护连续 10 次错误密码性能测试- 登录接口响应时间要求 500ms- 并发登录测试10 用户同时登录兼容性测试- 不同浏览器Chrome、Firefox、Safari- 移动端适配手机浏览器用户体验- 密码显示/隐藏切换- 记住登录状态- 忘记密码功能【优先级建议】P0立即补充SQL 注入防护测试P1本周补充XSS 防护测试、响应时间测试P2下次迭代并发测试、兼容性测试10一次完整的 Hermes 辅助测试流程┌─────────────────────────────────────────────────────┐│ 1. 告诉 Hermes 测试目标 ││ ↓ ││ 2. Hermes 拆解任务为可执行步骤 ││ ↓ ││ 3. Hermes 生成测试用例表格 ││ ↓ ││ 4. Hermes 生成自动化测试脚本 ││ ↓ ││ 5. 执行测试脚本 ││ ↓ ││ 6. Hermes 生成可视化测试报告 ││ ↓ ││ 7. Hermes 分析结果并给出改进建议 │└─────────────────────────────────────────────────────┘关键提示词模板你可以直接复制使用【任务拆解】我要对 [系统名称] 的 [功能模块] 进行回归测试。系统信息[URL、账号、元素 ID 等]请帮我拆解测试任务为可执行的步骤。【测试用例生成】请把上面的测试步骤转换成可执行的测试用例表格包含用例编号、用例名称、前置条件、测试步骤、测试数据、预期结果、优先级。【脚本生成】请用 Python Playwright 为上面的测试用例生成自动化测试脚本。要求每个用例独立函数、包含断言、失败截图、输出 JSON 报告、添加详细注释。【报告生成】请把 JSON 测试报告转换成 HTML 格式的可视化报告。要求包含汇总信息、表格展示详情、通过/失败颜色标记、附截图、样式专业。【结果分析】这是测试结果[粘贴测试数据]请分析测试覆盖是否充分还有哪些边界场景需要补充给出改进建议。11我建议你保留的「人」环节用例表的第一版 Hermes 很快但业务断言例如精确文案、是否允许多端同时登录仍建议负责人扫一眼 P0 行。失败截图定位 自动化的价值一半在可复现附件发报告前确认截图路径在 JSON 里真的存在。稳定性wait_for_timeout只适合 demo上线前可以让 Hermes 把等待改成显式等待 URL / 文案 / 网络静默减少间歇性爆红。12Q1Hermes 生成的脚本运行报错怎么办A把错误信息复制给 Hermes让它帮你修复。例如运行脚本报错playwright._impl._api_types.TimeoutError: Timeout 10000ms exceeded.请帮我分析原因并修复脚本。Q2元素 ID 找不到怎么办A让 Hermes 帮你生成元素定位脚本请帮我生成一个 Python 脚本用 Playwright 打开登录页面打印出所有输入框和按钮的 ID、name、class 等属性方便我找到正确的元素定位器。Q3测试环境不稳定经常超时怎么办A让 Hermes 添加重试机制请在脚本中添加重试逻辑每个用例最多重试 3 次每次重试间隔 2 秒记录重试次数到报告13同系列另有一篇工程化加餐涉及测试数据工厂、hermes cron与飞书摘要等可与本篇对照阅读这个会在后面几天发出。资源备忘Hermes GitHubhttps://github.com/NousResearch/hermes-agent14我踩的坑真实复盘坑 1元素 ID 写错脚本跑不通现象Hermes 生成的脚本运行时提示Element not found原因我手动写的 IDlogin-btn和页面实际 IDlogin-button差一个字母解决让 Hermes 先打开页面自己识别元素或者用浏览器的开发者工具复制 selector坑 2超时等待设置太短现象测试偶尔失败提示超时原因本地环境慢的时候5 秒超时不够解决把timeout5000改成timeout15000或者用wait_for_selector代替固定等待坑 3中文路径导致截图失败现象测试通过但截图保存报错原因Windows 下中文路径编码问题解决截图路径用英文或者在 Python 文件开头加# -- coding: utf-8 --坑 4JSON 报告乱码现象生成的 JSON 文件打开是乱码原因文件编码不是 UTF-8解决用json.dump(result, f, ensure_asciiFalse, indent2)保存下篇预告实战④下一篇我们做商品管理模块的测试实战场景新增商品 查询商品字段多、边界多、组合多挑战- 必填项 vs 选填项怎么测 - 价格/库存的边界值怎么设计 - 查询条件的组合爆炸怎么覆盖交付- 11 条用例思路 - Page Object 脚本骨架 - 测试数据工厂自动生成商品数据如果你已经跑通了登录回归留言告诉我你卡过的报错关键词比如TimeoutError、Element not found我会在商品管理篇里把这些坑一起覆盖。谢谢你看到这里。如果你也在用 Hermes 做测试留言区回我卡在哪一环只看页面/任务拆解/脚本生成/报告我按热度整理答疑。你现在最想测哪个模块订单管理/财务管理/用户管理/秒杀活动——票数高的优先排期。动手试试读完这篇你可以立刻做两件小事只发登录页 URL 账号给 Hermes看它生成的第一版用例是否覆盖你的 P0。复制文末提示词模板产出一张你自己的用例表再在本地跑一轮 Playwright。P.S. 大平台、大折腾未必错但要问一句团队今年能投入多少维护人力。若答案是「几乎为零」轻量的 Agent 闭环往往更诚实。P.P.S. 我会继续把「页面 → 用例 → 脚本」这条路径写深关注系列可以不迷路。—— 完 ——