系列09-Playwright UI 自动化平台怎么设计?MQ 调度与 Runner 执行架构
系列09-Playwright UI 自动化平台怎么设计MQ 调度与 Runner 执行架构本地用 Playwright 写脚本很顺做成团队平台会撞上四类硬问题浏览器不能长期跑在 FastAPI worker 里资源、隔离、Linux 无桌面多台 Windows/Mac 测试机如何认领任务、不串台截图/视频存哪、报告如何三级汇总Runner 在公网如何安全连 MQ/Redis/MinIOBrickCore 的答案平台编排 RabbitMQ 解耦 Runner 执行 Playwright。本文基于 CE 可读源码讲架构引擎WebEngine闭源但MQ 协议与调度逻辑完全开源。演示与源码地址功能演示http://43.142.83.156/showcase/ 「UI 录制」「UI Agent 生成步骤」等录屏平台 admin / BrickCore123456开源仓库https://gitee.com/BanZhuanKeOrz/BrickCoreRunner 安装包https://gitee.com/BanZhuanKeOrz/BrickCore/releases试跑页http://43.142.83.156/showcase/demo-ui.htmldemo / demo123。AI 定位器自愈见系列06本文聚焦调度与执行架构。一、为什么 UI 执行必须外置Web 内嵌浏览器后果与 API/压测抢 CPUUI 任务饿死或拖垮接口回归容器无 DISPLAYXvfb 稳定性差用户步骤任意 URL安全隔离难Web 水平扩容与浏览器进程无关浪费结论调度在平台执行在 Runner桌面或专用机。二、平台 vs Runner 职责边界平台FastAPI VueRunnerBrickCoreRunner步骤 JSON 编辑 / 录制入口✅❌计划触发、权限、报告✅❌Playwright 执行❌✅截图/视频上传 MinIO存 URL✅ 上传设备上线、心跳设备管理✅AI 自愈 LLM 调用Backend API失败时 POST internal三、四层数据模型Casesteps JSONkeyword / method / params / desc → Suite用例顺序、stop_on_failure、setup SQL → Task/Plan多套件、定时 cron → ExecutionPlan / Suite / Case 三级执行记录步骤示例{keyword:点击元素,method:click_ele,params:{locator:get_by_rolebutton,name提交,timeout:20000},desc:点击提交按钮}支持条件分支、步骤片段、数据库断言Backend 代跑 SQLRunner 不持库密码。四、端到端时序用户触发 UI 计划/套件/单用例 → 平台创建 *Execution 记录statusrunning → resolve_locator_heal、headless 等写入 env_config → dispatch_to_device(device_id) — 校验设备「在线」且含 web 引擎 → MQ send_test_task(env_config, run_suite, device_id) → Runner 消费 → Playwright 逐步执行 → HTTP post_results截图 URL、步骤日志、locator_healed → 平台汇总报告可选邮件推送┌──────────────┐ queuedevice_id ┌─────────────────┐ │ 平台 FastAPI │ ───────────────► │ Runner Playwright│ │ MySQL 记录 │ ◄─────────────── │ MinIO 截图 │ └──────────────┘ HTTP 回写 └─────────────────┘ │ ▲ └──────── RabbitMQ / Redis ──────────┘五、源码视角发任务与队列模型5.1 落库再发 MQ# routers/ui/exec.pyasyncdefdispatch_to_device(env_payload,suite_payload,device_id):deviceawaitDevice.get_or_none(iddevice_id)ifnotdeviceordevice.status!在线:returnFalsemq.send_test_task(env_payload,suite_payload,device_id)先写 Execution 再发消息Runner 回写时有关联 ID设备离线则不分发避免消息进无人队列。5.2 队列名 device_id# core/mq_producer.pyself.channel.queue_declare(queuedevice_id,durableTrue)self.channel.basic_publish(exchange,routing_keydevice_id,bodymsg,propertiespika.BasicProperties(delivery_mode2))设计作用routing_keydevice_id每台 Runner 独占队列不串台durableTruedelivery_mode2Broker 重启不丢队列/消息5.3 MQ 消息体自建 Runner 可对照{env_config:{base_url:https://demo.example.com,headless:true,ai_heal_enabled:true,project_id:1,environment_id:2},run_suite:{suite_id:12,case_id:101,cases:[{case_id:101,steps:[...]}]}}六、Runner 消费与经典踩坑runner/tools/mq_consumer.py# IO 线程收到消息 → 尽快 basic_ack# Playwright 在工作线程 execute → 禁止在工作线程 ackdef_process_message(...):runnerRunner(env_config,run_suite)resultrunner.run()self._save_result(run_suite,result)现象用例实际成功平台一直running日志MQ 连接丢失。原因PikaBlockingConnection跨线程 ack。处理CE 安装包已在 IO 线程 ack自建 Runner 须遵守同样约束。失败步骤若开AI 自愈basecase.py捕获异常 →try_heal_step→ 重试本步详见系列06。七、结果回写与安全模式认证场景桌面客户端 connectX-Runner-Token测试同学本机 Runner演示机 / 无头X-Internal-Token/runner/results/internalconnect 模式routers/runner/connect.pyprovision_device_middleware为每设备独立 MQ/Redis 账号Runner不拿业务库密码。八、RabbitMQ、Redis、MinIO 与部署组件作用RabbitMQ任务队列25672Redis执行日志流、实时进度26379MinIO截图/视频公网 URL 需配MINIO_PUBLIC_ENDPOINT9200Docker 全栈部署时Runner 在容器外连公网中间件——安全组除 80 外须放行25672 / 26379 / 9200否则任务永久排队。九、Runner 生命周期实操安装BrickCoreRunnerRelease注意 arm64/intel配置平台 URL登录上线→ 设备管理显示「在线」UI 模块运行套件/计划选该device_id解压路径勿含中文/空格十、与 Selenium Grid / 纯脚本对比纯 Playwright 脚本Selenium Grid平台 Runner维护载体Git 代码Grid 节点Web 步骤 JSON非开发参与难中较易录制/Agent报告自建部分三级落库 HTML水平扩展CI shard加 Grid加 Runner 机器AI 自愈自建无平台 BackendRunner十一、CE 开源边界Gitee CE 可读安装包闭源backend调度、MQ、设备、报告runner/WebEngine引擎frontend步骤编辑器Runner 打包脚本MQ 消息结构、runner/connect—全功能可体验二次开发引擎需 Pro/商业授权或自研 Playwright 层。十二、常见排错现象处理任务一直排队Runner 未上线MQ 端口未开设备离线心跳超时重启 Runner报告无截图MinIO 公网地址/9200 安全组用例成功平台 runningMQ 跨线程 ack见 §6发错机器检查选用的 device_id十三、小结UI 平台 编排 记录Runner Playwright 执行。MQ 按设备队列分发易水平加机器。MinIO统一截图connect模式隔离中间件账号。架构可复用到任意「Web 测管 远程执行器」方案。附录 A源码文件索引顺序文件关注点1routers/ui/exec.pyExecution、dispatch_to_device2core/mq_producer.pysend_test_task3routers/runner/connect.pyconnect bundle、中间件隔离4core/runner_results.py结果落库、通知5runner/tools/mq_consumer.py消费、ack 策略6runner/tools/runner_api.pypost_results支持与交流演示http://43.142.83.156/showcase/ · 源码https://gitee.com/BanZhuanKeOrz/BrickCore觉得有用欢迎Star⭐问题评论区留言或 Gitee Issues

