Skip to content

Commit 38bd16e

Browse files
committed
APIAuto:自动生成场景用例参数传递配置
1 parent 2c23c32 commit 38bd16e

2 files changed

Lines changed: 278 additions & 2 deletions

File tree

  • APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/resources/static/api

‎APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/resources/static/api/apijson/StringUtil.js‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,55 @@ var StringUtil = {
153153
return s.toLowerCase();
154154
},
155155

156+
getTableName: function(s) {
157+
s = StringUtil.trim(s);
158+
var keys = s.split('_');
159+
if (keys.length > 1) {
160+
return keys[keys.length - 2];
161+
}
162+
163+
boolean hasBig = false;
164+
var lastInd = -1;
165+
for (var i = s.length - 1; i >= 0; i--) {
166+
var c = s.substring(i, i + 1);
167+
var isBig = /[A-Z]/.test(c)
168+
if (lastInd >= 1 && (isBig || i <= 0)) {
169+
return s.substring(i, lastInd);
170+
}
171+
172+
if (hasBig && ! isBig) {
173+
lastInd = i;
174+
}
175+
hasBig = hasBig || isBig
176+
}
177+
178+
return '';
179+
},
180+
getColumnName: function(s) {
181+
s = StringUtil.trim(s);
182+
var keys = s.split('_');
183+
if (keys.length > 0) {
184+
return keys[keys.length - 1];
185+
}
186+
187+
boolean hasBig = false;
188+
var lastInd = -1;
189+
for (var i = s.length - 1; i >= 0; i--) {
190+
var c = s.substring(i, i + 1);
191+
var isBig = /[A-Z]/.test(c)
192+
if (lastInd >= 0 && (isBig || i <= 0)) {
193+
return s.substring(lastInd + 1);
194+
}
195+
196+
if (hasBig && ! isBig) {
197+
lastInd = i;
198+
}
199+
hasBig = hasBig || isBig
200+
}
201+
202+
return s;
203+
},
204+
156205
split: function (s, separator, trim) {
157206
if (StringUtil.isEmpty(s, trim)) {
158207
return null;

‎APIJSON-Java-Server/APIJSONBoot-MultiDataSource/src/main/resources/static/api/js/main.js‎

Lines changed: 229 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3466,6 +3466,8 @@ https://github.com/Tencent/APIJSON/issues
34663466
return ''
34673467
}
34683468

3469+
var isChainShow = this.isChainShow;
3470+
34693471
var config = ''
34703472
var childPath = path == null || path == '' ? key : path + '/' + key
34713473
var prefix = childPath + ': '
@@ -3528,6 +3530,7 @@ https://github.com/Tencent/APIJSON/issues
35283530

35293531
for (var k in value) {
35303532
var v = value[k]
3533+
var isId = k != null && k.toLowerCase() == 'id'
35313534

35323535
var isAPIJSONArray = isConst == false && v instanceof Object && v instanceof Array == false
35333536
&& k.startsWith('@') == false && (k.endsWith('[]') || k.endsWith('@'))
@@ -3556,6 +3559,9 @@ https://github.com/Tencent/APIJSON/issues
35563559

35573560
var cfg = this.newRandomConfig(childPath, k, v, isRand, isBad, noDeep, isConst)
35583561
if (StringUtil.isNotEmpty(cfg, true)) {
3562+
if (isId) {
3563+
return cfg
3564+
}
35593565
config += '\n' + cfg
35603566
}
35613567
}
@@ -3571,7 +3577,219 @@ https://github.com/Tencent/APIJSON/issues
35713577
return config
35723578
}
35733579

