三创大赛网站建设晋中公司做网站
2026/2/13 22:38:59 网站建设 项目流程
三创大赛网站建设,晋中公司做网站,可视化的网站开发工具,云南公司网站制作Heygem自动化测试框架搭建#xff1a;确保每次更新不破坏核心功能 1. 引言 1.1 项目背景与业务需求 HeyGem 数字人视频生成系统是一款基于 AI 技术的音视频合成工具#xff0c;支持将音频与人物视频结合#xff0c;生成口型同步的高质量数字人视频。该系统已广泛应用于批…Heygem自动化测试框架搭建确保每次更新不破坏核心功能1. 引言1.1 项目背景与业务需求HeyGem 数字人视频生成系统是一款基于 AI 技术的音视频合成工具支持将音频与人物视频结合生成口型同步的高质量数字人视频。该系统已广泛应用于批量内容创作场景其 WebUI 版本由开发者“科哥”进行二次开发并优化为批量处理模式显著提升了多任务处理效率。随着系统的持续迭代和功能扩展手动验证核心流程如音频上传、视频合成、结果导出等的成本急剧上升。任何一次代码提交都可能无意中引入回归问题例如音频无法正确加载视频预览异常批量生成任务卡顿或失败下载包缺失文件为保障系统稳定性亟需构建一套可重复执行、覆盖关键路径、易于维护的自动化测试框架。1.2 自动化测试的价值定位本文将围绕 HeyGem 系统的实际使用场景设计并实现一个端到端End-to-End, E2E自动化测试解决方案目标是✅ 每次代码更新后自动运行核心功能检测✅ 快速发现界面交互或后端服务异常✅ 减少人工回归测试时间成本✅ 提供可追溯的测试报告用于质量分析最终实现“提交即测、失败即知”的持续集成闭环。2. 技术选型与架构设计2.1 测试类型选择为什么采用 E2E 而非单元测试尽管单元测试能有效验证模型推理逻辑但 HeyGem 的主要交互集中在前端 WebUI 层且用户操作路径复杂拖拽上传、分页管理、打包下载等因此更适配端到端测试来模拟真实用户行为。测试类型适用层级HeyGem 适配性单元测试函数/模块低前端为主接口测试API 调用中部分可用E2E 测试用户界面高推荐方案我们选择Playwright Python作为核心技术栈理由如下支持多浏览器自动化Chromium、Firefox、WebKit原生支持文件上传、拖放操作关键强大的等待机制避免因异步加载导致误判与 pytest 深度集成便于组织测试用例可生成视频录制和截图便于故障排查2.2 整体测试架构设计------------------ --------------------- | Git 代码仓库 | -- | CI/CD Pipeline | ------------------ -------------------- | ---------------v------------------ | Playwright Test Runner (Python) | | - 启动本地服务 | | - 执行 UI 操作 | | - 断言输出结果 | ---------------------------------- | ---------------v------------------ | 测试资源目录 | | - test_audio.mp3 | | - test_video.mp4 | | - expected_output_checksums.txt | ------------------------------------测试流程包括 1. 拉取最新代码 2. 启动start_app.sh服务 3. 使用 Playwright 控制浏览器完成全流程操作 4. 验证输出文件完整性 5. 清理环境并生成报告3. 核心测试用例实现3.1 环境准备与依赖安装首先配置 Python 虚拟环境并安装必要依赖python -m venv .venv source .venv/bin/activate pip install playwright pytest pytest-html playwright install chromium创建项目结构tests/ ├── conftest.py # 全局 fixture ├── test_batch_mode.py # 批量模式测试 ├── test_single_mode.py # 单个模式测试 └── utils/ └── helpers.py # 工具函数 resources/ ├── test_audio.mp3 └── test_video.mp43.2 启动服务与页面初始化在conftest.py中定义共享 fixture# conftest.py import subprocess import time import pytest from playwright.sync_api import sync_playwright pytest.fixture(scopesession) def browser(): with sync_playwright() as p: browser p.chromium.launch(headlessTrue) yield browser browser.close() pytest.fixture(scopesession) def server(): # 启动应用服务 process subprocess.Popen([bash, start_app.sh]) time.sleep(10) # 等待服务启动 yield process.terminate()3.3 批量处理模式全流程测试# test_batch_mode.py import os from playwright.sync_api import expect def test_batch_processing_e2e(browser, server): page browser.new_page() # 访问本地服务 page.goto(http://localhost:7860) expect(page.locator(h1)).to_contain_text(HeyGem) # 步骤1上传音频文件 audio_upload page.locator(input[typefile]).first audio_upload.set_input_files(../resources/test_audio.mp3) page.wait_for_timeout(2000) # 预览播放按钮应出现 play_button page.locator(button:has-text(▶)) expect(play_button).to_be_visible() # 步骤2添加视频文件模拟拖放 drop_zone page.locator(.upload-video-area) video_path os.path.abspath(../resources/test_video.mp4) with page.expect_file_chooser() as fc_info: drop_zone.click() file_chooser fc_info.value file_chooser.set_files(video_path) page.wait_for_timeout(3000) # 视频应在左侧列表中显示 video_item page.locator(li.video-item).first expect(video_item).to_have_count(1) # 步骤3开始批量生成 start_btn page.locator(button:has-text(开始批量生成)) start_btn.click() # 监控进度条至完成 progress_bar page.locator(.progress-bar) expect(progress_bar).to_have_attribute(aria-valuenow, 100, timeout120000) # 步骤4检查生成结果 result_items page.locator(.result-item) expect(result_items).to_have_count(1) # 步骤5触发一键打包下载 zip_btn page.locator(text 一键打包下载) zip_btn.click() # 监听下载事件 with page.expect_download() as download_info: page.locator(text点击打包后下载).click() download download_info.value # 保存到本地 download.save_as(./outputs/latest_batch.zip) assert os.path.exists(./outputs/latest_batch.zip) assert os.path.getsize(./outputs/latest_batch.zip) 0 page.close()关键点说明 - 使用expect_file_chooser模拟文件选择器 -wait_for_timeout避免因网络延迟导致断言失败 - 下载监听确保 ZIP 包成功生成3.4 单个处理模式测试简略版# test_single_mode.py def test_single_mode_processing(browser, server): page browser.new_page() page.goto(http://localhost:7860) # 切换到单个模式标签 page.locator(button:has-text(单个处理模式)).click() # 分别上传音频和视频 audio_input page.locator(input[typefile]).nth(1) video_input page.locator(input[typefile]).nth(2) audio_input.set_input_files(../resources/test_audio.mp3) video_input.set_input_files(../resources/test_video.mp4) page.wait_for_timeout(3000) # 开始生成 page.locator(button:has-text(开始生成)).click() expect(page.locator(.result-video)).to_be_visible(timeout90000) # 结果视频可播放 video_player page.locator(video) expect(video_player).to_have_count(1)4. 测试优化与工程化建议4.1 失败重试与超时控制为提高测试稳定性添加重试机制# 在 pytest.ini 中配置 [tool:pytest] addopts --reruns 2 --timeout300同时设置全局等待策略page.set_default_timeout(30000) # 全局超时 page.set_default_navigation_timeout(60000)4.2 日志与证据留存启用 Playwright 的跟踪功能便于调试context browser.new_context() context.tracing.start(screenshotsTrue, snapshotsTrue) # ...执行操作... context.tracing.stop(pathtrace.zip)结合日志文件监控# 实时捕获错误日志 tail -f /root/workspace/运行实时日志.log | grep -i error\|fail4.3 集成 CI/CD 流程在.github/workflows/test.yml中配置 GitHub Actionsname: Run E2E Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest container: nvidia/cuda:12.1.1-runtime-ubuntu22.04 services: docker: image: docker:dind privileged: true steps: - uses: actions/checkoutv4 - name: Set up Python uses: actions/setup-pythonv4 with: python-version: 3.10 - name: Install dependencies run: | pip install playwright pytest playwright install chromium - name: Start App Run Tests run: | bash start_app.sh sleep 60 python -m pytest tests/ --htmlreport.html --self-contained-html - name: Upload Report uses: actions/upload-artifactv3 with: path: report.html⚠️ 注意需确保运行环境具备 GPU 支持以加速模型推理。5. 总结5.1 核心价值总结通过构建基于 Playwright 的自动化测试框架HeyGem 系统实现了对核心功能的全面覆盖特别是在以下方面取得显著成效稳定性保障每次代码变更均可自动验证批量生成、文件上传、结果下载等关键路径效率提升原本需要 20 分钟的人工测试缩短至 5 分钟内自动完成问题可追溯配合日志与截图快速定位 UI 或服务异常原因团队协作增强新成员可通过测试用例快速理解系统行为5.2 最佳实践建议保持测试数据轻量化使用短音频10s和小分辨率视频480p加快执行速度定期清理 outputs 目录防止磁盘溢出影响后续测试标记 flaky 测试对偶发失败用例添加pytest.mark.flaky(reruns3)结合接口测试补充覆盖对/api/generate等接口做参数边界测试获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询