首页/新闻资讯/正文详情

MHY_Scanner单元测试与CI/CD实践:gtest五大测试套件全解读

发布时间:2026/9/25 2:06:48 来源:云帆数科 栏目:资讯中心
MHY_Scanner单元测试与CI/CD实践:gtest五大测试套件全解读
MHY_Scanner单元测试与CI/CD实践gtest五大测试套件全解读【免费下载链接】MHY_ScannerMHY扫码登录器支持从直播流抢码。项目地址: https://gitcode.com/gh_mirrors/mh/MHY_ScannerMHY_Scanner 是一款免费开源的米哈游游戏扫码登录工具支持从屏幕自动识别二维码和从直播流抢码登录。本文完整解读它基于 gtest 构建的 5 个单元测试套件、CMake 测试开关机制以及配套的 Windows CI/CD 自动化构建流程带你看看一个抢码工具是如何用单元测试保障识别质量的。为什么扫码工具需要一套单元测试MHY_Scanner 的核心链路是截屏/拉流 → 视频解码 → 识别二维码 → 解析登录链接 → 完成登录。这条链路上任何一环出问题工具就白抢了。因此项目在 tests/ 目录下维护了一套分层测试测试套件测试目标是否注册到 ctesttest_core网络请求、token 接口、UUID、URL 编解码✅test_gui四款游戏二维码图像的解码回归✅test_streamlinkB站/抖音/虎牙直播流地址获取❌手动调试test_videoFFmpeg 软解直播流 内存泄漏检查❌手动调试test_video_hwdxva2 GPU 硬解直播流❌手动调试开启测试编译一个 CMake 开关搞定单元测试默认不参与主程序构建由根目录 CMakeLists.txt 中的UNIT_TESTS选项控制option(UNIT_TESTS Unit Tests OFF) ... if(UNIT_TESTS) enable_testing() add_subdirectory(tests) endif()配置时加上-DUNIT_TESTSON即可编译出全部 5 个测试可执行文件。测试框架采用 GoogleTest 1.13.0头文件来自3rdparty/googletest-1.13.0/include并在 tests/CMakeLists.txt 中显式关闭了BUILD_GMOCK——纯断言用例用不上 mock保持依赖轻量。五大测试套件全解读1️⃣ test_core核心接口与工具函数test_core.cpp 共 4 个 TEST 用例覆盖三类地基能力APIHttpClient的GetRequest可用性、getStokenByGameToken换取 stoken 的返回结果登录流程的关键一步UUIDCreateUUID4()生成的 UUID 长度校验URLEncodeurlDecode(Hello%23World%22)应还原为Hello#World保证登录参数解析不出错。2️⃣ test_gui二维码识别回归测试核心中的核心test_gui.cpp 是质量保障的重头戏把四款米哈游游戏的真实登录二维码截图作为测试素材存放在 doc/image/用QRScanner::decodeSingle解码后断言结果与预期登录 URL逐字符相等绝区零doc/image/zzz_qrcode_1440.png崩坏3doc/image/bh3_qrcode_1080.png原神doc/image/hk4e_qrcode_1080.png崩坏星穹铁道doc/image/hkrpg_qrcode_1080.png这种真图 精确断言的写法能确保 OpenCV 升级或ScanModel/下 detect 模型调整后识别准确率不回退。3️⃣ test_streamlink直播流地址获取test_streamlink.cpp 分别实例化LiveDouyin、LiveBili、LiveHuya调用GetLiveStreamStatus()后打印GetLiveStreamLink()的结果——验证由 RID 换取 FLV 直播流地址这一抢码前置步骤在多平台下均可用。4️⃣ test_videoFFmpeg 软解 内存泄漏检查test_video.cpp 中的AvFFmpegDecoder以QThread形式运行avformat_open_input打开 FLV 流 → 找视频流 → 解码 →sws_scale缩放至 1280×720 BGR →cv::imshow预览。main里通过_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF)开启 CRT 内存泄漏检测见 test_video.cpp专门盯住 FFmpeg 上下文释放是否干净。5️⃣ test_video_hwdxva2 GPU 硬解test_video_hw.cpp 走硬件加速路线av_hwdevice_find_type_by_name(dxva2)定位 GPU 设备av_hwframe_transfer_data把解码帧从显存拷回内存后再显示。抢码对解码帧率极度敏感这个套件用于验证 GPU 解码路径在低延迟下稳定可用。用 ctest 运行测试工作目录的小心机tests/CMakeLists.txt 只为test_core和test_gui调用了add_test并做了两处关键配置WORKING_DIRECTORY指向src保证用例里../doc/image/xxx.png的相对路径正确为test_gui注入 Qt 6.2.3 的PATH环境变量否则链接 Qt 的测试程序找不到 DLL 无法启动。运行方式需在 tests 目录下已构建的 CTest 环境中ctest --output-on-failureCI/CD 构建工作流一条命令产出 Release 包 项目的持续集成入口是 .github/workflows/windows-build.yml触发条件为 push 到 main、打v*tag 或手动触发见 windows-build.yml。关键步骤装 Qt 6.8.0MSVC2022 64 位并开启缓存windows-build.ymlvcpkg 二进制缓存以vcpkg.json的哈希做缓存 key依赖没变就不重新编译第三方库CMake 配置指定x64-windows-static-mdtriplet 静态链接UNIT_TESTSOFF、DEVOFFwindows-build.yml打包发布并行编译 →cmake --install收集 Qt/FFmpeg DLL 与ScanModel/模型 → PowerShell 压成 ZIP 上传 artifact保留 5 天→ 打 tag 时自动创建 Releasewindows-build.yml。值得一提的是当前 CI 以快速产出可发布包为目标单元测试更多用于开发者本地回归若将test_core/test_gui接入流水线即可实现每次提交自动回归识别准确率这是很好的社区贡献方向。小结 五大套件各司其职test_core守接口、test_gui守识别准确率、test_streamlink守拉流、test_video/test_video_hw守解码稳定性-DUNIT_TESTSON一键开启测试构建ctest即可回归核心与识别用例CI/CD 用 vcpkg 缓存 静态链接把完整构建打包成 ZIP 并自动发版是 Windows 桌面工具很实用的实践范本。【免费下载链接】MHY_ScannerMHY扫码登录器支持从直播流抢码。项目地址: https://gitcode.com/gh_mirrors/mh/MHY_Scanner创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

