完整的 RGV 小车自动化测试解决方案,支持运动控制、WCS 集成、传感器标定、OTA 升级、负载测试等多种场景。
- 🌐 Web 可视化控制台:浏览器界面配置、启动测试,实时查看状态(新功能!)
- ✅ 完整的测试覆盖:运动控制、WCS 流程、传感器标定、OTA 升级、避障测试、版本检验、网络质量、负载循环
- 📊 可视化报告:基于 Allure 生成详细的测试报告,支持历史趋势分析
- 💾 数据持久化:实时数据写入 InfluxDB,测试元数据存储到 MySQL
- 📢 智能通知:测试完成或失败时自动发送钉钉通知
- 🔧 灵活配置:支持 YAML 配置文件和环境变量,便于不同环境切换
- 🎮 多种运行方式:支持 Web 界面、CLI、Makefile、直接 pytest 等多种执行方式
rgv_autotest/
├─ autotest/ # 核心代码
│ ├─ clients/ # 客户端模块
│ │ ├─ main_client.py # Main 节点客户端(/control、/state)
│ │ ├─ wcs_client.py # WCS 客户端(Mock/Real)
│ │ └─ ssh_client.py # SSH/SFTP 客户端(OTA)
│ ├─ core/ # 核心功能
│ │ ├─ config.py # 配置管理
│ │ ├─ models.py # 数据模型
│ │ ├─ influx.py # InfluxDB 集成
│ │ ├─ mysql.py # MySQL 集成
│ │ ├─ notifier.py # 钉钉通知
│ │ └─ asserts.py # 通用断言
│ └─ utils/ # 工具模块
│ ├─ retry.py # 重试策略
│ └─ timeouts.py # 超时控制
├─ tests/ # 测试用例
│ ├─ conftest.py # Pytest 配置
│ ├─ test_motion_semiauto.py # 运动控制测试
│ ├─ test_wcs_flow.py # WCS 流程测试
│ ├─ test_calibration.py # 标定测试
│ ├─ test_ota.py # OTA 升级测试
│ ├─ test_obstacle.py # 避障测试
│ ├─ test_versions.py # 版本检验测试
│ ├─ test_network.py # 网络质量测试
│ ├─ test_horsetoe.py # 马蹄光电测试
│ └─ test_load_cycle.py # 负载循环测试
├─ configs/ # 配置文件
│ └─ config.yaml # 默认配置
├─ scripts/ # 脚本
│ ├─ run_cli.py # CLI 入口
│ └─ generate_allure.sh # 生成报告脚本
├─ requirements.txt # 依赖清单
├─ Makefile # Make 命令
└─ README.md # 本文档
# 1. 激活虚拟环境
venv\Scripts\activate # Windows
# 2. 启动 Web 服务
make web
# 或
python scripts/start_web.py
# 3. 打开浏览器访问
# http://localhost:8000Web 控制台功能:
- ✅ 可视化选择测试用例
▶️ 一键启动/停止测试- 📊 实时查看运行状态和进度
- 📝 实时日志输出
- 📈 测试历史记录
详细说明:WEB_QUICKSTART.md
Python 版本要求: Python 3.9+
# 克隆项目
git clone <repository-url>
cd rgv_autotest
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt编辑 configs/config.yaml,根据实际环境修改:
robot:
base_url: "http://10.12.13.45:9999" # 机器人 API 地址
robot_id: "0045" # 机器人 ID
influxdb:
enable: true
url: "http://10.12.12.118:8086"
# ... 其他配置
mysql:
enable: true
host: "10.12.12.125"
# ... 其他配置
dingtalk:
enable: true
webhook: "https://oapi.dingtalk.com/robot/send?access_token=XXX"提示: 也可以通过环境变量覆盖配置,例如:
export ROBOT_BASE_URL="http://10.12.13.45:9999"
export ROBOT_ROBOT_ID="0045"# 查看所有可用命令
make help
# 运行冒烟测试
make test-smoke
# 运行运动控制测试
make test-motion
# 运行所有测试
make test
# 生成 Allure 报告
make allure
# 打开 Allure 报告
make allure-open# 基本用法
python scripts/run_cli.py
# 指定机器人参数
python scripts/run_cli.py --base-url http://10.12.13.45:9999 --robot-id 0045
# 只运行特定测试
python scripts/run_cli.py --tags "motion or ota"
python scripts/run_cli.py --markers smoke
# 生成报告并发送通知
python scripts/run_cli.py --allure --notify# 运行所有测试
pytest -q --alluredir=reports/allure-results tests/
# 运行特定标记的测试
pytest -q -m smoke --alluredir=reports/allure-results tests/
pytest -q -m motion --alluredir=reports/allure-results tests/
# 运行特定文件
pytest -q tests/test_motion_semiauto.py
# 生成报告
allure generate reports/allure-results -o reports/allure-report --clean
allure open reports/allure-report- 模式切换(手动/半自动/联机)
- 换向(母道/子道)
- 移动(带里程计精度验证)
- 寻签(正向/反向)
- 顶升/下降
- 急停与复位
标记: @pytest.mark.motion, @pytest.mark.smoke
- 移动任务
- 取货/放货
- 充电/停止充电
- 完整作业流程
标记: @pytest.mark.wcs
注意: 当前使用 MockWcsClient,真实 WCS 接口需补充实现。
- 1-4 号面避障标定
- TOF 探货传感器标定
- 自动移动到标定点并验证精度(±3mm)
标记: @pytest.mark.calibration
- Hall 传感器 OTA
- 避障传感器 OTA
- TOF 传感器 OTA
- 升级后版本验证
- Hall 升级后零偏标定
标记: @pytest.mark.ota
注意: 当前为模拟测试,需补充真实 OTA 文件和升级逻辑。
- 主控版本
- 地图版本
- TOF/避障/Hall 传感器版本
- 综合版本汇总
标记: @pytest.mark.version, @pytest.mark.smoke
- Ping 测试(RTT、丢包率)
- 数据写入 InfluxDB
- 质量断言(RTT < 100ms, 丢包率 < 5%)
标记: @pytest.mark.network, @pytest.mark.smoke
- 1-4 号面避障检测
- 1/3 号面探货避障
- 距离与强度验证
标记: @pytest.mark.obstacle
- 1.5T 负载下顶升/换向/移动循环
- 失败率统计
- 平均耗时计算
- 异常自动钉钉通知
标记: @pytest.mark.load
| 配置项 | 说明 | 默认值 |
|---|---|---|
robot.base_url |
机器人 API 基础 URL | http://10.12.13.45:9999 |
robot.robot_id |
机器人 ID | 0045 |
test.odom_tol_mm |
运动用例里程计容差(毫米) | 2 |
test.calib_tol_mm |
标定用例里程计容差(毫米) | 3 |
test.wait_move_sec |
下发移动后最小等待时间(秒) | 2 |
test.ping_target |
网络测试目标 IP | 10.12.12.1 |
test.ping_count |
Ping 次数 | 30 |
环境变量 > YAML 配置 > 默认值
示例:
export ROBOT_BASE_URL="http://192.168.1.100:9999"
export ROBOT_ROBOT_ID="0046"
export INFLUXDB_ENABLE="false"三个 Measurement:
-
rgv_state: 机器人状态数据
- Tags:
car_id,project - Fields:
mode,location_x,location_y,motor_mother_velocity,bms_voltage, ...
- Tags:
-
rgv_network: 网络质量数据
- Tags:
car_id,project - Fields:
avg_rtt_ms,loss_pct
- Tags:
-
rgv_assert: 测试断言结果
- Tags:
car_id,suite,project - Fields:
case,status,detail
- Tags:
三个表:
- test_plan: 测试计划
- test_run: 测试运行记录
- test_case: 测试用例记录
- 测试完成:发送汇总信息(通过率、耗时、报告链接)
- 测试失败:实时发送失败用例详情(错误信息、请求/响应摘要)
dingtalk:
enable: true
webhook: "https://oapi.dingtalk.com/robot/send?access_token=XXX"
secret: "" # 可选,签名密钥# 方式 1: Makefile
make allure
# 方式 2: 脚本
bash scripts/generate_allure.sh
# 方式 3: 直接命令
allure generate reports/allure-results -o reports/allure-report --clean# 打开报告
allure open reports/allure-report
# 或者直接在浏览器打开
# file:///path/to/reports/allure-report/index.html原因: 网络不通或配置错误
解决:
- 检查
config.yaml中的robot.base_url是否正确 - 确认网络连通性:
ping 10.12.13.45 - 确认端口开放:
telnet 10.12.13.45 9999
原因: 数据库连接配置错误或服务未启动
解决:
- 检查配置文件中的数据库参数
- 测试连接:
telnet <host> <port> - 如不需要,可设置
enable: false禁用
原因: allure 命令未安装
解决:
# 安装 Allure(需要 Java)
# Mac:
brew install allure
# Windows:
# 从 https://github.com/allure-framework/allure2/releases 下载并配置环境变量
# Linux:
# 参考官方文档安装可能原因:
- 机器人状态异常(急停、错误等)
- 坐标配置不符合现场环境
- 网络延迟导致超时
解决:
- 先运行冒烟测试:
make test-smoke - 检查机器人日志和状态
- 调整
config.yaml中的超时和容差参数 - 根据实际环境调整测试用例中的坐标点
- 在
tests/目录下创建新文件test_xxx.py - 继承 pytest 的测试类或直接写测试函数
- 使用
@pytest.mark.xxx添加标记 - 使用
@allure.feature、@allure.story等装饰器增强报告 - 参考现有用例编写断言和步骤
编辑 autotest/clients/wcs_client.py,实现 RealWcsClient 类的方法:
class RealWcsClient(WcsClient):
def __init__(self, base_url: str, timeout: int = 30):
self.base_url = base_url
self.timeout = timeout
def move(self, x: float, y: float, z: Optional[float] = None):
# 实现真实的 WCS 移动接口调用
response = requests.post(f"{self.base_url}/move", ...)
return response.json()
# ... 实现其他方法然后在 conftest.py 中修改 wcs_client fixture。
在 autotest/core/asserts.py 中添加新的断言函数:
def assert_custom(state: RobotState, expected: Any) -> bool:
"""自定义断言"""
if state.xxx != expected:
raise AssertError(f"Custom check failed: {state.xxx} != {expected}")
return True- 环境隔离: 为不同机器人或环境创建独立的配置文件
- 标记分类: 合理使用 pytest marker 分组测试用例
- 失败重试: 关键用例可使用
@pytest.mark.flaky(reruns=3)自动重试 - 数据清理: 测试后确保机器人回到安全状态
- 报告留存: 定期备份 Allure 报告和数据库记录
- 持续集成: 可集成到 Jenkins/GitLab CI 等 CI/CD 系统
主要依赖:
- pytest: 测试框架
- allure-pytest: 测试报告
- requests: HTTP 客户端
- tenacity: 重试机制
- pydantic: 数据模型与配置
- loguru: 日志
- influxdb-client: InfluxDB 客户端
- pymysql: MySQL 客户端
- paramiko: SSH/SFTP 客户端
完整依赖见 requirements.txt。
[根据项目实际情况填写]
[根据项目实际情况填写]
版本: 1.0.0
最后更新: 2025-10-29