E2E UI 监控系统框架:Python + Selenium + Docker + GitHub Actions + Prometheus
本文将手把手教你从零开始搭建一个端到端E2EUI 监控系统。即使你没有相关经验也能跟着步骤一步步完成 前置要求在开始之前请确保你的电脑已安装以下工具Python 3.8- 编程语言环境Docker- 容器化运行环境Git- 代码版本管理Chrome 浏览器- 用于 UI 自动化测试验证安装在终端运行python --version、docker --version、git --version确认是否安装成功。Step 1: 创建项目目录结构首先创建项目的文件夹结构# 创建项目根目录mkdire2e-ui-monitorcde2e-ui-monitor# 创建源代码目录mkdirsrcmkdirdeploymkdirscreenshot# 用于保存失败截图1.1 创建主程序文件创建src/ui-monitor.py文件fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.supportimportexpected_conditionsfromselenium.webdriver.support.waitimportWebDriverWaitfromselenium.webdriver.chrome.optionsimportOptionsimporttimeimportosimportsysimportlogging# 设置日志logging.basicConfig(levellogging.INFO,format%(asctime)s - %(levelname)s: %(message)s)defsetup_driver():配置 Chrome WebDriver chrome_optionsOptions()chrome_options.add_argument(--no-sandbox)chrome_options.add_argument(--disable-dev-shm-usage)chrome_options.add_argument(--headless)# 无头模式不显示浏览器窗口chrome_options.add_argument(--disable-gpu)chrome_options.add_argument(--window-size1280,720)try:driverwebdriver.Chrome(optionschrome_options)driver.implicitly_wait(30)returndriverexceptExceptionase:logging.error(f启动浏览器失败:{e})returnNonedeflogin_test(driver,url,username,password):测试登录功能try:logging.info(开始测试登录...)driver.get(url)# 等待输入框出现并输入用户名WebDriverWait(driver,10).until(expected_conditions.presence_of_element_located((By.TAG_NAME,input)))driver.find_elements(By.TAG_NAME,input)[0].send_keys(username)driver.find_elements(By.TAG_NAME,button)[0].click()# 输入密码WebDriverWait(driver,10).until(expected_conditions.presence_of_element_located((By.ID,password)))driver.find_element(By.ID,password).send_keys(password)driver.find_elements(By.TAG_NAME,button)[0].click()logging.info(登录测试成功)returnTrueexceptExceptionase:logging.error(f登录测试失败:{e})# 保存失败截图driver.save_screenshot(./screenshot/login_fail.png)returnFalsedefmain():# 从环境变量获取配置test_urlos.getenv(TEST_URL,https://example.com/login)test_usernameos.getenv(TEST_USERNAME,testuser)test_passwordos.getenv(TEST_PASSWORD,testpass)driversetup_driver()ifnotdriver:sys.exit(1)successlogin_test(driver,test_url,test_username,test_password)driver.quit()ifsuccess:print(✅ UI 监控测试通过)sys.exit(0)else:print(❌ UI 监控测试失败)sys.exit(1)if__name____main__:main()1.2 创建依赖文件创建src/requirements.txtselenium4.15.0 timeout-decorator0.5.0 PyYAML6.0.1Step 2: 配置 Docker 容器2.1 创建 Dockerfile在项目根目录创建DockerfileFROM python:3.9-slim # 安装必要的系统依赖 RUN apt-get update apt-get install -y \ wget \ gnupg \ curl \ rm -rf /var/lib/apt/lists/* # 安装 Chrome 浏览器简化版本 RUN wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \ apt-get install -y ./google-chrome-stable_current_amd64.deb \ rm google-chrome-stable_current_amd64.deb # 安装 ChromeDriver RUN CHROMEDRIVER_VERSIONcurl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE \ wget -N http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip \ unzip chromedriver_linux64.zip \ chmod x chromedriver \ mv chromedriver /usr/local/bin/ # 设置工作目录 WORKDIR /app # 复制依赖文件并安装 Python 包 COPY src/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制源代码 COPY src/ . # 创建截图目录 RUN mkdir -p screenshot # 设置环境变量 ENV PYTHONUNBUFFERED1 # 默认执行命令 CMD [python, ui-monitor.py]2.2 构建和测试 Docker 镜像# 构建镜像dockerbuild-te2e-ui-monitor.# 本地测试替换为你的测试网站dockerrun-eTEST_URLhttps://httpbin.org/forms/post\-eTEST_USERNAMEtest\-eTEST_PASSWORDtest123\e2e-ui-monitor验证成功如果看到 “✅ UI 监控测试通过” 说明 Docker 容器工作正常。Step 3: 配置 GitHub Actions 自动化3.1 创建 GitHub Actions 工作流在项目根目录创建.github/workflows/monitor.ymlname:E2E UI Monitoron:schedule:# 每30分钟执行一次-cron:*/30 * * * *workflow_dispatch:# 允许手动触发jobs:monitor:runs-on:ubuntu-lateststeps:-name:Checkout codeuses:actions/checkoutv3-name:Set up Docker Buildxuses:docker/setup-buildx-actionv2-name:Build and run monitorrun:|docker build -t e2e-ui-monitor . docker run -e TEST_URL${{ secrets.TEST_URL }} \ -e TEST_USERNAME${{ secrets.TEST_USERNAME }} \ -e TEST_PASSWORD${{ secrets.TEST_PASSWORD }} \ e2e-ui-monitor3.2 配置 GitHub Secrets在 GitHub 仓库设置中添加以下 SecretsTEST_URL- 要监控的网站 URLTEST_USERNAME- 测试用户名TEST_PASSWORD- 测试密码安全提示永远不要在代码中硬编码敏感信息使用 GitHub Secrets 存储。Step 4: 集成 Prometheus 监控假设你的环境中已经部署了 Prometheus 和 Pushgateway我们只需要配置指标上报即可。4.1 修改主程序添加指标上报更新src/ui-monitor.py在main()函数末尾添加importsubprocessdefpush_metrics_to_prometheus(success,regiondefault):将监控结果推送到 Prometheustry:statussuccessifsuccesselsefailuremetric_namefui_monitor_status{{region\{region}\,status\{status}\}}metric_value1# 推送指标到 Prometheus Pushgateway# 注意请根据你的实际 Pushgateway 地址修改 URLpush_commandfecho {metric_name}{metric_value} | curl --data-binary - http://prometheus-pushgateway:9091/metrics/job/ui-monitorsubprocess.run(push_command,shellTrue,checkTrue)logging.info(指标推送成功)exceptExceptionase:logging.error(f指标推送失败:{e})然后在main()函数中调用# 在测试完成后添加push_metrics_to_prometheus(success,os.getenv(REGION,default))配置说明请将http://prometheus-pushgateway:9091替换为你环境中实际的 Pushgateway 地址。Step 5: 添加自动告警功能5.1 创建邮件通知脚本创建src/email_sender.pyimportsmtplibfromemail.mime.textimportMIMETextfromemail.mime.multipartimportMIMEMultipartimportosdefsend_alert_email(subject,body):发送告警邮件smtp_serveros.getenv(SMTP_SERVER,your-smtp-server.com)smtp_portint(os.getenv(SMTP_PORT,587))sender_emailos.getenv(SENDER_EMAIL)sender_passwordos.getenv(SENDER_PASSWORD)recipient_emailos.getenv(RECIPIENT_EMAIL)ifnotall([sender_email,sender_password,recipient_email]):print(邮箱配置不完整跳过邮件发送)returnmsgMIMEMultipart()msg[From]sender_email msg[To]recipient_email msg[Subject]subject msg.attach(MIMEText(body,plain))try:serversmtplib.SMTP(smtp_server,smtp_port)server.starttls()server.login(sender_email,sender_password)textmsg.as_string()server.sendmail(sender_email,recipient_email,text)server.quit()print(告警邮件发送成功)exceptExceptionase:print(f邮件发送失败:{e})5.2 在主程序中集成告警在src/ui-monitor.py的main()函数中添加fromemail_senderimportsend_alert_email# 在测试失败时发送告警ifnotsuccess:send_alert_email(subject UI 监控告警,bodyfUI 监控测试失败\n时间:{time.strftime(%Y-%m-%d %H:%M:%S)}\nURL:{test_url})Step 6: 验证完整流程现在让我们验证整个系统是否正常工作6.1 本地测试# 1. 构建镜像dockerbuild-te2e-ui-monitor.# 2. 运行测试dockerrun-eTEST_URLhttps://httpbin.org/forms/post\-eTEST_USERNAMEtest\-eTEST_PASSWORDtest123\-eREGIONtest\e2e-ui-monitor6.2 GitHub Actions 测试提交代码到 GitHub在 Actions 页面手动触发工作流查看执行日志确认是否成功6.3 Prometheus 验证打开你的 Prometheus Web UI查询ui_monitor_status指标确认能看到监控数据 常见问题解决问题1: Chrome 启动失败解决方案: 确保 Dockerfile 中正确安装了 Chrome 和 ChromeDriver问题2: 元素找不到解决方案: 增加等待时间或使用更稳定的定位方式如 ID、CSS 选择器问题3: GitHub Actions 超时解决方案: 在 workflow 中添加timeout-minutes: 10问题4: 邮件发送失败解决方案: 检查 SMTP 配置根据你的邮件服务商调整设置问题5: Prometheus 指标推送失败解决方案: 确认 Pushgateway 地址配置正确网络连通性正常 扩展建议添加更多测试场景注册、搜索、导航等功能支持多浏览器Firefox、Edge 等集成多种通知方式邮件、Slack、企业微信等添加重试机制网络波动时自动重试生成详细报告包含截图、日志、性能数据总结通过以上 6 个步骤你已经成功搭建了一个完整的 E2E UI 监控系统这个系统可以✅ 自动化测试网站 UI 功能✅ 定时执行监控任务✅ 实时上报监控指标到现有 Prometheus✅ 自动发送告警通知✅ 可视化监控数据

