# 落域测试 **Repository Path**: fxwubolin/doTest ## Basic Information - **Project Name**: 落域测试 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-28 - **Last Updated**: 2026-05-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 落域测试工具 (DoTest) 基于 PySide6 的桌面端测试工具,用于接收、解析和展示天琴(Lyra)设备的落域测试数据。支持通过 TCP(ADB 转发)和 UDP(局域网广播)两种方式接收设备数据,并提供 HTTP + WebSocket 实时 Web 调试界面。 ## 界面预览 ![软件界面](data/exapmle_1.png) ## 功能特性 - **双通道数据接收** - TCP 服务器(端口 9997):通过 ADB reverse 转发接收 USB 连接设备的数据 - UDP 服务器(端口 9999/9998):接收局域网内设备的 UDP 广播数据 - **数据解密与解析**:自动完成 XOR 解密 (0x5A) → GZIP 解压 → JSON 解析 - **实时桌面 GUI**:基于 PySide6 + Qt Designer (.ui) 的左右分栏界面 - 左侧面板:显示设备信息(设备ID、产品ID、天琴版本、安卓版本、WiFi 等) - 右侧面板:数据表格,按 recordId 去重更新,支持右键导出 Excel - **Web 调试界面**:内置 Quart HTTP + WebSocket 服务器(端口 5000),局域网浏览器可实时查看数据推送 - **ADB 自动管理**:后台监听安卓设备连接,自动设置端口转发 - **单实例运行**:防止重复启动,再次双击自动激活已有窗口 - **系统托盘**:支持最小化到托盘后台运行,持续监听数据 - **全局异常处理**:Python 异常、Qt 消息、UI 线程看门狗监控 - **日志记录**:自动输出到 `C:\Temp\Dm_Test_YYYY-MM-DD.txt` ## 技术架构 采用 MVC(Model-View-Controller)分层架构: ``` src/ ├── Main.py # 程序入口,初始化所有组件并启动 ├── controllers/ │ └── main_controller.py # 控制器:连接 Model 和 View,处理事件 ├── models/ │ ├── main_model.py # 业务数据模型 │ ├── tcp_server.py # TCP 服务器:监听端口接收数据 │ ├── udp_server.py # UDP 服务器:接收局域网广播 │ ├── hand_data.py # 数据处理器:解密、解压、解析、信号发射 │ ├── table_source.py # 表格数据源:构建表格行数据 │ └── http/ │ ├── http_server.py # Quart HTTP 服务器 │ └── ws_server.py # WebSocket 管理器:实时广播 ├── views/ │ ├── main_view.py # 主窗口:布局、托盘、关闭事件 │ ├── left_view.py # 左侧面板:设备信息表格 │ ├── right_view.py # 右侧面板:数据表格、Excel 导出 │ └── menu/ │ └── menu_bar.py # 菜单栏管理 ├── globals/ │ ├── config.py # 全局配置常量(端口、加密密钥、界面参数等) │ └── exception_handler.py # 全局异常捕获、Qt 消息处理、看门狗 └── tools/ ├── logger.py # 日志配置(控制台 + 文件) ├── adbtool.py # ADB 工具:端口转发、设备监听 └── config.py # 配置常量(与 globals/config.py 重复,待清理) ``` ## 数据协议 设备端发送的数据格式: ``` 原始 JSON → GZIP 压缩 → XOR 加密(0x5A) → TCP/UDP 传输 ``` - **TCP 协议**:4 字节大端序长度头 + 加密数据体 - **UDP 协议**:直接发送加密数据体(支持广播到 255.255.255.255) ## 端口配置 | 服务 | 端口 | 说明 | |------|------|------| | TCP | 9997 | ADB reverse 转发 | | UDP | 9999 | 主端口(局域网广播) | | UDP | 9998 | 备用端口 | | HTTP | 5000 | Web 调试界面 + WebSocket | ## 环境要求 - Python 3.8+ - 操作系统:Windows - 安卓 SDK(可选,用于 ADB 功能) ### 依赖库 ``` PySide6 # Qt GUI 框架 Quart # 异步 HTTP + WebSocket 服务器 adbutils # ADB Python 封装 openpyxl # Excel 文件读写 ``` ## 快速开始 ### 安装依赖 ```bash pip install PySide6 Quart adbutils openpyxl ``` ### 运行程序 ```bash python src/Main.py ``` ### 打包为可执行文件 项目提供了打包脚本: ```bash # 单文件打包 script\build_single.bat # 多文件打包 script\build_multi_windows.bat ``` ## 使用说明 1. **启动程序**:双击运行或命令行启动,主窗口自动显示 2. **连接设备**:通过 USB 连接安卓设备,程序会自动检测并设置 ADB 端口转发 3. **接收数据**:设备端触发数据上报后,左侧面板显示设备信息,右侧表格实时更新 4. **导出数据**:在右侧表格右键选择"导出为 Excel" 5. **Web 调试**:浏览器访问 `http://localhost:5000/` 查看实时数据 6. **后台运行**:关闭窗口时选择"隐藏后台",程序在系统托盘中持续监听 7. **恢复窗口**:双击系统托盘图标恢复主窗口 ## 配置说明 主要配置项位于 [globals/config.py](file:///d:/python/DoTest_git/doTest/src/globals/config.py): - `TCP_PORT` / `UDP_PORT_PRIMARY` / `UDP_PORT_FALLBACK`:网络端口 - `HTTP_HOST` / `HTTP_PORT`:Web 服务器地址 - `ENCRYPT_KEY`:XOR 解密密钥(需与设备端一致) - `WINDOW_WIDTH_RATIO` / `WINDOW_HEIGHT_RATIO`:窗口大小比例 - `LOG_DIR`:日志保存路径(默认 `C:\Temp`) ## 日志 程序运行日志自动保存到 `C:\Temp\Dm_Test_YYYY-MM-DD.txt`,同时输出到控制台。日志包含: - 服务器启动/停止信息 - 数据接收详情(来源、类型、压缩率、完整内容) - 设备连接/断开事件 - 异常堆栈跟踪 ## 注意事项 - Windows 防火墙需放行 UDP 9999/9998 端口和 TCP 9997 端口 - 程序仅允许同时运行一个实例 - 退出程序会停止所有服务,隐藏到托盘则持续监听 - 日志文件按日期自动创建,无需手动管理