尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

系列09-Playwright UI 自动化平台怎么设计?MQ 调度与 Runner 执行架构

系列09-Playwright UI 自动化平台怎么设计?MQ 调度与 Runner 执行架构
📅 发布时间:2026/7/2 2:43:53

系列09-Playwright UI 自动化平台怎么设计?MQ 调度与 Runner 执行架构

本地用 Playwright 写脚本很顺;做成团队平台会撞上四类硬问题:

  1. 浏览器不能长期跑在 FastAPI worker 里(资源、隔离、Linux 无桌面)
  2. 多台 Windows/Mac 测试机如何认领任务、不串台
  3. 截图/视频存哪、报告如何三级汇总
  4. Runner 在公网如何安全连 MQ/Redis/MinIO

BrickCore 的答案:平台编排 + RabbitMQ 解耦 + Runner 执行 Playwright。本文基于 CE 可读源码讲架构;引擎WebEngine闭源,但MQ 协议与调度逻辑完全开源。


演示与源码

地址
功能演示http://43.142.83.156/showcase/ (「UI 录制」「UI Agent 生成步骤」等录屏;平台 admin / BrickCore123456)
开源仓库https://gitee.com/BanZhuanKeOrz/BrickCore
Runner 安装包https://gitee.com/BanZhuanKeOrz/BrickCore/releases

试跑页:http://43.142.83.156/showcase/demo-ui.html(demo / demo123)。AI 定位器自愈见系列06;本文聚焦调度与执行架构。


一、为什么 UI 执行必须外置

Web 内嵌浏览器后果
与 API/压测抢 CPUUI 任务饿死或拖垮接口回归
容器无 DISPLAYXvfb 稳定性差
用户步骤任意 URL安全隔离难
Web 水平扩容与浏览器进程无关,浪费

结论:调度在平台,执行在 Runner(桌面或专用机)。


二、平台 vs Runner 职责边界

平台(FastAPI + Vue)Runner(BrickCoreRunner)
步骤 JSON 编辑 / 录制入口✅❌
计划触发、权限、报告✅❌
Playwright 执行❌✅
截图/视频上传 MinIO存 URL✅ 上传
设备上线、心跳设备管理✅
AI 自愈 LLM 调用Backend API失败时 POST internal

三、四层数据模型

Case(steps JSON:keyword / method / params / desc) → Suite(用例顺序、stop_on_failure、setup SQL) → Task/Plan(多套件、定时 cron) → Execution(Plan / Suite / Case 三级执行记录)

步骤示例:

{"keyword":"点击元素","method":"click_ele","params":{"locator":"get_by_role=button,name=提交","timeout":20000},"desc":"点击提交按钮"}

支持条件分支、步骤片段、数据库断言(Backend 代跑 SQL,Runner 不持库密码)。


四、端到端时序

用户触发 UI 计划/套件/单用例 → 平台创建 *Execution 记录(status=running) → 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) → 平台汇总报告,可选邮件推送
┌──────────────┐ queue=device_id ┌─────────────────┐ │ 平台 FastAPI │ ───────────────► │ Runner Playwright│ │ MySQL 记录 │ ◄─────────────── │ MinIO 截图 │ └──────────────┘ HTTP 回写 └─────────────────┘ │ ▲ └──────── RabbitMQ / Redis ──────────┘

五、源码视角:发任务与队列模型

5.1 落库再发 MQ

# routers/ui/exec.pyasyncdefdispatch_to_device(env_payload,suite_payload,device_id):device=awaitDevice.get_or_none(id=device_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(queue=device_id,durable=True)self.channel.basic_publish(exchange='',routing_key=device_id,body=msg,properties=pika.BasicProperties(delivery_mode=2))
设计作用
routing_key=device_id每台 Runner 独占队列,不串台
durable=True+delivery_mode=2Broker 重启不丢队列/消息

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(...):runner=Runner(env_config,run_suite)result=runner.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/internal

connect 模式(routers/runner/connect.py):provision_device_middleware为每设备独立 MQ/Redis 账号,Runner不拿业务库密码。


八、RabbitMQ、Redis、MinIO 与部署

组件作用
RabbitMQ任务队列(25672)
Redis执行日志流、实时进度(26379)
MinIO截图/视频;公网 URL 需配MINIO_PUBLIC_ENDPOINT(9200)

Docker 全栈部署时,Runner 在容器外连公网中间件——安全组除 80 外须放行25672 / 26379 / 9200,否则任务永久排队。


九、Runner 生命周期(实操)

  1. 安装BrickCoreRunner(Release,注意 arm64/intel)
  2. 配置平台 URL,登录,上线→ 设备管理显示「在线」
  3. UI 模块运行套件/计划,选该device_id
  4. 解压路径勿含中文/空格

十、与 Selenium Grid / 纯脚本对比

纯 Playwright 脚本Selenium Grid平台 + Runner
维护载体Git 代码Grid 节点Web 步骤 JSON
非开发参与难中较易(录制/Agent)
报告自建部分三级落库 + HTML
水平扩展CI shard加 Grid加 Runner 机器
AI 自愈自建无平台 Backend+Runner

十一、CE 开源边界

Gitee CE 可读安装包闭源
backend调度、MQ、设备、报告runner/WebEngine引擎
frontend步骤编辑器Runner 打包脚本
MQ 消息结构、runner/connect—

全功能可体验;二次开发引擎需 Pro/商业授权或自研 Playwright 层。


十二、常见排错

现象处理
任务一直排队Runner 未上线;MQ 端口未开
设备离线心跳超时;重启 Runner
报告无截图MinIO 公网地址/9200 安全组
用例成功平台 runningMQ 跨线程 ack(见 §6)
发错机器检查选用的 device_id

十三、小结

  1. UI 平台 =编排 + 记录;Runner =Playwright 执行。
  2. MQ 按设备队列分发,易水平加机器。
  3. MinIO统一截图;connect模式隔离中间件账号。
  4. 架构可复用到任意「Web 测管 + 远程执行器」方案。

附录 A:源码文件索引

顺序文件关注点
1routers/ui/exec.pyExecution、dispatch_to_device
2core/mq_producer.pysend_test_task
3routers/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

相关新闻

  • [PHP内核探索]PHP中的哈希表
  • AI文生图技术解析与商业应用实战指南
  • 网络变压器行业的全球前十强品牌主要分为国际头部厂商和国产领先企业两大阵营。

最新新闻

  • AI落地五大硬核挑战与可验证工程解决方案
  • Day1 AI 到底淘汰谁?普通人最真实的生存真相
  • 分布式、服务化的ERP系统架构设计
  • 零基础转行数据分析师的21天实战路径
  • 量子优化算法GM-QAOA:高阶二进制优化新突破
  • Linux系统中的软连接和硬连接

日新闻

  • Python Playwright录制功能:从零到一构建自动化测试脚本
  • 如何用开源工具永久保存你心爱的小说:novel-downloader全攻略
  • In-Context Learning不是教知识,而是模式对齐:从5个示例到100个工业级样本的真相

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号