|
|
@@ -181,6 +181,7 @@ mql语句扩展说明:
|
|
|
rand 0 ~ 1000000 之间的随机整数
|
|
|
now 当前时间,格式标记 t 相当于 2006-01-02 15:04:05
|
|
|
mql语句中第一个 /** 到 最后一个 **/ 之间的内容可以标注执行若干预定义动作,多个动作标注用空格分隔
|
|
|
+ 无法解析为预定义动作的内容作为普通注释直接跳过,不会报错
|
|
|
如 /** output() sleep(1) **/ 表示忽略当前语句执行过程中的任何报错,执行完成后等待一秒后再继续执行下一语句
|
|
|
目前支持的预定义动作如下:
|
|
|
skip() 跳过当前语句,以及其它的所有预定义动作
|
|
|
@@ -226,6 +227,7 @@ mql语句扩展说明:
|
|
|
equal(N,F,V) 判断返回结果中第 N 条数据的字段 F 的值是否为 V
|
|
|
match(Kn,Mn) 检查返回结果中字段 Kn 值为 Mn 的记录是否存在,参数 Kn,Mn 可以有多个,需要成对出现
|
|
|
matchcount(Kn,Mn,N) 检查返回结果中字段 Kn 值为 Mn 的记录数是否为 N,参数 Kn,Mn 可以有多个,需要成对出现,N为自然数
|
|
|
+ 需要一次顺序执行多条语句时,可将多条语句包含在 multilines begin; 和 multilines end; 之间,多条语句之间用分号 ; 分隔
|
|
|
|
|
|
例:循环遍历执行当前路径下的所有 mql 文件
|
|
|
./mql .
|
|
|
@@ -644,28 +646,47 @@ func (mt *MQLTest) RunFile(t *testing.T, ctx context.Context,
|
|
|
if !hasnext {
|
|
|
break
|
|
|
}
|
|
|
+ // 去掉注释
|
|
|
+ clean_mql := strings.Join(spliter.MQLSplitClean(mql), ";")
|
|
|
if multilines != nil {
|
|
|
- if strings.TrimSpace(mql) == "multilines end" {
|
|
|
+ // 多条语句处理
|
|
|
+ if strings.TrimSpace(clean_mql) == "multilines end" {
|
|
|
+ // 保留语句中的注释
|
|
|
+ tm := strings.TrimSpace(strings.Replace(mql, "multilines end", "", 1))
|
|
|
+ if len(tm) > 0 {
|
|
|
+ if multilines.OriginQueryString != "" {
|
|
|
+ multilines.OriginQueryString += ";"
|
|
|
+ }
|
|
|
+ multilines.OriginQueryString += tm
|
|
|
+ }
|
|
|
+ multilines.Toline = toline
|
|
|
+ multilines.Tochar = tochar
|
|
|
+ // 加入请求组,并初始化,提取动作信息
|
|
|
e := mqgr.Append(multilines)
|
|
|
if !assert.Nil(t, e, e) {
|
|
|
return false
|
|
|
}
|
|
|
multilines = nil
|
|
|
- } else if multilines.OriginQueryString == "" {
|
|
|
- multilines.OriginQueryString = mql
|
|
|
- multilines.Fromline = fromline
|
|
|
- multilines.Toline = toline
|
|
|
- multilines.Fromchar = fromchar
|
|
|
- multilines.Tochar = tochar
|
|
|
} else {
|
|
|
- multilines.OriginQueryString += ";" + mql
|
|
|
+ if multilines.OriginQueryString != "" {
|
|
|
+ multilines.OriginQueryString += ";"
|
|
|
+ }
|
|
|
+ multilines.OriginQueryString += mql
|
|
|
multilines.Toline = toline
|
|
|
multilines.Tochar = tochar
|
|
|
}
|
|
|
- } else if strings.TrimSpace(mql) == "multilines begin" {
|
|
|
+ } else if strings.TrimSpace(clean_mql) == "multilines begin" {
|
|
|
multilines = &MQLRequest{FilePath: ffpath}
|
|
|
+ // 保留语句中的注释
|
|
|
+ multilines.OriginQueryString = strings.TrimSpace(strings.Replace(mql, "multilines begin", "", 1))
|
|
|
+ multilines.Fromline = fromline
|
|
|
+ multilines.Fromchar = fromchar
|
|
|
+ multilines.Toline = toline
|
|
|
+ multilines.Tochar = tochar
|
|
|
} else {
|
|
|
+ // 单条语句
|
|
|
mqr := &MQLRequest{OriginQueryString: mql, FilePath: ffpath, Fromline: fromline, Toline: toline, Fromchar: fromchar, Tochar: tochar}
|
|
|
+ // 加入请求组,并初始化,提取动作信息
|
|
|
e := mqgr.Append(mqr)
|
|
|
if !assert.Nil(t, e, e) {
|
|
|
return false
|