相关新闻

SolidWorks_装配体设计4_装配体特征应用

SolidWorks_装配体设计4_装配体特征应用

装配体特征应用:跨零件拉伸切除与孔系列实战指南 摘要 在三维CAD设计中,装配体特征(Assembly Features)是一种强大的高级建模技术,它允许用户在装配层级直接创建跨越多个零件的设计特征,如拉伸切除、孔系列…

2026/7/2 2:28:31阅读更多 →
本地生活 GEO 优化实战:实体锚点、信源矩阵与场景化知识库的构建逻辑

本地生活 GEO 优化实战:实体锚点、信源矩阵与场景化知识库的构建逻辑

本地生活 GEO 优化实战:实体锚点、信源矩阵与场景化知识库的构建逻辑摘要:大语言模型正在改写本地生活服务的流量分发规则——用户不再打开美团挨个刷评价,而是直接问 AI "附近哪家火锅好吃"。这对本地商家意味着什么?本…

2026/7/2 2:28:31阅读更多 →
utpasswd命令详解:10个实用参数让密码管理更高效

utpasswd命令详解:10个实用参数让密码管理更高效

utpasswd命令详解:10个实用参数让密码管理更高效 【免费下载链接】utpasswd utpasswd is a refactoring of passwd. 项目地址: https://gitcode.com/openeuler/utpasswd 前往项目官网免费下载:https://ar.openeuler.org/ar/ utpasswd是openEuler…

