Không có mô tả

wecisecode 2f1a618dd6 create relation 16 giờ trước cách đây
datasync 4f9b271bc6 datasync 10 tháng trước cách đây
odbctest 2f1a618dd6 create relation 16 giờ trước cách đây
omtool 3a52527acc omtool 1 năm trước cách đây
restapi 28a4c2b13f insert test 8 tháng trước cách đây
syslog e0b1f0441f syslog 1 năm trước cách đây
.gitignore 9b5b2f3b26 mql test 3 tuần trước cách đây
go.mod a28176f395 dc version 1 tháng trước cách đây
go.sum a28176f395 dc version 1 tháng trước cách đây
main.go 7423551b82 openutil062 1 năm trước cách đây
odbtools.conf 3a52527acc omtool 1 năm trước cách đây
readme.md abdc8a904a readme 4 tháng trước cách đây

readme.md

odbtools / odbctest 测试工具梳理报告

生成时间: 2026-05-10 15:50 CST


一、总览

odbtools 是 odbserver 的配套工具集,包含 MQL 测试框架、数据同步、REST API 测试等模块。

模块 Go文件 行数 MQL测试文件 功能
odbctest/odbcmql 9 3,214 MQL测试框架核心
odbctest/mql 1 15 899 MQL测试用例入口+用例集
datasync 3 897 数据同步工具
restapi 2 282 REST API 测试
syslog 1 117 系统日志工具
omtool 1 6 工具接口定义
合计 17 4,531 899

二、odbctest — MQL 测试框架(核心)

2.1 框架架构

odbctest/
├── odbcmql/          # 测试框架核心引擎(9文件,3,214行Go代码)
│   ├── mql_run.go         # 主引擎:文件遍历→解析→执行→断言(~1100行)
│   ├── mql_prepare.go     # MQL预处理:变量替换、动作解析
│   ├── mqls_action.go     # 动作定义与解析(/** ... **/ 标注块)
│   ├── mqls_do.go         # 执行器:发送MQL到odbserver
│   ├── mqls_doaction.go   # 执行后动作处理(output/count/match/schema等)
│   ├── mqls_match.go      # 结果匹配/断言逻辑
│   ├── mqls_sub.go        # 订阅/通知机制
│   ├── mql_odbc_query.go  # ODBC查询封装
│   └── cfglog.go          # 日志配置
│
└── mql/              # 测试用例入口 + MQL脚本集
    ├── mql_test.go       # Go test入口(15行)
    ├── mql.conf          # 配置文件(odbpath/keyspace/timeout)
    ├── mqltest.sh        # Shell启动脚本
    └── {test_suites}/    # 899个 .mql 测试文件

2.2 运行方式

# 方式1: Go test
go test -v -run TestMQL ./odbctest/mql/ -- ./

# 方式2: 预编译的 mql 二进制
./mql .                           # 循环执行当前目录所有匹配的mql文件
./mql basic/10basic               # 执行指定目录
./mql . match=^\d+                # 文件名匹配过滤
./mql -- "select * from /test"   # 直接执行mql语句

关键参数:

  • odb=ip:port — 指定odbserver地址
  • keyspace=xxx — 指定keyspace
  • match=正则 — 文件名过滤(默认 ^\d+.* 即以数字开头)
  • debug=true — 调试模式

2.3 MQL 测试文件格式

每个 .mql 文件包含一条或多条 MQL 语句,语句间用 ; 分隔。通过 /** ... **/ 标注块附加执行控制指令。

-- 示例:创建类+插入数据+查询验证
create class if not exists /test/basic (
    v_int int, v_varchar text,
    keys(v_varchar)
) with core=cassandraonly;

insert into /test/basic (v_int, v_varchar) values (5, 'hello')
/** sleep(3s) **/;

select v_int, v_varchar from /test/basic where v_varchar = 'hello'
/** output() match(v_int, 5) **/;

2.4 标注动作(Actions)体系

执行前动作: | 动作 | 功能 | |------|------| | skip() | 跳过当前语句 | | params(V) | 为 prepare 语句提供 JSON 参数 | | loop(N) | 循环执行 N 次 | | parallel(N) | 并发执行,N为最大并发数 | | scope(S) | 作用域:top/dir/file/mql | | timeout(D) | 超时设置 | | set(S,V) / add(S,V) | 变量操作 | | beforerun(F,...) | 执行前预定义函数 | | subscribe(S) / unsubscribe(S) | 消息订阅 | | fork(G) / wait(G) | 并行分支控制 | | qmeta(O) | 查询选项设置 |