3574-
if (typeof value == 'boolean') {
3580+
if (isChainShow && (typeof value != 'string' || ! key.endsWith('@'))) {
3581+
var keys = StringUtil.split(path, '/');
3582+
var table = keys == null ? '' : keys[keys.length - 1];
3583+
var isAPIJSONArray = childPath.indexOf('[]') >= 0;
3584+
var isId = key.toLowerCase() == 'id';
3585+
var isList = isAPIJSONArray || childPath.toLowerCase().indexOf('list') >= 0;
3586+
var isRestful = ! JSONObject.isAPIJSONPath(this.getMethod());
3587+
3588+
var tbl = StringUtil.getTableName(key)
3589+
tbl = StringUtil.firstCase(tbl, true)
3590+
var col = StringUtil.getColumnName(key)
3591+
col = StringUtil.firstCase(tbl, false)
3592+
3593+
var ks = keys == null ? [] : keys.subarray(0, keys.length - 1)
3594+
ks.push(tbl)
3595+
var p = ks.join('/')
3596+
var cp = StringUtil.isNotEmpty(tbl) ? childPath : (StringUtil.isEmpty(p) ? '' : p + '/') + col
3597+
var kp = StringUtil.isEmpty(p) ? path : p;
3598+
var fd = StringUtil.isEmpty(kp) ? '' : kp + '/';
3599+
3600+
if (isList) {
3601+
if (isId) {
3602+
config += prefix + 'PRE_ARG("' + StringUtil.firstCase(table + 'Id') + '")';
3603+
config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + table.toLowerCase() + '_id")';
3604+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3605+
if (isRestful) {
3606+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3607+
if (key != cp) {
3608+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3609+
}
3610+
}
3611+
config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + StringUtil.firstCase(table + 'Id') + '")';
3612+
config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + table.toLowerCase() + '_id")';
3613+
config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + StringUtil.firstCase(table + 'Id') + '")';
3614+
config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + table.toLowerCase() + '_id")';
3615+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + StringUtil.firstCase(table + 'Id') + '")';
3616+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + table.toLowerCase() + '_id")';
3617+
if (isRestful && ! isAPIJSONArray) {
3618+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + StringUtil.firstCase(table + 'Id') + '")';
3619+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + table.toLowerCase() + '_id")';
3620+
}
3621+
}
3622+
else if (StringUtil.isIdKey(key)) {
3623+
config += prefix + 'PRE_ARG("' + key + '")';
3624+
config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("id")';
3625+
if (key != cp) {
3626+
config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + cp + '")';
3627+
}
3628+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3629+
3630+
var idKey = key.toLowerCase().startsWith(table.toLowerCase()) ? key : "id";
3631+
if (isRestful && ! isAPIJSONArray) {
3632+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3633+
if (key != cp) {
3634+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3635+
}
3636+
3637+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list/0/' + key + '")';
3638+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list/0/id")';
3639+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/0/' + key + '")';
3640+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/0/id")';
3641+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3642+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/id")';
3643+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("list/0/' + key + '")';
3644+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("list/0/id")';
3645+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/' + key + '")';
3646+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/id")';
3647+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + '0/' + key + '")';
3648+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + '0/id")';
3649+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + key + '")';
3650+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + 'id")';
3651+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/' + key + '")';
3652+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/id")';
3653+
} else {
3654+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("[]/0/' + key + '")';
3655+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("[]/0/id")';
3656+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + fd + key + '")';
3657+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + fd + 'id")';
3658+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (path || '') + '[]/0/' + key + '")';
3659+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (path || '') + '[]/0/id")';
3660+
}
3661+
}
3662+
else {
3663+
config += StringUtil.isEmpty(cp) ? '' : prefix + 'PRE_DATA("' + cp + '", get4Path(req,"' + childPath + '"))';
3664+
config += (StringUtil.isEmpty(cp) ? '' : '\n// 可替代上面的 ') + prefix + 'PRE_DATA("' + cp + '", get4Path(req,"' + childPath + '"))';
3665+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3666+
if (isRestful && ! isAPIJSONArray) {
3667+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3668+
if (key != cp) {
3669+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3670+
if (StringUtil.isNotEmpty(col)) {
3671+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + (StringUtil.isEmpty(tbl) ? '' : tbl + '/') + col + '")';
3672+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + col + '")';
3673+
}
3674+
}
3675+
}
3676+
}
3677+
3678+
config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + childPath + '")';
3679+
config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + cp + '")';
3680+
config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + key + '")';
3681+
if (key != childPath) {
3682+
config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + key + '")';
3683+
config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + key + '")';
3684+
}
3685+
} else {
3686+
if (isId) {
3687+
if (isRestful) {
3688+
config += prefix + 'PRE_DATA("' + 'data/list/0/' + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3689+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + 'data/0/' + table.toLowerCase() + '_id")';
3690+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + 'list/0/' + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3691+
} else {
3692+
config += prefix + 'PRE_DATA("' + kp + '[]') + '/0/' + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3693+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (path || '') + '[]/0/' + (tbl || table).toLowerCase() + '_id")';
3694+
}
3695+
3696+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3697+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (tbl || table).toLowerCase() + '_id")';
3698+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3699+
if (isRestful) {
3700+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3701+
if (key != cp) {
3702+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3703+
}
3704+
}
3705+
config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3706+
config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + table.toLowerCase() + '_id")';
3707+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (StringUtil.isEmpty(path) ? '' : path + '/') + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3708+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (StringUtil.isEmpty(path) ? '' : path + '/') + table.toLowerCase() + '_id")';
3709+
}
3710+
else if (StringUtil.isIdKey(key)) {
3711+
if (isRestful) {
3712+
config += prefix + 'PRE_DATA("data/list/0/id")';
3713+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/0/id")';
3714+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("list/0/id")';
3715+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/id")';
3716+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + '0/id")';
3717+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/id")';
3718+
} else {
3719+
config += prefix + 'PRE_DATA("[]/0/' + (StringUtil.isEmpty(p) ? '' : p + '/') + 'id")';
3720+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("[]/0/' + fd + (col || key) + '")';
3721+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("[]/0/' + fd + 'id")';
3722+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (p || path || '') + '[]/0/' + (col || key) + '")';
3723+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (p || path || '') + '[]/0/id")';
3724+
}
3725+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3726+
if (isRestful) {
3727+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3728+
if (key != cp) {
3729+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + (col || key) + '")';
3730+
}
3731+
}
3732+
config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + key + '")';
3733+
config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("id")';
3734+
if (isRestful) {
3735+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/id")';
3736+
}
3737+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("id")';
3738+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + fd + 'id")';
3739+
if (isRestful) {
3740+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + 'id")';
3741+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/id")';
3742+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + 'id")';
3743+
}
3744+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + fd + 'id")';
3745+
}
3746+
else {
3747+
config += prefix + 'PRE_DATA("' + cp + '", get4Path(req,"' + key + '"))';
3748+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3749+
if (isRestful) {
3750+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3751+
if (key != cp) {
3752+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3753+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + key + '")';
3754+
}
3755+
} else {
3756+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + key + '")';
3757+
}
3758+
}
3759+
3760+
config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + childPath + '")';
3761+
if (key != childPath) {
3762+
config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + key + '")';
3763+
}
3764+
3765+
if (isRestful) {
3766+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3767+
}
3768+
config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + key + '")';
3769+
if (isRestful) {
3770+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list/0/' + cp + '")';
3771+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/0/' + cp + '")';
3772+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("list/0/' + cp + '")';
3773+
config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("[]/0/' + cp + '", PRE_DATA")';
3774+
config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("data/0' + cp + '", PRE_DATA")';
3775+
config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("list/0' + cp + '", PRE_DATA")';
3776+
} else {
3777+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("[]/0/' + cp + '")';
3778+
config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (p || path || '') + '[]/0/' + (col || key) + '")';
3779+
config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + (p || path || '') + '[]/0/' + (col || key) + '", PRE_DATA")';
3780+
config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("[]/0' + cp + '", PRE_DATA")';
3781+
}
3782+
}
3783+
3784+
config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + key + '", App.getCurrentAccount())';
3785+
config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + childPath + '", PRE_DATA")';
3786+
config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + childPath + '", PRE_ARG")';
3787+
if (key != childPath) {
3788+
config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + key + '", PRE_DATA")';
3789+
config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + key + '", PRE_ARG")';
3790+
}
3791+
}
3792+
else if (typeof value == 'boolean') {
35753793
if (isBad) {
35763794
return prefix + (isRand ? 'RANDOM_BAD_BOOL' : 'ORDER_BAD_BOOL' + offset) + '()'
35773795
}
@@ -5208,6 +5426,8 @@ https://github.com/Tencent/APIJSON/issues
52085426

52095427
var groupName = group.groupName
52105428
var isAdd = true
5429+
var reqObj = this.getRequest()
5430+
var config = StringUtil.trim(this.newRandomConfig(null, '', reqObj))
52115431
this.request(true, REQUEST_TYPE_POST, REQUEST_TYPE_JSON, this.server + '/post', {
52125432
Chain: {
52135433
'rank': this.formatDateTime(StringUtil.isEmpty(nextRank, true) ? null : new Date(new Date(nextRank).getTime() - 10)),
@@ -5216,6 +5436,13 @@ https://github.com/Tencent/APIJSON/issues
52165436
'documentId': item.id,
52175437
'documentName': item.name
52185438
},
5439+
Random: {
5440+
toId: 0,
5441+
documentId: item.id,
5442+
count: 1,
5443+
name: '参数传递 ' + App.formatDateTime(),
5444+
config: config
5445+
},
52195446
tag: 'Chain'
52205447
}, {}, function (url, res, err) {
52215448
App.onResponse(url, res, err)
@@ -8201,7 +8428,7 @@ Content-Type: ` + contentType) + (StringUtil.isEmpty(headerStr, true) ? '' : hea
82018428
var methods = this.methods
82028429
var types = this.types
82038430

8204-
//修改 Document
8431+
// Document
82058432
this.request(true, REQUEST_TYPE_POST, REQUEST_TYPE_JSON, this.server + '/get', {
82068433
format: false,
82078434
'Document[]': {

0 commit comments

Comments
 (0)