BentoCloud 待机实例(Standby Instances)配置指南:为 BYOC 集群预置资源、应对流量尖峰
BentoCloud 待机实例(Standby Instances)配置指南:为 BYOC 集群预置资源、应对流量尖峰

模型推理服务人工智能后端大模型MLOpsLLMOps 【免费下载链接】BentoML The easiest way to serve AI apps and models - Build Model Inference APIs, Job queues, LLM apps, Multi-model pipelines, and more! 项目地址: https://gitcode.com/gh_mirrors/be/BentoM… · 2026/9/25 2:06:42

8种方式用CEL策略引擎精确控制AI智能体行为:OpenBot终极指南
8种方式用CEL策略引擎精确控制AI智能体行为:OpenBot终极指南

8种方式用CEL策略引擎精确控制AI智能体行为:OpenBot终极指南 【免费下载链接】OpenBot Open-source AI coworkers that each get a computer of their own: a browser, files and tools, with every action decided before it happens and recorded after. Bring an… · 2026/9/25 2:06:42

C#温室监控系统上位机开发:Modbus通信与源码实战
C#温室监控系统上位机开发:Modbus通信与源码实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:06:42

Conky 仓库开发指南:构建测试、代码规范与架构扩展实战
Conky 仓库开发指南:构建测试、代码规范与架构扩展实战

桌面应用系统监控 【免费下载链接】conky Light-weight system monitor for X, Wayland, and other things, too 项目地址: https://gitcode.com/gh_mirrors/co/conky 点击查看 免费下载 本篇指南以 Conky 仓库根目录的 AGENTS.md 为骨架,系统讲解贡献者… · 2026/9/25 2:35:18

ChatGPT Shortcut 浏览器扩展安装指南:把提示词库嵌进 ChatGPT、Gemini、Claude 侧边栏
ChatGPT Shortcut 浏览器扩展安装指南:把提示词库嵌进 ChatGPT、Gemini、Claude 侧边栏

AI 应用提示工程人工智能前端 【免费下载链接】ChatGPT-Shortcut Stop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor Русский 한국어 العربية हिन्दी ไทย | 别再从头写提示词&… · 2026/9/25 2:35:18

Windows底层网络开发:Npcap SDK抓包与BPF过滤实战
Windows底层网络开发:Npcap SDK抓包与BPF过滤实战

简介:本资源是面向Windows平台网络开发与安全分析工程师的NPCap SDK 1.01开发套件,专为实现无线WiFi数据包捕获、协议解析与流量监控提供底层支持。适用于网络诊断工具开发、入侵检测系统(IDS)原型构建及网络安全教学实验等场景&a… · 2026/9/25 2:35:18

SSM 图书管理系统
SSM 图书管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论🔥🔥&am… · 2026/9/25 2:35:06

使用 PaddleSpeech 将 CC-CEDICT 中英词典解析为 JSON 格式的完整指南
使用 PaddleSpeech 将 CC-CEDICT 中英词典解析为 JSON 格式的完整指南

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation … · 2026/9/25 2:34:53

华为AP4050DN FIT转FAT实战:从瘦AP到胖AP的完整刷机指南
华为AP4050DN FIT转FAT实战:从瘦AP到胖AP的完整刷机指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:34:47

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码