执行后动作(断言/验证): | 动作 | 功能 | |------|------| | output() | 输出执行结果 | | outputcount() | 输出结果行数 | | count(N) | 验证结果记录数为 N | | equal(N,F,V) | 验证第N条记录字段F的值为V | | match(K,V) | 验证存在键值匹配的记录 | | matchcount(K,V,N) | 验证键值匹配记录数为N | | schema(C) | 验证类C存在 | | sleep(D) | 执行后等待 | | metainfo() | 输出元信息 |

错误处理动作: | 动作 | 功能 | |------|------| | retry(N) | 出错重试N次 | | onerror(O,E) | 错误处理:break/continue/must/exit | | noerrinfo() | 屏蔽错误输出 |

2.5 变量替换系统

MQL语句中的 {%fmt,varname} 会被替换为对应变量值:

变量 含义
{%d,topi} / {%d,diri} / {%d,filei} / {%d,mqli} 各级循环计数
{%d,topcount} / {%d,dircount} / {%d,filecount} / {%d,mqlcount} 各级总计数
{%s,keyspace} / {%s,ksnative} keyspace名
{%d,rand} 0~1000000随机数
{%t,now} 当前时间

三、测试用例分布(899个MQL文件)

测试套件 文件数 测试范围
basic/ 479 基础功能全覆盖(最大测试集)
test/ 143 专项测试(冲突/缓存/分区/压力/事件等)
uino/ 83 UINO相关测试
0/ 58 根级散列测试(MQL函数/JSON/搜索等)
bench/ 48 性能基准测试
problem/ 26 已知问题回归测试
matrix/ 21 矩阵相关测试
basic_scenario/ 11 场景化集成测试
create/ 11 并发建类测试
uino72/ 7 UINO v72测试
notify/ 6 消息通知测试
auth/ 4 认证授权测试
bgrimm/ 1 后台IMM测试
vector/ 1 向量检索测试

basic/ 核心测试集细分(479文件)

子模块 说明
00init / 01clear 初始化与清理
10basic 基础CRUD(class/data/valid/field/int/bool/enum)
10cachedb 缓存数据库
10index 索引
10memdb / 10memdbexpired 内存数据库及过期
10native Native查询
10order 排序
10pubsub 发布订阅
11cacheonly / 11cncachedb / 11cncassdb / 11cnmemdb 不同存储后端数据源
11collect / 11localdb 数据收集与本地库
12datetime 日期时间
13delete / 13tuihualei 删除与退花类
14enum 枚举类型
15oo 面向对象
16alter 类结构变更
17cypher / 17xbase.select Cypher语法/xbase查询
18batch_insert / 19batch_update / 20batch_delete 批量操作
21~24 bucket_* 时序桶(logs/strulogs/tsdb/promdb)
25~27 ckey/concat 组合键
30conflict* 冲突处理(标准/缓存/本地/内存)
31~37 seq/uuid/network/partition/mpartition/prepare_* 序列键/UUID键/网络/分区/预编译
40~42 search_* 全文检索
49mix 混合场景
51tempclass / 52ootest 临时类/OO测试
98syntax / 99cassdb / 99ver 语法/Cassandra/版本

四、其他工具模块

4.1 datasync(数据同步)

  • 3个Go文件,897行
  • 功能:从源odbserver同步数据到目标odbserver
  • 入口:datasync/main.go

4.2 restapi(REST接口测试)

  • 2个Go文件,282行
  • rest.go:封装HTTP请求+JSON解析+状态校验
  • insert_test.go:REST插入测试

4.3 omtool(工具接口)

  • 1个Go文件,6行
  • 定义统一的工具接口 OMTool(Init/Run)

4.4 syslog(系统日志)

  • 1个Go文件,117行
  • 系统日志采集/监控

五、依赖关系

odbtools
  ├── git.wecise.com/wecise/odb-go   (数据库SDK)
  ├── gitee.com/wecisecode/util       (开源工具库)
  ├── github.com/stretchr/testify     (测试断言)
  ├── github.com/gofrs/flock          (文件锁)
  └── (传递依赖)
      ├── git.wecise.com/wecise/common
      └── git.wecise.com/wecise/util

六、关键发现

  1. 测试体系完善 — 899个MQL测试文件,覆盖CRUD、缓存、冲突、分区、全文检索、批量操作等几乎所有功能领域
  2. 测试框架设计精巧 — 通过 /** action() **/ 标注块实现声明式断言,支持循环、并发、作用域、变量替换、错误处理
  3. basic/ 是最大测试集 — 479个文件覆盖基础功能,test/ 专注边界和异常场景
  4. 生产可用 — 有 problem/(回归测试)、bench/(性能基准)、test/stress_*(压力测试)等生产级质量保障
  5. 框架代码量小 — 核心引擎仅3,214行Go代码,支撑了899个测试用例的执行