runner-runtime 1.0.54 → 1.0.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/events/api.js CHANGED
@@ -75,6 +75,10 @@ const convert2PostmanRequest = (request, option) => {
75
75
  }
76
76
  );
77
77
 
78
+ if (option?.env?.env_id == '2' && !_.includes(_.keys(uri?.query?.toObject()), 'target_id')) {
79
+ uri?.query?.members?.push(new sdk.QueryParam({ key: 'target_id', value: request?.target_id, }));
80
+ }
81
+
78
82
  // path 参数
79
83
  const uriVariable = [];
80
84
 
@@ -1718,7 +1722,7 @@ const preProcessMockExp = (request, requestPara, AllVars, option) => {
1718
1722
  }
1719
1723
  }
1720
1724
  })
1721
- console.log(postmanJSON?.url,`postmanJSONpostmanJSONpostmanJSONpostmanJSONpostmanJSONpostmanJSON`)
1725
+
1722
1726
  // 替换 Header 中可能的变量
1723
1727
  if (!_.isEmpty(request.headers)) {
1724
1728
  request?.headers?.each((item) => {
@@ -1894,7 +1898,7 @@ const initRequestJson = (event, option) => {
1894
1898
  } else {
1895
1899
  // 目录参数
1896
1900
  const parentEnvServerID = _.get(getAPIFromCollection(option?.collection, parent_id), "server_id");
1897
- if (_.isUndefined(envServerID) && !_.isString(parentEnvServerID)) {
1901
+ if (_.isUndefined(_.get(requestJson, 'server_id')) && _.isString(parentEnvServerID)) {
1898
1902
  envServerID = parentEnvServerID;
1899
1903
  }
1900
1904
 
@@ -2009,49 +2013,19 @@ const initRequestJson = (event, option) => {
2009
2013
  const requestUrl = _.isString(_.get(requestJson, 'url')) ? _.get(requestJson, 'url') : _.get(requestJson, 'request.url');
2010
2014
  const { globals, env } = option;
2011
2015
 
2012
- if (_.get(option, "env.env_id") == "2") {
2013
- let requestUrlVarReplace = requestUrl;
2016
+ let envPreUrl = _.trim(_.get(_.find(_.get(option, `env.env_pre_urls`), (server) => {
2017
+ return server?.server_id == envServerID;
2018
+ }), 'uri'));
2014
2019
 
2015
- try {
2016
- _.forEach(_.assign({}, globals, _.get(env, 'environment')), (value, key) => {
2017
- requestUrlVarReplace = replace2RegExp(requestUrlVarReplace, `{{${key}}}`, String(value))
2018
- })
2019
- requestUrlVarReplace = new Url(requestUrlVarReplace)
2020
- _.unset(requestUrlVarReplace, 'host')
2021
- } catch (e) { }
2022
-
2023
- let mockID = requestJson?.target_id;
2024
-
2025
- if (requestJson?.type == 'sample') {
2026
- mockID = _.get(getAPIFromCollection(option?.collection, _.get(event, `data.parent_id`)), 'target_id') || mockID;
2020
+ if (envPreUrl != '') {
2021
+ if (option?.env?.env_id == '2' && !_.endsWith(envPreUrl, '/')) {
2022
+ envPreUrl = `${envPreUrl}/`;
2027
2023
  }
2028
2024
 
2029
-
2030
- if (process && process?.IS_ECHOAPI) {
2031
- requestUrlVarReplace.query.add({
2032
- key: "echoapi_id",
2033
- value: mockID
2034
- });
2035
- _.set(requestJson, "url", smartUrlJoin(`https://mock.echoapi.com/mock/${_.get(event, 'data.project_id')}/`, `${String(requestUrlVarReplace)}`));
2025
+ if (!_.startsWith(envPreUrl, '{{') && !_.startsWith(_.toLower(envPreUrl), 'http://') && !_.startsWith(_.toLower(envPreUrl), 'https://')) {
2026
+ _.set(requestJson, "url", smartUrlJoin('http://', envPreUrl, requestUrl));
2036
2027
  } else {
2037
- requestUrlVarReplace.query.add({
2038
- key: "apipost_id",
2039
- value: mockID
2040
- });
2041
-
2042
- _.set(requestJson, "url", smartUrlJoin(`https://mock.apipost.net/mock/${_.get(event, 'data.project_id')}/`, `${String(requestUrlVarReplace)}`));
2043
- }
2044
- } else {
2045
- const envPreUrl = _.trim(_.get(_.find(_.get(option, `env.env_pre_urls`), (server) => {
2046
- return server?.server_id == envServerID;
2047
- }), 'uri'));
2048
-
2049
- if (envPreUrl != '') {
2050
- if (!_.startsWith(envPreUrl, '{{') && !_.startsWith(_.toLower(envPreUrl), 'http://') && !_.startsWith(_.toLower(envPreUrl), 'https://')) {
2051
- _.set(requestJson, "url", smartUrlJoin('http://', envPreUrl, requestUrl));
2052
- } else {
2053
- _.set(requestJson, "url", smartUrlJoin(envPreUrl, requestUrl));
2054
- }
2028
+ _.set(requestJson, "url", smartUrlJoin(envPreUrl, requestUrl));
2055
2029
  }
2056
2030
  }
2057
2031
 
@@ -2189,7 +2163,7 @@ module.exports = (event, option, callback, eventRuntimeData, eventResultList) =>
2189
2163
  ["globals", "environment", "variables"].forEach((varName) => {
2190
2164
  _.assign(AllVars, _.get(eventRuntimeData, `variables.${varName}`))
2191
2165
  })
2192
- preProcessMockExp(request, postmanJSON, AllVars, _.pick(option, ['lang', 'custom_functions']))
2166
+ preProcessMockExp(request, { postmanJSON }, AllVars, _.pick(option, ['lang', 'custom_functions']))
2193
2167
  },
2194
2168
 
2195
2169
  beforePrerequest(err, cursor, events, item) {
@@ -2241,7 +2215,7 @@ module.exports = (event, option, callback, eventRuntimeData, eventResultList) =>
2241
2215
  })
2242
2216
  }
2243
2217
  }
2244
-
2218
+ console.log(String(request?.url),111111)
2245
2219
  const requestOptions = convert2EchoRequest(request, requestJson, postmanJSON, history);
2246
2220
  _.set(eventRuntimeData, [event?.event_id, "request"], requestOptions);
2247
2221
 
@@ -2367,8 +2341,8 @@ module.exports = (event, option, callback, eventRuntimeData, eventResultList) =>
2367
2341
  }
2368
2342
  );
2369
2343
 
2370
- if (scene === 'auto_test') {
2371
- if (_.includes(['assert', 'assert_visual', 'api', 'sample', 'script'], event?.type)) {
2344
+ if (scene === 'auto_test' || requestJson?.target_type === 'sse') { // 纯粹为了兼容老的数据返回格式 todo...
2345
+ if (_.includes(['assert', 'assert_visual', 'api', 'sample', 'script', 'sql'], event?.type)) {
2372
2346
  eventResultList.push(_.assign(camelCaseToSnakeCase(_.get(_.cloneDeep(eventRuntimeData), event?.event_id)), _.pick(event, ['type', 'event_id', 'test_id', 'iteration_id'])));
2373
2347
 
2374
2348
  callback({
package/events/index.js CHANGED
@@ -3,7 +3,7 @@ const atomicSleep = require("atomic-sleep"),
3
3
  aTools = require("apipost-tools"),
4
4
  JSON5 = require('json5'),
5
5
  _ = require('lodash'),
6
- { returnBoolean, variableReplace, convertEndRuntimeState } = require('../libs/utils');
6
+ { returnBoolean, variableReplaceForCondition, variableReplace, convertEndRuntimeState,repeatArrayToLength } = require('../libs/utils');
7
7
  const executeApi = require('./api'),
8
8
  executeWait = require('./wait');
9
9
 
@@ -20,8 +20,8 @@ const events = {
20
20
  if: async (event, option, callback, eventRuntimeData, eventResultList) => { // ok
21
21
  try {
22
22
  const { data, children } = event;
23
- const exp = variableReplace(data?.var, eventRuntimeData?.variables, option),
24
- compare = data?.compare, value = variableReplace(data?.value, eventRuntimeData?.variables, option);
23
+ const exp = variableReplaceForCondition(data?.var, eventRuntimeData?.variables, option),
24
+ compare = data?.compare, value = variableReplaceForCondition(data?.value, eventRuntimeData?.variables, option);
25
25
  const isMatched = returnBoolean(exp, compare, value);
26
26
  const runtimeState = convertEndRuntimeState(eventRuntimeData, event?.event_id) || {}
27
27
  const finalIfData = {
@@ -211,13 +211,19 @@ const events = {
211
211
  const limit = loopType === 1 ? _.size(iterationData) : _.toInteger(_.get(data, 'limit', 1));
212
212
 
213
213
  if (limit > 0) {
214
+ let iterationDataArr = _.cloneDeep(iterationData);
215
+
216
+ if (loopType === 2) {
217
+ iterationDataArr = repeatArrayToLength(iterationDataArr, limit)
218
+ }
219
+
214
220
  const events = _.flatten(_.times(limit, () => _.cloneDeep(children)));
215
- await iterationEvent(events, _.assign(_.cloneDeep(option), { iterationDataArr: iterationData, sleep, startTime, timeout }), callback, eventRuntimeData, eventResultList)
221
+ await iterationEvent(events, _.assign(_.cloneDeep(option), { iterationDataArr, sleep, startTime, timeout }), callback, eventRuntimeData, eventResultList)
216
222
  }
217
223
  } else if (_.includes([3], loopType)) {
218
224
  while (true) {
219
225
  const condition = _.get(option, 'condition', _.get(data, 'loop_condition', {}));
220
- const exp = variableReplace(condition?.var, eventRuntimeData?.variables, option), compare = condition?.compare, value = variableReplace(condition?.value, eventRuntimeData?.variables, option);
226
+ const exp = variableReplaceForCondition(condition?.var, eventRuntimeData?.variables, option), compare = condition?.compare, value = variableReplaceForCondition(condition?.value, eventRuntimeData?.variables, option);
221
227
 
222
228
  if ((timeout === 0 || (timeout > 0 && startTime + timeout > Date.now())) && !returnBoolean(exp, compare, value)) {
223
229
  await iterationEvent(_.cloneDeep(children), _.assign(_.cloneDeep(option), { iterationDataArr: iterationData, sleep, condition, startTime, timeout }), callback, eventRuntimeData, eventResultList);
package/libs/utils.js CHANGED
@@ -329,6 +329,30 @@ const variableReplace = (str, variables, option) => {
329
329
  }
330
330
  }
331
331
 
332
+ const variableReplaceForCondition = (str, variables, option) => {
333
+ const AllVars = getInsideVariables();
334
+ ["globals", "_globals", "environment", "variables"].forEach((varName) => {
335
+ _.assign(AllVars, _.get(variables, `${varName}`))
336
+ })
337
+
338
+ str = _.replace(str, /\{\{([^}]+)\}\}/g, (match, key) => {
339
+ return _.get(AllVars, key.trim(), match);
340
+ });
341
+ console.log(str, `strstrstrstrstrstr`)
342
+ const { lang, custom_functions } = option;
343
+
344
+ try {
345
+ const finalStr = mockExp(str, AllVars, lang, custom_functions);
346
+
347
+ if (finalStr === str) {
348
+ return undefined
349
+ }
350
+ return finalStr;
351
+ } catch (e) {
352
+ return undefined;
353
+ }
354
+ }
355
+
332
356
  const formatAutotestReportList = (eventResultList) => {
333
357
  const list = [];
334
358
  _.forEach(_.cloneDeep(eventResultList), (item) => {
@@ -504,7 +528,6 @@ const convertEndRuntimeState = (eventRuntimeData, event_id) => {
504
528
  }
505
529
  _.set(startAllActedUponVars, [key, 'actedUpon'], startActedUpon);
506
530
  })
507
- // console.log(startAllActedUponVars,`startAllActedUponVarsstartAllActedUponVarsstartAllActedUponVarsstartAllActedUponVars`)
508
531
  // 当前变量
509
532
  const { environment = {}, variables = {}, _globals = {}, iterationData = {} } = _.get(eventRuntimeData, 'variables', {});
510
533
  const endVariables = { environment, variables, iterationData, globals: _globals };
@@ -533,11 +556,9 @@ const convertEndRuntimeState = (eventRuntimeData, event_id) => {
533
556
  current: { value, actedUpon }
534
557
  })
535
558
  })
536
- console.log(JSON.stringify({ startTime, endTime, currentVariables }, null, 2))
559
+
537
560
  return { startTime, endTime, currentVariables };
538
- } catch (e) {
539
- console.log(e)
540
- }
561
+ } catch (e) { }
541
562
  }
542
563
 
543
564
 
@@ -552,6 +573,7 @@ module.exports = {
552
573
  repeatArrayToLength,
553
574
  convertEndRuntimeState,
554
575
  returnBoolean,
576
+ variableReplaceForCondition,
555
577
  getCaseInsensitive,
556
578
  camelCaseToSnakeCase,
557
579
  formatAutotestReportList,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "runner-runtime",
3
- "version": "1.0.54",
3
+ "version": "1.0.56",
4
4
  "description": "runner-runtime.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -29,7 +29,7 @@
29
29
  "is-image": "^3.0.0",
30
30
  "is-svg": "^4.3.2",
31
31
  "json-bigint": "^1.0.0",
32
- "json-schema-faker-pro": "^0.5.17",
32
+ "json-schema-faker-pro": "^0.5.18",
33
33
  "json5": "^2.2.3",
34
34
  "jsonpath": "^1.1.1",
35
35
  "lodash": "^4.17.21",
package/tmp/request.js CHANGED
@@ -1,7 +1,9 @@
1
- module.exports = {
1
+ module.exports ={
2
2
  "option": {
3
3
  "scene": "auto_test",
4
- "globals": {},
4
+ "globals": {
5
+ "全局": "AAAA"
6
+ },
5
7
  "project": {
6
8
  "request": {
7
9
  "header": {
@@ -46,7 +48,11 @@ module.exports = {
46
48
  "parameter": []
47
49
  },
48
50
  "auth": {
49
- "type": "noauth"
51
+ "type": "basic",
52
+ "basic": {
53
+ "username": "mengyu",
54
+ "password": "meinv"
55
+ }
50
56
  },
51
57
  "pre_tasks": [],
52
58
  "post_tasks": []
@@ -58,46 +64,125 @@ module.exports = {
58
64
  "env_pre_url": "",
59
65
  "env_pre_urls": {
60
66
  "1": {
61
- "server_id": "1",
67
+ "sort": 200,
62
68
  "name": "默认服务",
63
- "sort": 1000,
69
+ "server_id": "1",
70
+ "server_type": 1,
64
71
  "uri": ""
65
72
  },
66
73
  "default": {
67
- "server_id": "1",
74
+ "sort": 200,
68
75
  "name": "默认服务",
69
- "sort": 1000,
76
+ "server_id": "1",
77
+ "server_type": 1,
70
78
  "uri": ""
79
+ },
80
+ "1a89a49bc9808001": {
81
+ "sort": 600,
82
+ "name": "服务2",
83
+ "server_id": "1a89a49bc9808001",
84
+ "server_type": -1,
85
+ "uri": "go.apipost.cn"
71
86
  }
72
87
  },
73
- "environment": {
74
- "code": 201,
75
- "key": "value"
76
- }
88
+ "environment": {}
77
89
  },
78
90
  "cookies": {
79
91
  "switch": 1,
80
- "data": []
92
+ "data": [
93
+ {
94
+ "key": "liveCookie",
95
+ "value": "gin",
96
+ "maxAge": 120,
97
+ "domain": "go.apipost.cn",
98
+ "path": "/",
99
+ "secure": true,
100
+ "httpOnly": true,
101
+ "creation": "2025-04-21T08:44:38.530Z",
102
+ "name": "liveCookie",
103
+ "cookie_id": "4f9eb773ab1cf",
104
+ "expires": "Mon, 21 Apr 2025 08:46:39 GMT",
105
+ "project_id": "1a89866533408002"
106
+ },
107
+ {
108
+ "key": "loseCookie",
109
+ "value": "gin",
110
+ "maxAge": 0,
111
+ "domain": "go.apipost.cn",
112
+ "path": "/",
113
+ "secure": true,
114
+ "httpOnly": true,
115
+ "creation": "2025-04-21T08:44:38.531Z",
116
+ "name": "loseCookie",
117
+ "cookie_id": "4f9eb773ab1d0",
118
+ "expires": "Mon, 21 Apr 2025 08:44:39 GMT",
119
+ "project_id": "1a89866533408002"
120
+ },
121
+ {
122
+ "key": "security_session_verify",
123
+ "value": "4560bdb4c5ddc22643bc99515ea21fcf",
124
+ "expires": "2025-04-21T13:42:33.000Z",
125
+ "path": "/",
126
+ "httpOnly": true,
127
+ "creation": "2025-04-18T05:42:33.287Z",
128
+ "name": "security_session_verify",
129
+ "cookie_id": "60289db7ab003",
130
+ "domain": "echo.apipost.cn",
131
+ "project_id": "1a89866533408002"
132
+ },
133
+ {
134
+ "key": "security_session_verify",
135
+ "value": "4560bdb4c5ddc22643bc99515ea21fcf",
136
+ "expires": "2025-04-21T13:42:29.000Z",
137
+ "path": "/",
138
+ "httpOnly": true,
139
+ "creation": "2025-04-18T05:42:30.039Z",
140
+ "name": "security_session_verify",
141
+ "cookie_id": "60289db7ab004",
142
+ "domain": "echo.apipost.cn",
143
+ "project_id": "1a89866533408002"
144
+ },
145
+ {
146
+ "key": "security_session_verify",
147
+ "value": "4560bdb4c5ddc22643bc99515ea21fcf",
148
+ "expires": "2025-04-21T13:42:29.000Z",
149
+ "path": "/",
150
+ "httpOnly": true,
151
+ "creation": "2025-04-18T05:42:30.040Z",
152
+ "name": "security_session_verify",
153
+ "cookie_id": "60289db7ab005",
154
+ "domain": "echo.apipost.cn",
155
+ "project_id": "1a89866533408002"
156
+ },
157
+ {
158
+ "key": "BDSVRTM",
159
+ "value": "0",
160
+ "path": "/",
161
+ "creation": "2025-04-18T08:04:03.277Z",
162
+ "name": "BDSVRTM",
163
+ "cookie_id": "602acf0fab006",
164
+ "domain": "www.baidu.com",
165
+ "project_id": "1a89866533408002"
166
+ }
167
+ ]
81
168
  },
82
169
  "system_configs": {
83
170
  "send_timeout": 0,
84
- "auto_redirect": 1,
171
+ "auto_redirect": -1,
85
172
  "max_redirect_time": 5,
86
- "auto_gen_mock_url": -1,
87
- "request_param_auto_json": 1,
173
+ "auto_gen_mock_url": 1,
174
+ "request_param_auto_json": -1,
88
175
  "proxy": {
89
176
  "type": 2,
90
- "envfirst": -1,
91
- "bypass": [
92
- "export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890"
93
- ],
177
+ "envfirst": 1,
178
+ "bypass": [],
94
179
  "protocols": [
95
- "https",
96
- "http"
180
+ "http",
181
+ "https"
97
182
  ],
98
183
  "auth": {
99
184
  "authenticate": -1,
100
- "host": "127.0.0.1:7890",
185
+ "host": "123.57.241.61:3128",
101
186
  "username": "",
102
187
  "password": ""
103
188
  }
@@ -105,248 +190,221 @@ module.exports = {
105
190
  "ca_cert": {
106
191
  "open": 1,
107
192
  "path": "",
108
- "base64": "data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR0VENDQXAyZ0F3SUJBZ0lKQU9ueUNxV09FeCtsTUEwR0NTcUdTSWIzRFFFQkJRVUFNRVV4Q3pBSkJnTlYKQkFZVEFrRlZNUk13RVFZRFZRUUlFd3BUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLRXhoSmJuUmxjbTVsZENCWAphV1JuYVhSeklGQjBlU0JNZEdRd0hoY05NVFV3TnpFek1UUTFNRE16V2hjTk1UVXdPREV5TVRRMU1ETXpXakJGCk1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQk1LVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2hNWVNXNTAKWlhKdVpYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQgpDZ0tDQVFFQTB1cVdPWUF1ZmgxSHZkNUw0WE8zUEZOZituZE8vVGczUGJEcWl4UTZEYUpqcUw2ZWh6eFJYeHJyCmR6U0N6RlN2b2FPRzFNaUpyazlIdUYvYUVyZ0ExdHFnb0crSmx1VVlKOG9VNzRtVFk3Zmt3dHhPUnpoT2JkSmoKbFoxNm5jNGVEaXBjVWtjUFluY0tQSGxsbnR1MXVDSUNNMkl5TmprcUFNd3lPSERrTGNFY0VyQ1F3YVdlSi80VgpGS3NVdndwbTR0cmRwWVcrelUwWkhUdWtuWkhybERrY1l2ZlE2VSt5bjI3ZEZBUWRwb3A5Q0FyNjdsL2Ftd01RCm9ZT1hqVGx6bWFZOURvRHRVazlCY0tGSUhhVDQwbGJFSDV2OTlXeDNaNE1MQ2JhNHRuQ2oyRTFzZ2UrUWFWcEEKck1aazNDTjN0amM5VUlWa2JGdUZmeUNaK1owSlpRSURBUUFCbzRHbk1JR2tNQjBHQTFVZERnUVdCQlNzandwVAp6Q2YzOGhUQmNsRFNvWEFNSkp6Q1NEQjFCZ05WSFNNRWJqQnNnQlNzandwVHpDZjM4aFRCY2xEU29YQU1KSnpDClNLRkpwRWN3UlRFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVkJBZ1RDbE52YldVdFUzUmhkR1V4SVRBZkJnTlYKQkFvVEdFbHVkR1Z5Ym1WMElGZHBaR2RwZEhNZ1VIUjVJRXgwWklJSkFPbnlDcVdPRXgrbE1Bd0dBMVVkRXdRRgpNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFJSk52M3cza0VqSGt5QkNiaURwcFFBczdDU2s1SGJzCisrV0EyZm9sdzZaM3I2SUxHWEpVYmhwaitQZ0V1YTVUTW5ja2VEL0lvMXViYnNqaWZ2eHo1UUJrTDIySHQwdkIKTFJpR1FkMGt2TTFUUkFTUyt2UFk1L096Q2hkUVFPamh0UG5Vc0h2dEVwTHV5SkRlV2QyZTV5cFoveDdmMTZRVApwRG16ajRLNG00YkZPUitSWlQxUkN2SjFDclU1VWR0UzBpWVoyczJmVVJJclQ3Qmo5dDhhdmpReTFxQnNzd1E1CkdFUERTRWVoRC96QzkzMlJsSUw4cGhja05kTHRvZGlMaVlSRU8rTGt6MHdDeWpVTG0vYXVMeWlrNzZ1WlZaR3gKTEJwRUp4WU81bmQvYVViYjNsS3liSXJZYXlkSWJBVk5CcWR1SWxaV3M1cmgwclJFOUZNaDcrbz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo="
193
+ "base64": ""
109
194
  },
110
195
  "client_cert": {
111
- "https://*:443": {
112
- "crt": {
113
- "file_base64": "data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURuVENDQW9VQ0ZFcDd4Z3J2VVhteWEzTEdmcEFpenRNUkJvN3ZNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1JR0sKTVFzd0NRWURWUVFHRXdKRFRqRVFNQTRHQTFVRUNBd0hRbVZwYW1sdVp6RVFNQTRHQTFVRUJ3d0hRbVZwYW1sdQpaekVRTUE0R0ExVUVDZ3dIWVhCcGNHOXpkREVNTUFvR0ExVUVDd3dEWVhCME1SWXdGQVlEVlFRRERBMWpZeTVoCmNHbHdiM04wTG1Oak1SOHdIUVlKS29aSWh2Y05BUWtCRmhCaFpHMXBia0JoY0dsd2IzTjBMbU5qTUI0WERUSXoKTVRJeE1UQTVOREl4TmxvWERUTXpNVEl3T0RBNU5ESXhObG93Z1lveEN6QUpCZ05WQkFZVEFrTk9NUkF3RGdZRApWUVFJREFkQ1pXbHFhVzVuTVJBd0RnWURWUVFIREFkQ1pXbHFhVzVuTVE4d0RRWURWUVFLREFaaGNHbHZjM1F4CkREQUtCZ05WQkFzTUEyRndkREVXTUJRR0ExVUVBd3dOWTJNdVlYQnBjRzl6ZEM1all6RWdNQjRHQ1NxR1NJYjMKRFFFSkFSWVJZMnhwWlc1MFFHRndhWEJ2YzNRdVkyTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBdwpnZ0VLQW9JQkFRRG5DalNwV2MvVEovcXg2ZHRCRUlKeHhpME0wTWc1M091U0lNK2dMVnNseTl4SVFTTndGWGhrCi8vRzhTOVl0d2lnMHpwZVNLUlhyNi9tdklQcjlsY3RBakRrZzQ4Q1BQSk5YYVo1RTdQVkRYbThtTXhhS2RBeXEKZVBkT2w2bGJ0a0pWRTB0cElWTFo4UkhEOWU4VFdiNENMNFBUSzkrNFhVSElEUU1FTUdNbWFnRUVRd3ordDdSTQpMZDVvcVAxdHVUdlhBbmlUbmU4TnZhYVQ3NDlqcFhYb3lnV29FaVcwOGJ3NmI2TmZwVVEyeFBsSkdrc2tiblRhCisyTWVqb1ZrSlpDbDFlOUhOYXV2a085WjhQamRYMG9nZTM0OE5pZW83amNDWWhBUmttanVJanhiMU1kU3dPdjcKMTVWS3EwcFFwbjNzVHJrWTVqdjZEeis3dWhSaXVnN2pBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQgpBRGFCdG10NHVPaVpoVlpHdmo1Tko2RUhUUFNGZGxBaVd6U2tiSWllV2RIY1NhK0J3K2xBM1kyalJsYnZNUVVaCndiL21jaFRtNjFJRmlKbnYvN1h2MGtmMkJxUzkyMURXenJHa3FWQk5zRUdIMEdhWGVHMVMwL1pkNXg1RE4zMlEKRW9IRE95K2lOeDlwRzA2cy8ybUlGY1E3eXQ0cW9acXFQZUg4U3VIamZOanlnZnZFUGxiYUJHb0Y4V1dneFluLwp3TzlFK2pYN3VvdlZDWXVrY3NyaEprZzJwK3o5MUFVU3p2NlpTbHlnK3pGM2kyM1Q0ZXA5VDhwRTV2eXE3UlFnClNPT3BQd25uN0d5UWd2UzREbU5LMHkyazc5ZUdGb3VnTWxnS3g1Um5nMUQxNEd0ZFcvMlE0WGxNa2tHZ1ZsR2IKRVRkcGlES1JKWjNTTDJPZ1RsSFpibWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
114
- "file_name": "client (1).crt",
115
- "file_url": ""
116
- },
117
- "key": {
118
- "file_base64": "",
119
- "file_name": "",
120
- "file_url": ""
121
- },
196
+ "https://cc.apipost.cc:6003": {
122
197
  "password": "",
123
- "pfx": {
124
- "file_base64": "",
125
- "file_name": "",
126
- "file_url": ""
127
- },
128
- "HOST": "https://*:443"
129
- },
130
- "https://apipost.cn:443": {
131
198
  "crt": {
199
+ "file_url": "",
132
200
  "file_base64": "data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURuVENDQW9VQ0ZFcDd4Z3J2VVhteWEzTEdmcEFpenRNUkJvN3ZNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1JR0sKTVFzd0NRWURWUVFHRXdKRFRqRVFNQTRHQTFVRUNBd0hRbVZwYW1sdVp6RVFNQTRHQTFVRUJ3d0hRbVZwYW1sdQpaekVRTUE0R0ExVUVDZ3dIWVhCcGNHOXpkREVNTUFvR0ExVUVDd3dEWVhCME1SWXdGQVlEVlFRRERBMWpZeTVoCmNHbHdiM04wTG1Oak1SOHdIUVlKS29aSWh2Y05BUWtCRmhCaFpHMXBia0JoY0dsd2IzTjBMbU5qTUI0WERUSXoKTVRJeE1UQTVOREl4TmxvWERUTXpNVEl3T0RBNU5ESXhObG93Z1lveEN6QUpCZ05WQkFZVEFrTk9NUkF3RGdZRApWUVFJREFkQ1pXbHFhVzVuTVJBd0RnWURWUVFIREFkQ1pXbHFhVzVuTVE4d0RRWURWUVFLREFaaGNHbHZjM1F4CkREQUtCZ05WQkFzTUEyRndkREVXTUJRR0ExVUVBd3dOWTJNdVlYQnBjRzl6ZEM1all6RWdNQjRHQ1NxR1NJYjMKRFFFSkFSWVJZMnhwWlc1MFFHRndhWEJ2YzNRdVkyTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBdwpnZ0VLQW9JQkFRRG5DalNwV2MvVEovcXg2ZHRCRUlKeHhpME0wTWc1M091U0lNK2dMVnNseTl4SVFTTndGWGhrCi8vRzhTOVl0d2lnMHpwZVNLUlhyNi9tdklQcjlsY3RBakRrZzQ4Q1BQSk5YYVo1RTdQVkRYbThtTXhhS2RBeXEKZVBkT2w2bGJ0a0pWRTB0cElWTFo4UkhEOWU4VFdiNENMNFBUSzkrNFhVSElEUU1FTUdNbWFnRUVRd3ordDdSTQpMZDVvcVAxdHVUdlhBbmlUbmU4TnZhYVQ3NDlqcFhYb3lnV29FaVcwOGJ3NmI2TmZwVVEyeFBsSkdrc2tiblRhCisyTWVqb1ZrSlpDbDFlOUhOYXV2a085WjhQamRYMG9nZTM0OE5pZW83amNDWWhBUmttanVJanhiMU1kU3dPdjcKMTVWS3EwcFFwbjNzVHJrWTVqdjZEeis3dWhSaXVnN2pBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQgpBRGFCdG10NHVPaVpoVlpHdmo1Tko2RUhUUFNGZGxBaVd6U2tiSWllV2RIY1NhK0J3K2xBM1kyalJsYnZNUVVaCndiL21jaFRtNjFJRmlKbnYvN1h2MGtmMkJxUzkyMURXenJHa3FWQk5zRUdIMEdhWGVHMVMwL1pkNXg1RE4zMlEKRW9IRE95K2lOeDlwRzA2cy8ybUlGY1E3eXQ0cW9acXFQZUg4U3VIamZOanlnZnZFUGxiYUJHb0Y4V1dneFluLwp3TzlFK2pYN3VvdlZDWXVrY3NyaEprZzJwK3o5MUFVU3p2NlpTbHlnK3pGM2kyM1Q0ZXA5VDhwRTV2eXE3UlFnClNPT3BQd25uN0d5UWd2UzREbU5LMHkyazc5ZUdGb3VnTWxnS3g1Um5nMUQxNEd0ZFcvMlE0WGxNa2tHZ1ZsR2IKRVRkcGlES1JKWjNTTDJPZ1RsSFpibWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
133
- "file_name": "client (1).crt",
134
- "file_url": ""
201
+ "file_name": "client (1).crt"
135
202
  },
136
203
  "key": {
137
- "file_base64": "data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR0VENDQXAyZ0F3SUJBZ0lKQU9ueUNxV09FeCtsTUEwR0NTcUdTSWIzRFFFQkJRVUFNRVV4Q3pBSkJnTlYKQkFZVEFrRlZNUk13RVFZRFZRUUlFd3BUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLRXhoSmJuUmxjbTVsZENCWAphV1JuYVhSeklGQjBlU0JNZEdRd0hoY05NVFV3TnpFek1UUTFNRE16V2hjTk1UVXdPREV5TVRRMU1ETXpXakJGCk1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQk1LVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2hNWVNXNTAKWlhKdVpYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQgpDZ0tDQVFFQTB1cVdPWUF1ZmgxSHZkNUw0WE8zUEZOZituZE8vVGczUGJEcWl4UTZEYUpqcUw2ZWh6eFJYeHJyCmR6U0N6RlN2b2FPRzFNaUpyazlIdUYvYUVyZ0ExdHFnb0crSmx1VVlKOG9VNzRtVFk3Zmt3dHhPUnpoT2JkSmoKbFoxNm5jNGVEaXBjVWtjUFluY0tQSGxsbnR1MXVDSUNNMkl5TmprcUFNd3lPSERrTGNFY0VyQ1F3YVdlSi80VgpGS3NVdndwbTR0cmRwWVcrelUwWkhUdWtuWkhybERrY1l2ZlE2VSt5bjI3ZEZBUWRwb3A5Q0FyNjdsL2Ftd01RCm9ZT1hqVGx6bWFZOURvRHRVazlCY0tGSUhhVDQwbGJFSDV2OTlXeDNaNE1MQ2JhNHRuQ2oyRTFzZ2UrUWFWcEEKck1aazNDTjN0amM5VUlWa2JGdUZmeUNaK1owSlpRSURBUUFCbzRHbk1JR2tNQjBHQTFVZERnUVdCQlNzandwVAp6Q2YzOGhUQmNsRFNvWEFNSkp6Q1NEQjFCZ05WSFNNRWJqQnNnQlNzandwVHpDZjM4aFRCY2xEU29YQU1KSnpDClNLRkpwRWN3UlRFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVkJBZ1RDbE52YldVdFUzUmhkR1V4SVRBZkJnTlYKQkFvVEdFbHVkR1Z5Ym1WMElGZHBaR2RwZEhNZ1VIUjVJRXgwWklJSkFPbnlDcVdPRXgrbE1Bd0dBMVVkRXdRRgpNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFJSk52M3cza0VqSGt5QkNiaURwcFFBczdDU2s1SGJzCisrV0EyZm9sdzZaM3I2SUxHWEpVYmhwaitQZ0V1YTVUTW5ja2VEL0lvMXViYnNqaWZ2eHo1UUJrTDIySHQwdkIKTFJpR1FkMGt2TTFUUkFTUyt2UFk1L096Q2hkUVFPamh0UG5Vc0h2dEVwTHV5SkRlV2QyZTV5cFoveDdmMTZRVApwRG16ajRLNG00YkZPUitSWlQxUkN2SjFDclU1VWR0UzBpWVoyczJmVVJJclQ3Qmo5dDhhdmpReTFxQnNzd1E1CkdFUERTRWVoRC96QzkzMlJsSUw4cGhja05kTHRvZGlMaVlSRU8rTGt6MHdDeWpVTG0vYXVMeWlrNzZ1WlZaR3gKTEJwRUp4WU81bmQvYVViYjNsS3liSXJZYXlkSWJBVk5CcWR1SWxaV3M1cmgwclJFOUZNaDcrbz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
138
- "file_name": "cert.pem",
139
- "file_url": ""
204
+ "file_url": "",
205
+ "file_base64": "data:application/x-iwork-keynote-sffkey;base64,LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBNXdvMHFWblAweWY2c2VuYlFSQ0NjY1l0RE5ESU9kenJraURQb0MxYkpjdmNTRUVqCmNCVjRaUC94dkV2V0xjSW9OTTZYa2lrVjYrdjVyeUQ2L1pYTFFJdzVJT1BBanp5VFYybWVST3oxUTE1dkpqTVcKaW5RTXFuajNUcGVwVzdaQ1ZSTkxhU0ZTMmZFUncvWHZFMW0rQWkrRDB5dmZ1RjFCeUEwREJEQmpKbW9CQkVNTQovcmUwVEMzZWFLajliYms3MXdKNGs1M3ZEYjJtaysrUFk2VjE2TW9GcUJJbHRQRzhPbStqWDZWRU5zVDVTUnBMCkpHNTAydnRqSG82RlpDV1FwZFh2UnpXcnI1RHZXZkQ0M1Y5S0lIdCtQRFlucU80M0FtSVFFWkpvN2lJOFc5VEgKVXNEcis5ZVZTcXRLVUtaOTdFNjVHT1k3K2c4L3U3b1VZcm9PNHdJREFRQUJBb0lCQUNXckQwenhIS1lqcFlidQpSdFlEMkJDdXE5ZWtEcEVJaU12SlY3Q1kxSHlFRVVVaWdhR2Jqb2FCQ0N1WC9iSjJMbEgxd05hT3BrbFJydUt6CnNOZzVYT3NJTWFSQUhidjh0MVVRSGtMRWszUkphRHZGSm82cVB3cG9NSUg2emh6cXlVUFBvb0xnY1A2aGhERDcKM3QrN3lQUFlSVmpmbFZrY3MwWG5nUzlrcURXeDBXZStWOGFJMVJCOXVIbUdDcmo4djFZaHFSRWl2dXl4eUVXQwpZSkowVFRqSVhtMC92OVNJRE5FTjJKVExkYmlIdDBvQm9PZk1CWk5MSmhjSWI4cHkvTW5SYW9IN1EvN2VZQllQClNnMzJycXYvZlNjZGhWakltbTNyWEtaclV5NlErcUpNNGp1MCtpV0E4MzRzd2NiaGZhbU5XR2tLcUYzVmo4WEEKendGbkVjRUNnWUVBK056RHpxb3Vlbk9iZE5ORTdFa2FaTDc4TFFlL0VhTkYycHlhS2IvWTFac2F5U2ozSUMxbAp2RCs0V1hQamZJVWl3SldGeEtONGZyVnlldCtZWGhOZ0p3eU9wb2gyZmlaNzExR0paSWRudGFDV3lmRnpGVS8rClZQUm1yUUxIWS9MNHRhdnByTzlhTHBYVWVSYlc0NXVBbUZ5YUtJck1qSkFzMnFpeitKYUxGbUVDZ1lFQTdhcVUKOEE5SHpkVDFsQzB1ZlRoNG1Cdm43enpvSXJHNmY3amhvRVZuazEwWmozKy9pNEFmWEw3VHRuQmtXaTJvZElKbApDb2ZXdGRWbUxvTkhpOER0ZldyWFkzOWhra0ZSSEo5Y01qNEozcEJmaVp0ZUJyaFhucDg1c0xDS0pnWGVNZDNEClhkZVl1TERuczR3Y3FZTnpkbDRQL2cvRGl5RFB5Y29tc3NmdzQ4TUNnWUVBc2pUVWVwOWZIUXpBRzQ1V1lxV08Kb3Vvb2hzNXZRbUFhMjRzYzBoeXhWM1QwWDJ4WVd0Qm5jOEJsY0prT0k5THFxZUhvb29FMC9mZE0vVFEwVmRtbQpGeEJrN2xmMkVpdllycjJTbDB4bk5hYkRrK1MwdG1STUNlWGh5SzZldmJIMTY1SXBpVTcwMHpzenBXcDNneEdOCnFvMVZUd2JscHhwdkpEMStjdHJLeXNFQ2dZRUFyMlo0T3Q4Y0lCVnVGS2h2cWV5Mlc1UWt6UlJIUWV1bTkwSU0KQ2t1T2tGeGlVOXgxRWRCQjFTSGtmNzFjNG96VnlQNis4VkdsTFZkTDdVSG4ySVZQQUlPTWFKc0crSGlLRXpTdApSMHN2MzNqdmVWQVh5Wi9jMG0weWwyc0MyZUwweEJxbFo2bUl4YTJSb3BuaVFWeUpKeTl1WUJOa1BsYTk0Mi8wCnRYY0lHaDhDZ1lCbHJBaVdIOGU4aEhkWjdxTjNOTk51cVkvQjdJWFNPdzFIMEVKbjd3Ui9tZElzalFRYkJGL3gKa05YNndvZDVFeHBzRkVER2lJQ0RiQm1FbW5oaU1TWFBXREhoalZKSkFSUG5sL2Fxc0tNemt0dXdic29DbGQ2OApkT1hkbHNtbGhYZVdrcGp5ZUdCREZ5Y3hPdW80M3F6VzdOOUNpQ285dXBuNGZrSEg3Si95Znc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=",
206
+ "file_name": "client (1).key"
140
207
  },
141
- "password": "1234",
142
208
  "pfx": {
143
- "file_base64": "data:application/x-iwork-keynote-sffkey;base64,LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBNXdvMHFWblAweWY2c2VuYlFSQ0NjY1l0RE5ESU9kenJraURQb0MxYkpjdmNTRUVqCmNCVjRaUC94dkV2V0xjSW9OTTZYa2lrVjYrdjVyeUQ2L1pYTFFJdzVJT1BBanp5VFYybWVST3oxUTE1dkpqTVcKaW5RTXFuajNUcGVwVzdaQ1ZSTkxhU0ZTMmZFUncvWHZFMW0rQWkrRDB5dmZ1RjFCeUEwREJEQmpKbW9CQkVNTQovcmUwVEMzZWFLajliYms3MXdKNGs1M3ZEYjJtaysrUFk2VjE2TW9GcUJJbHRQRzhPbStqWDZWRU5zVDVTUnBMCkpHNTAydnRqSG82RlpDV1FwZFh2UnpXcnI1RHZXZkQ0M1Y5S0lIdCtQRFlucU80M0FtSVFFWkpvN2lJOFc5VEgKVXNEcis5ZVZTcXRLVUtaOTdFNjVHT1k3K2c4L3U3b1VZcm9PNHdJREFRQUJBb0lCQUNXckQwenhIS1lqcFlidQpSdFlEMkJDdXE5ZWtEcEVJaU12SlY3Q1kxSHlFRVVVaWdhR2Jqb2FCQ0N1WC9iSjJMbEgxd05hT3BrbFJydUt6CnNOZzVYT3NJTWFSQUhidjh0MVVRSGtMRWszUkphRHZGSm82cVB3cG9NSUg2emh6cXlVUFBvb0xnY1A2aGhERDcKM3QrN3lQUFlSVmpmbFZrY3MwWG5nUzlrcURXeDBXZStWOGFJMVJCOXVIbUdDcmo4djFZaHFSRWl2dXl4eUVXQwpZSkowVFRqSVhtMC92OVNJRE5FTjJKVExkYmlIdDBvQm9PZk1CWk5MSmhjSWI4cHkvTW5SYW9IN1EvN2VZQllQClNnMzJycXYvZlNjZGhWakltbTNyWEtaclV5NlErcUpNNGp1MCtpV0E4MzRzd2NiaGZhbU5XR2tLcUYzVmo4WEEKendGbkVjRUNnWUVBK056RHpxb3Vlbk9iZE5ORTdFa2FaTDc4TFFlL0VhTkYycHlhS2IvWTFac2F5U2ozSUMxbAp2RCs0V1hQamZJVWl3SldGeEtONGZyVnlldCtZWGhOZ0p3eU9wb2gyZmlaNzExR0paSWRudGFDV3lmRnpGVS8rClZQUm1yUUxIWS9MNHRhdnByTzlhTHBYVWVSYlc0NXVBbUZ5YUtJck1qSkFzMnFpeitKYUxGbUVDZ1lFQTdhcVUKOEE5SHpkVDFsQzB1ZlRoNG1Cdm43enpvSXJHNmY3amhvRVZuazEwWmozKy9pNEFmWEw3VHRuQmtXaTJvZElKbApDb2ZXdGRWbUxvTkhpOER0ZldyWFkzOWhra0ZSSEo5Y01qNEozcEJmaVp0ZUJyaFhucDg1c0xDS0pnWGVNZDNEClhkZVl1TERuczR3Y3FZTnpkbDRQL2cvRGl5RFB5Y29tc3NmdzQ4TUNnWUVBc2pUVWVwOWZIUXpBRzQ1V1lxV08Kb3Vvb2hzNXZRbUFhMjRzYzBoeXhWM1QwWDJ4WVd0Qm5jOEJsY0prT0k5THFxZUhvb29FMC9mZE0vVFEwVmRtbQpGeEJrN2xmMkVpdllycjJTbDB4bk5hYkRrK1MwdG1STUNlWGh5SzZldmJIMTY1SXBpVTcwMHpzenBXcDNneEdOCnFvMVZUd2JscHhwdkpEMStjdHJLeXNFQ2dZRUFyMlo0T3Q4Y0lCVnVGS2h2cWV5Mlc1UWt6UlJIUWV1bTkwSU0KQ2t1T2tGeGlVOXgxRWRCQjFTSGtmNzFjNG96VnlQNis4VkdsTFZkTDdVSG4ySVZQQUlPTWFKc0crSGlLRXpTdApSMHN2MzNqdmVWQVh5Wi9jMG0weWwyc0MyZUwweEJxbFo2bUl4YTJSb3BuaVFWeUpKeTl1WUJOa1BsYTk0Mi8wCnRYY0lHaDhDZ1lCbHJBaVdIOGU4aEhkWjdxTjNOTk51cVkvQjdJWFNPdzFIMEVKbjd3Ui9tZElzalFRYkJGL3gKa05YNndvZDVFeHBzRkVER2lJQ0RiQm1FbW5oaU1TWFBXREhoalZKSkFSUG5sL2Fxc0tNemt0dXdic29DbGQ2OApkT1hkbHNtbGhYZVdrcGp5ZUdCREZ5Y3hPdW80M3F6VzdOOUNpQ285dXBuNGZrSEg3Si95Znc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=",
144
- "file_name": "client (1).key",
145
- "file_url": ""
209
+ "file_url": "",
210
+ "file_base64": "",
211
+ "file_name": ""
146
212
  },
147
- "HOST": "https://apipost.cn:443"
213
+ "HOST": "https://cc.apipost.cc:6003"
148
214
  }
149
215
  }
150
216
  },
151
- "custom_functions": {},
217
+ "custom_functions": {
218
+ "fn_test04": "\n// 返回函數處理後的text,text為函數的入參 \nreturn text.includes(\"To be\");"
219
+ },
152
220
  "collection": [
153
221
  {
154
- "target_id": "3d55b1a07d6046",
222
+ "target_id": "2d1574ffab006",
155
223
  "target_type": "api",
156
224
  "parent_id": "0",
157
- "name": "GET 请求API",
225
+ "name": "post接口",
158
226
  "request": {
159
227
  "auth": {
160
228
  "type": "inherit"
161
229
  },
230
+ "header": {
231
+ "parameter": []
232
+ },
233
+ "query": {
234
+ "query_add_equal": 1,
235
+ "parameter": []
236
+ },
237
+ "restful": {
238
+ "parameter": []
239
+ },
240
+ "cookie": {
241
+ "cookie_encode": 1,
242
+ "parameter": []
243
+ },
162
244
  "body": {
163
- "mode": "urlencoded",
164
- "parameter": [],
165
- "raw": "{\n \"id\": 1,\n \"name\": \"\"\n}",
166
- "raw_parameter": [
245
+ "mode": "form-data",
246
+ "parameter": [
167
247
  {
168
- "param_id": "2b835c6eb86902c",
169
- "description": "用户主键id",
170
- "field_type": "Long",
171
- "is_checked": 1,
172
- "key": "id",
248
+ "param_id": "2d54bf27713cb",
249
+ "key": "mock",
250
+ "value": "{{$mockjs.date()|format(YYYY-MM-DD HH:mm:ss,+08:00)}}",
251
+ "field_type": "string",
173
252
  "not_null": 1,
174
- "value": "1"
253
+ "description": "反回时间",
254
+ "is_checked": 1,
255
+ "content_type": "string"
175
256
  },
176
257
  {
177
- "param_id": "2b835c6eb86902d",
178
- "description": "用户主键id",
258
+ "param_id": "2d54dd0f713cc",
259
+ "key": "mock1",
260
+ "value": "{{$fakerjs.Animal.bear}}",
179
261
  "field_type": "string",
180
- "is_checked": 1,
181
- "key": "name",
182
262
  "not_null": 1,
183
- "value": "",
184
- "schema": {
185
- "type": "string"
186
- }
263
+ "description": "返回熊类型",
264
+ "is_checked": 1,
265
+ "content_type": "string"
187
266
  }
188
267
  ],
268
+ "binary": "",
269
+ "raw": "{\n \"storeName\": \"SuperMart Online\",\n \"categories\": [\n {\n \"categoryName\": \"Electronics\",\n \"products\": [\n {\n \"productId\": 1,\n \"productName\": \"Smartphone X Pro\",\n \"brand\": \"TechGiant\",\n \"model\": \"X Pro 2025\",\n \"description\": \"The Smartphone X Pro is a high - end device with a 6.7 - inch AMOLED display, 5G connectivity, and a powerful octa - core processor. It comes with 12GB of RAM and 256GB of internal storage. The triple - camera setup on the back provides excellent photography capabilities, and the front - facing camera is great for selfies and video calls.\",\n \"price\": 999.99,\n \"stock\": 50,\n \"reviews\": [\n {\n \"reviewerName\": \"JohnDoe123\",\n \"rating\": 4.5,\n \"comment\": \"This phone is amazing! The display is sharp, and the performance is top - notch. The camera takes great photos, and the battery life is decent.\"\n },\n {\n \"reviewerName\": \"JaneSmith456\",\n \"rating\": 4.0,\n \"comment\": \"Overall, a great phone. However, I found the fingerprint sensor to be a bit slow at times.\"\n }\n ]\n },\n {\n \"productId\": 2,\n \"productName\": \"Laptop ProBook\",\n \"brand\": \"CompuTech\",\n \"model\": \"ProBook 5000\",\n \"description\": \"The Laptop ProBook is a powerful and portable laptop designed for professionals. It features a 15.6 - inch Full HD display, an Intel Core i7 processor, 16GB of RAM, and a 512GB SSD. It also comes with a backlit keyboard and a long - lasting battery, making it ideal for on - the - go work.\",\n \"price\": 1499.99,\n \"stock\": 30,\n \"reviews\": [\n {\n \"reviewerName\": \"TechEnthusiast789\",\n \"rating\": 4.8,\n \"comment\": \"This laptop is a beast! It handles all my work tasks with ease, and the battery life is impressive. The build quality is also very good.\"\n },\n {\n \"reviewerName\": \"OfficeWorker234\",\n \"rating\": 4.2,\n \"comment\": \"I'm very happy with my purchase. The only thing I would like to see improved is the display brightness in direct sunlight.\"\n }\n ]\n }\n ]\n },\n {\n \"categoryName\": \"Clothing\",\n \"products\": [\n {\n \"productId\": 3,\n \"productName\": \"Men's Cotton Shirt\",\n \"brand\": \"FashionFusion\",\n \"model\": \"Classic Fit\",\n \"description\": \"This men's cotton shirt is made from high - quality, breathable cotton. It has a classic fit, a button - down collar, and long sleeves. It comes in a variety of colors and is perfect for both casual and semi - formal occasions.\",\n \"price\": 49.99,\n \"stock\": 100,\n \"reviews\": [\n {\n \"reviewerName\": \"StyleGuy567\",\n \"rating\": 4.0,\n \"comment\": \"The shirt fits well and is comfortable to wear. The color is exactly as shown in the picture.\"\n },\n {\n \"reviewerName\": \"BusinessMan890\",\n \"rating\": 3.5,\n \"comment\": \"The shirt is okay, but I expected the fabric to be a bit thicker.\"\n }\n ]\n },\n {\n \"productId\": 4,\n \"productName\": \"Women's Summer Dress\",\n \"brand\": \"ChicStyles\",\n \"model\": \"Floral Print\",\n \"description\": \"This women's summer dress is a trendy and feminine piece. It features a floral print, a V - neckline, and a flowy skirt. It is made from lightweight and comfortable fabric, making it perfect for warm summer days.\",\n \"price\": 79.99,\n \"stock\": 80,\n \"reviews\": [\n {\n \"reviewerName\": \"Fashionista123\",\n \"rating\": 4.7,\n \"comment\": \"This dress is so cute! I love the floral print and the way it fits. It's my new favorite summer dress.\"\n },\n {\n \"reviewerName\": \"BeachLover456\",\n \"rating\": 4.3,\n \"comment\": \"The dress is very comfortable and looks great on. However, the sizing runs a bit small, so I had to order a size up.\"\n }\n ]\n }\n ]\n },\n {\n \"categoryName\": \"Home Appliances\",\n \"products\": [\n {\n \"productId\": 5,\n \"productName\": \"Refrigerator CoolMaster\",\n \"brand\": \"HomeTech\",\n \"model\": \"CoolMaster 3000\",\n \"description\": \"The Refrigerator CoolMaster is a large - capacity refrigerator with advanced cooling technology. It has a spacious interior, adjustable shelves, and a built - in ice maker. It also features energy - saving mode, making it an environmentally friendly choice.\",\n \"price\": 1999.99,\n \"stock\": 20,\n \"reviews\": [\n {\n \"reviewerName\": \"HomeOwner789\",\n \"rating\": 4.6,\n \"comment\": \"This refrigerator is amazing! It has a lot of space, and the ice maker works great. The energy - saving mode is a plus.\"\n },\n {\n \"reviewerName\": \"KitchenExpert234\",\n \"rating\": 4.1,\n \"comment\": \"The refrigerator is well - built, but the noise level could be a bit lower.\"\n }\n ]\n },\n {\n \"productId\": 6,\n \"productName\": \"Coffee Maker BrewPro\",\n \"brand\": \"KitchenWiz\",\n \"model\": \"BrewPro 200\",\n \"description\": \"The Coffee Maker BrewPro is a programmable coffee maker that can brew up to 12 cups of coffee at a time. It has a built - in grinder, a water filter, and a keep - warm function. It also comes with a user - friendly control panel, making it easy to use.\",\n \"price\": 129.99,\n \"stock\": 60,\n \"reviews\": [\n {\n \"reviewerName\": \"CoffeeAddict567\",\n \"rating\": 4.4,\n \"comment\": \"This coffee maker makes great coffee! The grinder is very efficient, and the keep - warm function works well.\"\n },\n {\n \"reviewerName\": \"BreakfastLover890\",\n \"rating\": 4.0,\n \"comment\": \"The coffee maker is easy to use, but the cleaning process could be a bit simpler.\"\n }\n ]\n }\n ]\n }\n ]\n}",
270
+ "raw_parameter": [],
189
271
  "raw_schema": {
190
272
  "type": "object"
191
- },
192
- "binary": {}
273
+ }
193
274
  },
194
275
  "pre_tasks": [],
195
276
  "post_tasks": [
196
- {
197
- "type": "customScript",
198
- "enabled": 1,
199
- "data": "pm.environment.set(\"code\", 201);\napt.test(\"正文匹配含有字符串\", function () {\n apt.expect(apt.response.text()).to.include(\"期望查找的字符串\");\n });",
200
- "name": "自定义脚本",
201
- "id": "3d53b40ffd6022"
202
- },
203
- {
204
- "type": "database",
205
- "enabled": 1,
206
- "data": {
207
- "variables": [],
208
- "connectionId": "2b9e0de71864000",
209
- "isConsoleOutput": -1,
210
- "query": ""
211
- },
212
- "name": "数据库",
213
- "id": "bcb573cb17048"
214
- },
215
277
  {
216
278
  "type": "assert",
279
+ "id": "c48d63a3a3006",
280
+ "name": "断言1111111",
217
281
  "enabled": 1,
218
282
  "data": {
219
- "type": "responseJson",
283
+ "type": "responseTime",
220
284
  "expression": {
221
- "compareValue": "",
222
- "path": "",
223
- "compareType": "eq"
224
- }
225
- },
226
- "name": "断言",
227
- "id": "bcb5b9931704a"
228
- }
229
- ],
230
- "header": {
231
- "parameter": []
232
- },
233
- "query": {
234
- "query_add_equal": 1,
235
- "parameter": [
236
- {
237
- "param_id": "3d55bc7d39b04a",
238
- "description": "",
239
- "field_type": "string",
240
- "is_checked": 1,
241
- "key": "id",
242
- "not_null": 1,
243
- "value": "1",
244
- "schema": {
245
- "type": "string"
246
- }
247
- },
248
- {
249
- "param_id": "bca53b876e042",
250
- "description": "",
251
- "field_type": "string",
252
- "is_checked": 1,
253
- "key": "",
254
- "not_null": 1,
255
- "value": "",
256
- "schema": {
257
- "type": "string"
285
+ "compareType": "lt",
286
+ "compareValue": "30",
287
+ "path": "1"
258
288
  }
259
289
  }
260
- ]
261
- },
262
- "cookie": {
263
- "cookie_encode": 1,
264
- "parameter": []
265
- },
266
- "restful": {
267
- "parameter": []
268
- }
290
+ }
291
+ ]
269
292
  },
270
293
  "parents": [],
271
- "method": "GET",
294
+ "method": "POST",
272
295
  "protocol": "http/1.1",
273
- "url": "https://httpbin.org/get?id=1",
296
+ "url": "go.apipost.cn",
274
297
  "pre_url": ""
275
298
  }
276
299
  ],
277
- "database_configs": {
278
- "2b9e0de71864000": {
279
- "type": "mysql",
280
- "dbconfig": {
281
- "host": "10.10.10.20",
282
- "port": 3306,
283
- "user": "root",
284
- "password": "12333333333",
285
- "database": "apipost",
286
- "auth_source": ""
287
- },
288
- "ssh": {
289
- "enable": -1,
290
- "host": "",
291
- "port": 22,
292
- "auth_type": 1,
293
- "username": "",
294
- "password": "",
295
- "private_key": "",
296
- "passphrase": ""
297
- }
298
- }
299
- },
300
- "name": "未命名测试用例",
300
+ "database_configs": {},
301
+ "name": "【勿动】自动化测试循环——满足条件跳出循环,一直不执行",
301
302
  "ignore_error": -1,
302
303
  "enable_sandbox": -1,
303
304
  "iterationCount": 1,
304
305
  "sleep": 0,
305
- "testing_id": "c754fff306002",
306
+ "testing_id": "640959ffab519",
306
307
  "iterates_data_id": "0",
307
308
  "iterationData": []
308
309
  },
309
310
  "test_events": [
310
311
  {
311
- "parent_event_id": "0",
312
- "enabled": 1,
313
- "type": "if",
314
312
  "data": {
315
- "var": "1",
316
- "compare": "eq",
317
- "value": "1"
313
+ "name": "满足条件退出循环",
314
+ "sleep": 0,
315
+ "loop_type": 3,
316
+ "loop_timeout": 0,
317
+ "loop_condition": {
318
+ "var": "1",
319
+ "value": "1",
320
+ "compare": "uneq"
321
+ },
322
+ "loop_traverse_data": {
323
+ "name": "",
324
+ "type": 1,
325
+ "iterationData": []
326
+ }
318
327
  },
319
- "project_id": "2adc267c9064000",
320
- "test_id": "c754fff306002",
321
- "event_id": "c7552c4306003",
322
328
  "sort": 1,
329
+ "type": "loop",
330
+ "enabled": 1,
331
+ "test_id": "640959ffab519",
332
+ "event_id": "640e4777ab51b",
333
+ "project_id": "1a89866533408002",
334
+ "parent_event_id": "0",
323
335
  "children": [
324
336
  {
325
337
  "type": "api",
326
- "auto_sync": true,
327
- "test_id": "c754fff306002",
328
- "event_id": "c756447b06005",
338
+ "auto_sync": false,
339
+ "test_id": "640959ffab519",
340
+ "event_id": "640e9153ab51d",
329
341
  "enabled": 1,
330
342
  "data": {
331
- "target_id": "3d55b1a07d6046",
332
- "project_id": "2adc267c9064000",
343
+ "target_id": "2d1574ffab006",
344
+ "project_id": "1a89866533408002",
333
345
  "parent_id": "0",
334
- "target_type": "api"
346
+ "target_type": "api",
347
+ "apiData": {
348
+ "name": "post接口",
349
+ "method": "POST",
350
+ "protocol": "http/1.1",
351
+ "url": "{{url}}",
352
+ "request": {
353
+ "auth": {
354
+ "type": "inherit"
355
+ },
356
+ "body": {
357
+ "raw": "{\n \"storeName\": \"SuperMart Online\",\n \"categories\": [\n {\n \"categoryName\": \"Electronics\",\n \"products\": [\n {\n \"productId\": 1,\n \"productName\": \"Smartphone X Pro\",\n \"brand\": \"TechGiant\",\n \"model\": \"X Pro 2025\",\n \"description\": \"The Smartphone X Pro is a high - end device with a 6.7 - inch AMOLED display, 5G connectivity, and a powerful octa - core processor. It comes with 12GB of RAM and 256GB of internal storage. The triple - camera setup on the back provides excellent photography capabilities, and the front - facing camera is great for selfies and video calls.\",\n \"price\": 999.99,\n \"stock\": 50,\n \"reviews\": [\n {\n \"reviewerName\": \"JohnDoe123\",\n \"rating\": 4.5,\n \"comment\": \"This phone is amazing! The display is sharp, and the performance is top - notch. The camera takes great photos, and the battery life is decent.\"\n },\n {\n \"reviewerName\": \"JaneSmith456\",\n \"rating\": 4.0,\n \"comment\": \"Overall, a great phone. However, I found the fingerprint sensor to be a bit slow at times.\"\n }\n ]\n },\n {\n \"productId\": 2,\n \"productName\": \"Laptop ProBook\",\n \"brand\": \"CompuTech\",\n \"model\": \"ProBook 5000\",\n \"description\": \"The Laptop ProBook is a powerful and portable laptop designed for professionals. It features a 15.6 - inch Full HD display, an Intel Core i7 processor, 16GB of RAM, and a 512GB SSD. It also comes with a backlit keyboard and a long - lasting battery, making it ideal for on - the - go work.\",\n \"price\": 1499.99,\n \"stock\": 30,\n \"reviews\": [\n {\n \"reviewerName\": \"TechEnthusiast789\",\n \"rating\": 4.8,\n \"comment\": \"This laptop is a beast! It handles all my work tasks with ease, and the battery life is impressive. The build quality is also very good.\"\n },\n {\n \"reviewerName\": \"OfficeWorker234\",\n \"rating\": 4.2,\n \"comment\": \"I'm very happy with my purchase. The only thing I would like to see improved is the display brightness in direct sunlight.\"\n }\n ]\n }\n ]\n },\n {\n \"categoryName\": \"Clothing\",\n \"products\": [\n {\n \"productId\": 3,\n \"productName\": \"Men's Cotton Shirt\",\n \"brand\": \"FashionFusion\",\n \"model\": \"Classic Fit\",\n \"description\": \"This men's cotton shirt is made from high - quality, breathable cotton. It has a classic fit, a button - down collar, and long sleeves. It comes in a variety of colors and is perfect for both casual and semi - formal occasions.\",\n \"price\": 49.99,\n \"stock\": 100,\n \"reviews\": [\n {\n \"reviewerName\": \"StyleGuy567\",\n \"rating\": 4.0,\n \"comment\": \"The shirt fits well and is comfortable to wear. The color is exactly as shown in the picture.\"\n },\n {\n \"reviewerName\": \"BusinessMan890\",\n \"rating\": 3.5,\n \"comment\": \"The shirt is okay, but I expected the fabric to be a bit thicker.\"\n }\n ]\n },\n {\n \"productId\": 4,\n \"productName\": \"Women's Summer Dress\",\n \"brand\": \"ChicStyles\",\n \"model\": \"Floral Print\",\n \"description\": \"This women's summer dress is a trendy and feminine piece. It features a floral print, a V - neckline, and a flowy skirt. It is made from lightweight and comfortable fabric, making it perfect for warm summer days.\",\n \"price\": 79.99,\n \"stock\": 80,\n \"reviews\": [\n {\n \"reviewerName\": \"Fashionista123\",\n \"rating\": 4.7,\n \"comment\": \"This dress is so cute! I love the floral print and the way it fits. It's my new favorite summer dress.\"\n },\n {\n \"reviewerName\": \"BeachLover456\",\n \"rating\": 4.3,\n \"comment\": \"The dress is very comfortable and looks great on. However, the sizing runs a bit small, so I had to order a size up.\"\n }\n ]\n }\n ]\n },\n {\n \"categoryName\": \"Home Appliances\",\n \"products\": [\n {\n \"productId\": 5,\n \"productName\": \"Refrigerator CoolMaster\",\n \"brand\": \"HomeTech\",\n \"model\": \"CoolMaster 3000\",\n \"description\": \"The Refrigerator CoolMaster is a large - capacity refrigerator with advanced cooling technology. It has a spacious interior, adjustable shelves, and a built - in ice maker. It also features energy - saving mode, making it an environmentally friendly choice.\",\n \"price\": 1999.99,\n \"stock\": 20,\n \"reviews\": [\n {\n \"reviewerName\": \"HomeOwner789\",\n \"rating\": 4.6,\n \"comment\": \"This refrigerator is amazing! It has a lot of space, and the ice maker works great. The energy - saving mode is a plus.\"\n },\n {\n \"reviewerName\": \"KitchenExpert234\",\n \"rating\": 4.1,\n \"comment\": \"The refrigerator is well - built, but the noise level could be a bit lower.\"\n }\n ]\n },\n {\n \"productId\": 6,\n \"productName\": \"Coffee Maker BrewPro\",\n \"brand\": \"KitchenWiz\",\n \"model\": \"BrewPro 200\",\n \"description\": \"The Coffee Maker BrewPro is a programmable coffee maker that can brew up to 12 cups of coffee at a time. It has a built - in grinder, a water filter, and a keep - warm function. It also comes with a user - friendly control panel, making it easy to use.\",\n \"price\": 129.99,\n \"stock\": 60,\n \"reviews\": [\n {\n \"reviewerName\": \"CoffeeAddict567\",\n \"rating\": 4.4,\n \"comment\": \"This coffee maker makes great coffee! The grinder is very efficient, and the keep - warm function works well.\"\n },\n {\n \"reviewerName\": \"BreakfastLover890\",\n \"rating\": 4.0,\n \"comment\": \"The coffee maker is easy to use, but the cleaning process could be a bit simpler.\"\n }\n ]\n }\n ]\n }\n ]\n}",
358
+ "mode": "form-data",
359
+ "binary": "",
360
+ "parameter": [
361
+ {
362
+ "key": "mock",
363
+ "value": "{{$mockjs.date()|format(YYYY-MM-DD HH:mm:ss,+08:00)}}",
364
+ "not_null": 1,
365
+ "param_id": "2d54bf27713cb",
366
+ "field_type": "string",
367
+ "is_checked": 1,
368
+ "description": "反回时间",
369
+ "content_type": "string"
370
+ },
371
+ {
372
+ "key": "mock1",
373
+ "value": "{{$fakerjs.Animal.bear}}",
374
+ "not_null": 1,
375
+ "param_id": "2d54dd0f713cc",
376
+ "field_type": "string",
377
+ "is_checked": 1,
378
+ "description": "返回熊类型",
379
+ "content_type": "string"
380
+ }
381
+ ],
382
+ "raw_schema": {
383
+ "type": "object"
384
+ },
385
+ "raw_parameter": []
386
+ },
387
+ "query": {
388
+ "parameter": [],
389
+ "query_add_equal": 1
390
+ },
391
+ "cookie": {
392
+ "parameter": [],
393
+ "cookie_encode": 1
394
+ },
395
+ "header": {
396
+ "parameter": []
397
+ },
398
+ "restful": {
399
+ "parameter": []
400
+ },
401
+ "pre_tasks": [],
402
+ "post_tasks": []
403
+ }
404
+ }
335
405
  }
336
406
  }
337
407
  ]
338
- },
339
- {
340
- "parent_event_id": "0",
341
- "enabled": 1,
342
- "type": "wait",
343
- "data": {
344
- "sleep": 1000
345
- },
346
- "project_id": "2adc267c9064000",
347
- "test_id": "c754fff306002",
348
- "event_id": "c757153f06006",
349
- "sort": 3
350
408
  }
351
409
  ]
352
410
  }