新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/25 2:06:51来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

eslint-plugin-react 规则详解:react/jsx-props-no-spread-multi —— 禁止重复展开同一标识符 2026/9/25 6:05:14

eslint-plugin-react 规则详解:react/jsx-props-no-spread-multi —— 禁止重复展开同一标识符

开发工具代码质量静态分析 【免费下载链接】eslint-plugin-react React-specific linting rules for ESLint 项目地址: https://gitcode.com/gh_mirrors/es/eslint-plugin-react 点击查看 免费下载 📝 本文是 eslint-plugin-react 插件中 react/jsx-pro…

阅读更多 →
Dart Analysis Server 插件快速修复(Quick Fix)编写指南:基于 analysis_server_plugin 包 2026/9/25 6:05:14

Dart Analysis Server 插件快速修复(Quick Fix)编写指南:基于 analysis_server_plugin 包

编程语言编译器语言运行时标准库开发工具 【免费下载链接】sdk The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more. 项目地址: https://gitcode.com/gh_mirrors/sdk1/sdk 点击查看 免费下载 本指南面向需要为 Dart 分析…

阅读更多 →
深入解析 @microsoft/fast-colors 的 Histogram.significantBits 属性:直方图降位量化与内存权衡 2026/9/25 6:05:14

深入解析 @microsoft/fast-colors 的 Histogram.significantBits 属性:直方图降位量化与内存权衡

前端UI组件 【免费下载链接】fast The adaptive interface system for modern web experiences. 项目地址: https://gitcode.com/gh_mirrors/fa/fast 点击查看 免费下载 导读 Histogram.significantBits 是 microsoft/fast-colors 颜色量化管线中控制颜色精度与内…

阅读更多 →
ESPnet egs2 说话人日志示例的 Kaldi 依赖解析:mini_librispeech/diar1 与 `wav-to-duration` 2026/9/25 6:05:14

ESPnet egs2 说话人日志示例的 Kaldi 依赖解析:mini_librispeech/diar1 与 `wav-to-duration`

人工智能语音音频深度学习NLP 【免费下载链接】espnet End-to-End Speech Processing Toolkit 项目地址: https://gitcode.com/gh_mirrors/es/espnet 点击查看 免费下载 本文围绕 egs2/mini_librispeech/diar1/NOTE.md 展开,说明一个容易被忽略的部署事…

阅读更多 →
Apache DataFusion 循环依赖检查工具 depcheck:原理、源码解析与 CI 实践 2026/9/25 6:05:08

Apache DataFusion 循环依赖检查工具 depcheck:原理、源码解析与 CI 实践

大数据数据分析后端 【免费下载链接】datafusion Apache DataFusion SQL Query Engine 项目地址: https://gitcode.com/gh_mirrors/datafu/datafusion 点击查看 免费下载 导读 Apache DataFusion 是一个以模块化多 crate 架构著称的 Rust 查询引擎,其仓…

阅读更多 →
Humanizer InDate.Five 深入解析:用 DateOnly 流畅表达“5 天/周/月/年后“的日期 2026/9/25 6:05:08

Humanizer InDate.Five 深入解析:用 DateOnly 流畅表达“5 天/周/月/年后“的日期

开发工具 【免费下载链接】Humanizer Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities 项目地址: https://gitcode.com/gh_mirrors/hu/Humanizer 点击查看 免费下载 本文聚…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