ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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),仅供参考
返回列表