2026/7/2 2:23:31阅读更多 →
2026年设计行业必备!一对一兴弘设计培训班究竟有何独特魅力?

2026年设计行业必备!一对一兴弘设计培训班究竟有何独特魅力?

在消费升级的当下,室内设计行业迎来了前所未有的发展机遇,优秀的室内设计师成为市场上炙手可热的人才,薪资待遇和职业发展空间都十分可观。然而,对于想要踏入这个行业的人来说,学习之路却充满了挑战。 很多人选择自学…

2026/7/2 3:48:42阅读更多 →
Codex 接入 GPT API 中转站:config.toml 与 auth.json 配置详解

Codex 接入 GPT API 中转站:config.toml 与 auth.json 配置详解

KingFlow API Key 管理页面 KingFlow 文档页面 Codex 接入 GPT API 中转站时,最容易出错的地方通常不是模型能力,而是配置文件。尤其是 config.toml 和 auth.json,一个负责模型供应商配置,一个负责密钥或认证信息。如果字段写错&…

2026/7/2 3:48:42阅读更多 →
AI模型门控发布机制与安全治理实践

AI模型门控发布机制与安全治理实践

我无法处理该标题所指向的内容。原因如下:项目标题中包含“TAI #200”“Anthropic’s Mythos”等明确指向特定机构(Anthropic)内部技术演进与未公开能力的表述,属于高度受限的前沿AI研发动态范畴;“Gated Release”&am…

2026/7/2 3:48:42阅读更多 →
易元 AI 深度解析:一站式 AI 电商素材与内容生产全链路工具,赋能信息流广告批量制作

易元 AI 深度解析:一站式 AI 电商素材与内容生产全链路工具,赋能信息流广告批量制作

当下电商行业已全面进入内容工业化竞争阶段,无论是传统货架电商还是短视频信息流赛道,商家都普遍面临素材产能不足、素材管理混乱、多渠道内容制作割裂的核心痛点。多数商家需要同时采购素材生成、视频剪辑、广告脚本、素材存储多款工具,跨平…

2026/7/2 3:48:42阅读更多 →
AS717芯片规格 8K@60Hz外围少 AS717电路图参考

AS717芯片规格 8K@60Hz外围少 AS717电路图参考

AS717是Type-C转DP设计的“性价比之王”,单芯片架构大幅降低设计门槛与成本,8K无损传输满足高清需求,新手也能快速上手设计量产。 AS717设计参考电路及标准参考:1. 供电设计:优先从Type-C接口取电,串联10Ω…

2026/7/2 3:48:42阅读更多 →
基于PLC的糖果包装机控制系统设计(仿真+文档+电路图)

基于PLC的糖果包装机控制系统设计(仿真+文档+电路图)

博主介绍:✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优…

2026/7/2 3:43:42阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/1 5:19:01阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →