# ruiyi-test-server **Repository Path**: nnzn_admin_admin/ruiyi-test-server ## Basic Information - **Project Name**: ruiyi-test-server - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-18 - **Last Updated**: 2026-05-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ruiyi-test-server `ruiyi-test-server` 是一个基于 Go + Gin 的测试平台后端,覆盖环境切换、API 测试、性能统计、UIAutomator2、仿真设备管理、远程报告和 WebSocket 通信等能力。 ## 项目能力 - 账号与权限管理 - 测试环境、切换策略、DNS 代理配置 - API 请求、分组、任务编排和执行记录 - 性能图表与统计查询 - UIAutomator2 设备、用例、任务、远程报告 - 仿真设备、协议服务、证书、设备 URL 配置 - WebSocket 日志流和远程客户端通信 ## 技术栈 - Go - Gin - GORM + MySQL - MongoDB - Redis - NSQ - Casbin - Consul ## 目录结构 ```text . ├─ cmd/ 程序入口 ├─ docs/ 补充文档 ├─ internal/ │ ├─ api/ HTTP handler 与 controller │ ├─ app/ 应用启动与关闭 │ ├─ biz/ 业务逻辑与后台任务 │ ├─ common/ 配置、日志、基础设施 │ ├─ data/ DAO、缓存、Mongo 访问 │ ├─ middleware/ 中间件 │ ├─ model/ DTO / PO / VO / BO │ ├─ router/ 路由注册 │ └─ service/ 服务层 ├─ pkg/ 可复用工具库 ├─ scripts/ SQL / JS 初始化脚本 ├─ config.json 本地运行配置 ├─ Dockerfile └─ Makefile ``` ## 本地运行 启动前通常需要准备: - MySQL - MongoDB - Redis - NSQ - 可选:Consul 常用命令: ```bash go run ./cmd/main.go go test ./... make run make build make buildLinux make buildWindows ``` 如果本地不使用 Consul,请先在 `config.json` 中关闭 `consul.enabled`。 ## 配置说明 当前版本的配置加载规则如下: 1. 如果显式调用 `config.SetConfigPath(...)`,优先使用该路径 2. 否则读取环境变量 `RUIYI_CONFIG` 3. 否则从当前工作目录开始,逐级向上查找 `config.json` 这意味着测试、子目录运行、IDE 调试不再强依赖“工作目录必须是仓库根目录”。 与运行直接相关的关键配置: - `server.port`: HTTP 端口 - `mysql`: MySQL 连接信息 - `mongo`: MongoDB 连接信息 - `redis`: Redis 连接信息 - `webClient.logPath`: API 日志目录,启动时会自动创建 - `consul`: 配置中心与服务注册 - `nsq`: 消息队列配置 ## 当前结构约定 最近一轮重构后,代码结构有几个明确约定: - `internal/router` 已按业务域拆分,不再把所有路由堆在单个文件里 - `internal/api` 文件已按业务域命名,避免历史 `a_*.go` 命名方式 - `internal/api/service_registry.go` 统一收口 service 获取,避免 handler 层重复初始化 - 部分高频域已经切到 controller 模式: - environment - api test - u2 / ws / remote report - emu 这几类域现在基本遵循 `router -> controller -> service` 的组织方式。 ## 接口层约定 接口层当前建议遵循以下规则: - 优先使用 `ShouldBindJSON`、`ShouldBindUri`、`ShouldBindQuery` - 参数校验失败直接返回 `400` - 业务成功返回 `200` - 业务错误通过统一响应结构返回,HTTP 状态按业务码映射 - 不在 handler 中打印敏感请求体 ## 主要路由域 统一前缀为 `/api/v1`: - `/account` - `/authz` - `/envirment` - `/dnsproxy` - `/switchenv` - `/apiEnv` - `/apiRequest` - `/apiRequestGroup` - `/apiRequestJob` - `/chart` - `/apiRequestJobRecord` - `/u2` - `/ws` - `/emu_network` - `/emu` - `/emu_uuid` - `/emu_ops` - `/emu_internal` - `/emu_protocol` - `/emu_cert` - `/emu_device/config` - `/emu_device/url_config` ## 文档 - [Emu Protocol Server API](./docs/emuProtocolServerConfig_API.md) - [Emu Device Generation](./docs/emuDeviceGeneration.md) - [Refactor Notes](./docs/refactor_notes.md) - [Config Reload Policy](./docs/config_reload_policy.md) ## Config Reload 策略(摘要) - 支持热生效:`logConfig.level`、`logConfig.output`、`mysql.logEnable`、`mysql.autoMigrate`、`webClient.logPath` - 核心连接、端口、消息队列、鉴权相关配置变更后需要重启进程 - 运行时会输出结构化日志字段:`hot_applied` 和 `restart_required` ## 已知问题 - `internal/utils/pem` 历史失败用例已修复,当前以实际 `go test ./...` 结果为准 - 仓库中仍保留部分历史命名,例如 `envirment` - 旧 service 文件里仍有一部分历史乱码注释,尚未整体清理