相关新闻

C# 温故而知新:Stream篇(五)

C# 温故而知新:Stream篇(五)

俗涯也岩在 AI 编程工具从 “代码补全助手” 向 “全流程开发伙伴” 演进的关键阶段,生成效果的竞争已不再局限于单一代码片段的正确性,而是延伸至工程化落地、行业合规适配与团队协作效率的多维战场。本文结合腾讯云官方数据与行业实践,从技…

2026/7/6 21:35:21 阅读更多 →
计算机毕业设计springboot停车场后台管理系统 基于SpringBoot的智慧停车服务平台设计与实现 基于SpringBoot的车位共享与收费管理系统开发

计算机毕业设计springboot停车场后台管理系统 基于SpringBoot的智慧停车服务平台设计与实现 基于SpringBoot的车位共享与收费管理系统开发

计算机毕业设计springboot停车场后台管理系统9wcpzc49(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着城市化进程加速和机动车保有量激增,"停车难"已成…

2026/7/7 4:48:53 阅读更多 →
How ASP.NET MVC Works?[持续更新中…]

How ASP.NET MVC Works?[持续更新中…]

阅轿梦荷?? WatchAlert 是什么? ?? 专注可观测性与稳定性,为运维提效降本 WatchAlert 是一款专为云原生环境设计 的轻量级监控告警引擎,聚焦于可观测性(Metrics、Logs、Traces)与系统稳定性保障,提供从…

2026/7/7 13:27:45 阅读更多 →

最新新闻

【爱马仕智能体】Hermes 自动化工具落地教程,轻量化安装包适配普通家用电脑(含安装包)

【爱马仕智能体】Hermes 自动化工具落地教程,轻量化安装包适配普通家用电脑(含安装包)

Windows 搭建 Hermes 环境步骤繁琐?轻量化整合包快速完成本地运行 不少使用者想要体验 Hermes 智能代理工具,但手动部署环节总会被环境配置问题卡住。 单独下载各类依赖组件、调试系统运行环境、修正文件路径异常,同时还会遇到命令执行失败、…

2026/7/7 14:12:51 阅读更多 →
高压隔离设计:ISOM8710光耦仿真器与MK60DN512VLQ10 MCU应用指南

高压隔离设计:ISOM8710光耦仿真器与MK60DN512VLQ10 MCU应用指南

1. 高压隔离设计中的关键器件选型在工业控制、电力电子和医疗设备等高压应用场景中,安全隔离是系统设计的首要考虑因素。ISOM8710作为TI推出的高速光耦仿真器,与NXP的MK60DN512VLQ10微控制器组合,能够构建可靠的高压隔离解决方案。这套组合特…

2026/7/7 14:12:51 阅读更多 →
SIP协议DoS攻击原理与防御:从InviteFlood实战到纵深防护体系

SIP协议DoS攻击原理与防御:从InviteFlood实战到纵深防护体系

1. 项目概述:从攻击视角审视SIP协议安全最近在复现和测试一些经典的协议层攻击手法,inviteflood这个工具反复被提及。它虽然年头不短,但因其针对的是SIP(Session Initiation Protocol,会话初始协议)这一广泛…

2026/7/7 14:10:50 阅读更多 →
LVI-SAM 多传感器标定实战:3步完成相机-激光雷达-IMU外参对齐

LVI-SAM 多传感器标定实战:3步完成相机-激光雷达-IMU外参对齐

LVI-SAM 多传感器标定实战:3步完成相机-激光雷达-IMU外参对齐在机器人自主导航与SLAM系统中,多传感器融合已成为提升系统鲁棒性和精度的关键手段。LVI-SAM作为激光-视觉-惯性紧耦合SLAM框架的代表,其性能高度依赖于各传感器外参的准确性。本文…

2026/7/7 14:10:50 阅读更多 →
MC6470与MK24FN1M0VDC12的硬件协同与6DOF数据融合实战

MC6470与MK24FN1M0VDC12的硬件协同与6DOF数据融合实战

1. MC6470与MK24FN1M0VDC12的硬件协同架构解析 MC6470作为一款6DOF(六自由度)惯性测量单元(IMU),其核心价值在于集成了三轴加速度计和三轴陀螺仪,能够实时捕捉物体的线性加速度和角速度变化。在实际项目中,我通常将其采…

2026/7/7 14:08:49 阅读更多 →
SPT-AKI存档编辑器终极指南:重新定义你的逃离塔科夫离线体验

SPT-AKI存档编辑器终极指南:重新定义你的逃离塔科夫离线体验

SPT-AKI存档编辑器终极指南:重新定义你的逃离塔科夫离线体验 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/gh_mir…

2026/7/7 14:08:49 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