|
通过gRPC + JMeter对嵌入式板卡上的C/C++ SDK进行自动化测试的框架。
┌─────────────────────────────────────────────────────────────────┐
│ 输入: 需求文档 + C/C++ SDK (头文件 + 库) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤1: 分析SDK头文件 │
│ - 提取函数签名 │
│ - 识别错误码枚举 │
│ - 理解数据结构 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤2: 编写C++ gRPC服务端 │
│ - 创建Proto文件 (基于SDK接口) │
│ - 实现gRPC服务类 (封装SDK调用) │
│ - 编写CMakeLists.txt │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤3: 编译生成 │
│ - cmake + make → 生成可执行文件 │
│ - protoc → 生成proto描述符 (.protobin) │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤4: 编写JMeter JMX │
│ - 引用proto描述符 │
│ - 配置gRPC采样器 │
│ - 定义测试用例 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤5: 串口下发资源到板端 │
│ - 模拟串口通信 (TCP Socket) │
│ - 下发: SDK库 + 服务程序 + Proto │
│ - 挂载到板端目录 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤6: 板端拉起服务 │
│ - 设置LDLIBRARYPATH │
│ - 执行./grpc_server 8080 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤7: JMeter执行测试 │
│ - jmeter -n -t test.jmx │
│ - 收集响应数据 │
└─────────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 步骤8: 生成Excel报告 │
│ - 测试概览 │
│ - 测试详情 │
│ - 性能指标 │
│ - 错误详情 │
└─────────────────────────────────────────────────────────────────┘
grpc_test/
├── proto/
│ └── service.proto # 从SDK分析生成
├── server/
│ ├── CMakeLists.txt # 构建配置
│ ├── grpc_server.cpp # gRPC服务器 (封装SDK)
│ ├── build/ # 构建输出
│ │ ├── grpc_server # 编译后的可执行文件
│ │ └── service.protobin # 供JMeter使用的Proto描述符
│ └── service.pb.h/cc # 生成的Protobuf代码
├── client/
│ └── test_client.cpp # 可选的测试客户端
├── jmeter/
│ ├── test_plans/
│ │ └── test.jmx # JMeter测试计划
│ ├── results/
│ │ ├── result.jtl # 原始结果
│ │ └── report.xlsx # Excel报告
│ └── service.protobin # Proto描述符 (副本)
├── scripts/
│ ├── serial_simulator.py # 串口通信模拟器
│ ├── deploytoboard.sh # 部署资源到板端
│ ├── run_server.sh # 在板端启动服务
│ └── run_tests.sh # 执行完整测试周期
└── sdk/ # 原始SDK (挂载到板端)
├── include/
└── lib/
python
scripts/analyze_sdk.py sdk/include/
提取内容:函数、枚举、结构体、错误码
python
scripts/generategrpcserver.py --sdk sdk/ --output server/
创建内容:proto文件、server.cpp、CMakeLists.txt
bash
cd server/build && cmake .. && make
生成内容:grpc_server可执行文件、service.protobin
bash
scripts/deploytoboard.sh --board localhost:9999 --sdk sdk/ --server server/build/
bash
scripts/runtests.sh --jmx jmeter/testplans/test.jmx --output jmeter/results/
cpp
// SDK头文件
vencerrort vencgetdeviceinfo(vencdeviceinfot *info);
typedef struct { char deviceid[64]; ... } vencdeviceinfot;
typedef enum { VENCOK=0, VENCERRPARAM=1001 } vencerror_t;
↓ 分析 ↓
// Proto定义
service VencService {
rpc GetDeviceInfo(GetDeviceInfoRequest) returns (GetDeviceInfoResponse);
}
message GetDeviceInfoResponse {
string device_id = 1;
ErrorCode error = 2;
}
cpp
// gRPC服务端封装SDK调用
Status GetDeviceInfo(ServerContext* ctx,
const GetDeviceInfoRequest* req,
GetDeviceInfoResponse* resp) override {
vencdeviceinfo_t info;
vencerrort err = vencgetdevice_info(&info); // 调用SDK
if (err == VENC_OK) {
resp->setdeviceid(info.device_id);
return Status::OK;
}
return Status(StatusCode::INTERNAL, SDK错误);
}
json
// 命令
{command: MOUNT, source_path: /path/to/sdk}
{command: UPLOAD, filename: grpc_server, content: ...}
{command: START_SERVER, port: 8080}
{command: STATUS}
{command: STOP_SERVER}
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 grpc-test-automation-1775933795 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 grpc-test-automation-1775933795 技能
skillhub install grpc-test-automation-1775933795
文件大小: 24.59 KB | 发布时间: 2026-4-12 10:09