runner-runtime 1.0.60 → 1.0.63

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
@@ -2024,16 +2024,20 @@ const initRequestJson = (event, option) => {
2024
2024
  _.unset(cookieArr);
2025
2025
 
2026
2026
  // 前置URL
2027
- if (!_.isString(envServerID)) {
2027
+ if (!_.isString(envServerID) || _.toString(envServerID) === "0") {
2028
2028
  envServerID = "1";
2029
2029
  }
2030
2030
 
2031
2031
  const requestUrl = _.isString(_.get(requestJson, 'url')) ? _.get(requestJson, 'url') : _.get(requestJson, 'request.url');
2032
2032
  const { globals, env } = option;
2033
2033
 
2034
- let envPreUrl = _.trim(_.get(_.find(_.get(option, `env.env_pre_urls`), (server) => {
2035
- return server?.server_id == envServerID;
2036
- }), 'uri'));
2034
+ // 获取前置url
2035
+ let envPreUrl = _.trim(_.get(requestJson, 'pre_url', ''));
2036
+ if (envPreUrl != '') {
2037
+ envPreUrl = _.trim(_.get(_.find(_.get(option, `env.env_pre_urls`), (server) => {
2038
+ return server?.server_id == envServerID;
2039
+ }), 'uri'));
2040
+ }
2037
2041
 
2038
2042
  if (envPreUrl != '') {
2039
2043
  if (option?.env?.env_id == '2' && !_.endsWith(envPreUrl, '/')) {
@@ -2159,9 +2163,28 @@ module.exports = (event, option, callback, eventRuntimeData, eventResultList) =>
2159
2163
  error_type: scriptType,
2160
2164
  message: err?.message
2161
2165
  })
2166
+
2167
+ if (_.includes(['prerequest', 'test'], scriptType)) {
2168
+ if (_.isUndefined(_.get(eventRuntimeData, [event?.event_id, "console"]))) {
2169
+ _.set(eventRuntimeData, [event?.event_id, "console"], []);
2170
+ }
2171
+
2172
+ const time = Date.now()
2173
+ eventRuntimeData[event?.event_id].console.push(
2174
+ {
2175
+ time,
2176
+ "level": "error",
2177
+ "args": [String(err)]
2178
+ }
2179
+ )
2180
+ }
2181
+
2162
2182
  if (scriptType === 'prerequest') {
2163
2183
  try {
2164
2184
  run.abort();
2185
+ if (_.isUndefined(_.get(eventRuntimeData, [event?.event_id, "request"]))) {
2186
+ _.set(eventRuntimeData, [event?.event_id, "request"], _.pick(requestJson, ['name', 'method', 'url']));
2187
+ }
2165
2188
  } catch (e) { }
2166
2189
  }
2167
2190
  }
@@ -2174,6 +2197,7 @@ module.exports = (event, option, callback, eventRuntimeData, eventResultList) =>
2174
2197
  _.set(eventRuntimeData, [event?.event_id, "console"], []);
2175
2198
  }
2176
2199
  const time = Date.now()
2200
+ console.log({ time, level, args })
2177
2201
  eventRuntimeData[event?.event_id].console.push({ time, level, args })
2178
2202
  },
2179
2203
 
@@ -2235,7 +2259,7 @@ module.exports = (event, option, callback, eventRuntimeData, eventResultList) =>
2235
2259
  })
2236
2260
  }
2237
2261
  }
2238
-
2262
+
2239
2263
  const requestOptions = convert2EchoRequest(request, requestJson, postmanJSON, history);
2240
2264
  _.set(eventRuntimeData, [event?.event_id, "request"], requestOptions);
2241
2265
 
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, variableReplaceForCondition, variableReplace, convertEndRuntimeState, repeatArrayToLength } = require('../libs/utils');
6
+ { returnBoolean, variableReplaceForCondition, variableReplace,getVariableActedUpon, convertEndRuntimeState, repeatArrayToLength } = require('../libs/utils');
7
7
  const executeApi = require('./api'),
8
8
  executeWait = require('./wait');
9
9
 
@@ -36,12 +36,14 @@ const events = {
36
36
  condition: {
37
37
  leftValue: {
38
38
  variable: data?.var,
39
- value: exp
39
+ value: exp,
40
+ actedUpon: getVariableActedUpon(eventRuntimeData, _.trim(data?.var, "{}")) || 'Fixed'
40
41
  },
41
42
  compare,
42
43
  rightValue: {
43
44
  variable: data?.value,
44
- value: value
45
+ value: value,
46
+ actedUpon: getVariableActedUpon(eventRuntimeData, _.trim(data?.value, "{}")) || 'Fixed'
45
47
  }
46
48
  }
47
49
  }
@@ -147,17 +149,18 @@ const events = {
147
149
  };
148
150
  const dataSourceType = _.toInteger(_.get(data, 'loop_extract.var'));
149
151
  const responseData = _.get(eventRuntimeData, `${previousEventId}.${dataTypeMap[dataSourceType] || "response.body"}`);
150
-
151
152
  const dataJsonPath = _.trim(String(_.get(data, 'loop_extract.value', '$')));
152
153
 
154
+ // 获取前置接口的数据
155
+ let preRequestData = undefined;
153
156
  switch (dataSourceType) {
154
157
  case 1:
155
158
  case 8:
156
159
  try {
157
160
  if (_.isString(responseData)) {
158
- _.assign(iterationData, _.values(jsonpath.value(JSON5.parse(responseData), dataJsonPath)));
161
+ preRequestData = jsonpath.value(JSON5.parse(responseData), dataJsonPath);
159
162
  } else {
160
- _.assign(iterationData, _.values(jsonpath.value(responseData, dataJsonPath)));
163
+ preRequestData = jsonpath.value(responseData, dataJsonPath);
161
164
  }
162
165
  } catch (e) { }
163
166
  break;
@@ -166,14 +169,56 @@ const events = {
166
169
  case 7:
167
170
  case 9:
168
171
  case 10:
169
- _.assign(iterationData, _.values(_.get(responseData, dataJsonPath)));
172
+ preRequestData = _.get(responseData, dataJsonPath);
170
173
  break;
171
174
  case 4:
172
175
  case 5:
173
176
  case 6:
174
- _.assign(iterationData, _.values(responseData));
177
+ preRequestData = _.cloneDeep(responseData);
175
178
  break;
176
179
  }
180
+
181
+ if (_.isString(preRequestData)) {
182
+ try {
183
+ preRequestData = JSON5.parse(preRequestData)
184
+ } catch (e) { }
185
+ }
186
+
187
+ if (_.isNumber(preRequestData)) {
188
+ preRequestData = String(preRequestData);
189
+ }
190
+
191
+ let loopVariableArr = [];
192
+
193
+ if (_.isArray(preRequestData)) {
194
+ loopVariableArr = _.map(preRequestData, (arr) => {
195
+ if (_.isObject(arr)) {
196
+ return _.pickBy(arr, (o) => {
197
+ return !_.isObject(o)
198
+ })
199
+ } else {
200
+ return {
201
+ "0": arr
202
+ }
203
+ }
204
+ })
205
+ } else if (_.isObject(preRequestData)) {
206
+ _.forEach(preRequestData, (val, key) => {
207
+ if (!_.isObject(val)) {
208
+ const tempObj = {};
209
+ _.set(tempObj, key, val);
210
+ loopVariableArr.push(tempObj)
211
+ }
212
+ })
213
+ } else if (_.isString(preRequestData)) {
214
+ loopVariableArr = _.map(_.values(preRequestData), (val, key) => {
215
+ const tempObj = {};
216
+ tempObj[String(key)] = val;
217
+ return tempObj;
218
+ })
219
+ }
220
+
221
+ _.assign(iterationData, loopVariableArr);
177
222
  }
178
223
 
179
224
  break;
@@ -181,26 +226,44 @@ const events = {
181
226
  {
182
227
  let loopVariable = variableReplace(_.get(data, 'loop_variable', ''), eventRuntimeData?.variables, option);
183
228
 
184
- let loopVariableArr = [];
185
-
186
- if (_.isObject(loopVariable)) {
187
- loopVariable = _.values(loopVariable);
188
- } else {
229
+ if (_.isString(loopVariable)) {
189
230
  try {
190
- loopVariable = JSON5.parse(loopVariable);
231
+ loopVariable = JSON5.parse(loopVariable)
191
232
  } catch (e) { }
192
233
  }
193
234
 
194
- _.forEach(loopVariable, (val, key) => {
195
- if (!_.isObject(val)) {
196
- loopVariableArr.push(
197
- {
198
- "$key": key,
199
- "$item": val
235
+ if (_.isNumber(loopVariable)) {
236
+ loopVariable = String(loopVariable);
237
+ }
238
+
239
+ let loopVariableArr = [];
240
+ if (_.isArray(loopVariable)) {
241
+ loopVariableArr = _.map(loopVariable, (arr) => {
242
+ if (_.isObject(arr)) {
243
+ return _.pickBy(arr, (o) => {
244
+ return !_.isObject(o)
245
+ })
246
+ } else {
247
+ return {
248
+ "0": arr
200
249
  }
201
- )
202
- }
203
- })
250
+ }
251
+ })
252
+ } else if (_.isObject(loopVariable)) {
253
+ _.forEach(loopVariable, (val, key) => {
254
+ if (!_.isObject(val)) {
255
+ const tempObj = {};
256
+ _.set(tempObj, key, val);
257
+ loopVariableArr.push(tempObj)
258
+ }
259
+ })
260
+ } else if (_.isString(loopVariable)) {
261
+ loopVariableArr = _.map(_.values(loopVariable), (val, key) => {
262
+ const tempObj = {};
263
+ tempObj[String(key)] = val;
264
+ return tempObj;
265
+ })
266
+ }
204
267
 
205
268
  _.assign(iterationData, loopVariableArr);
206
269
  }
package/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  const { repeatArrayToLength, formatAutotestReport, formatAutotestReportList } = require('./libs/utils');
2
2
  const _ = require('lodash');
3
- const moment = require('moment');
4
3
  const aTools = require("apipost-tools");
5
4
  const { executeEvent, iterationEvent } = require('./events');
6
5
  const ABORT_RECURSION_ERROR = ['systemError']; //需要跳出递归的错误
@@ -42,7 +41,7 @@ const run = async (events, option, callback) => {
42
41
  }
43
42
  })
44
43
  })
45
-
44
+
46
45
  const eventResultList = [];
47
46
  const startTimeAt = Date.now();
48
47
 
@@ -93,7 +92,7 @@ const run = async (events, option, callback) => {
93
92
  },
94
93
  _.pick(_.get(option, 'env', {}), ['env_id', 'env_name']),
95
94
  { testing_id: _.get(_.first(eventResultList), 'test_id') },
96
- { report_name: `${moment().format('YYYY-MM-DD HH:mm:ss')}` },
95
+ { report_name: `${option?.name}` },
97
96
  { report_id: aTools.snowflakeId() }
98
97
  )
99
98
  })
package/libs/utils.js CHANGED
@@ -506,6 +506,18 @@ const jsfGenerate = (schema, mockRules = [], lang) => {
506
506
  }
507
507
  }
508
508
 
509
+ const getVariableActedUpon = (eventRuntimeData, varName) => {
510
+ let actedUpon = undefined;
511
+ ["variables", "iterationData", "environment", "globals"].some((type) => {
512
+ if (_.includes(_.keys(_.get(eventRuntimeData, `variables.${type}`)), varName)) {
513
+ actedUpon = type;
514
+ return true;
515
+ }
516
+ })
517
+
518
+ return actedUpon;
519
+ }
520
+
509
521
  const convertEndRuntimeState = (eventRuntimeData, event_id) => {
510
522
  try {
511
523
  const { startTime, startVariables } = _.get(eventRuntimeData, [event_id, 'iteration'], {});
@@ -579,6 +591,7 @@ module.exports = {
579
591
  getCaseInsensitive,
580
592
  camelCaseToSnakeCase,
581
593
  formatAutotestReportList,
594
+ getVariableActedUpon,
582
595
  variableReplace,
583
596
  // createPipeServer,
584
597
  formatAutotestReport,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "runner-runtime",
3
- "version": "1.0.60",
3
+ "version": "1.0.63",
4
4
  "description": "runner-runtime.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -24,23 +24,23 @@
24
24
  "apipost-tools": "^0.0.38",
25
25
  "atomic-sleep": "^1.0.0",
26
26
  "content-disposition": "^0.5.4",
27
+ "database-query": "^1.1.12",
27
28
  "exp-mock": "^2.0.15",
28
29
  "file-type": "^16.5.4",
29
30
  "is-image": "^3.0.0",
30
31
  "is-svg": "^4.3.2",
31
32
  "json-bigint": "^1.0.0",
32
- "json-schema-faker-pro": "^0.5.19",
33
+ "json-schema-faker-pro": "^0.5.22",
33
34
  "json5": "^2.2.3",
34
35
  "jsonpath": "^1.1.1",
35
36
  "lodash": "^4.17.21",
36
37
  "mime": "^3.0.0",
37
38
  "minimatch": "^9.0.4",
38
39
  "mockjs5-pro": "^1.0.3",
39
- "moment": "^2.30.1",
40
40
  "msgpack5": "^6.0.2",
41
41
  "net": "^1.0.2",
42
42
  "postman-collection": "^5.0.2",
43
- "postman-runtime-pro": "^7.43.15",
43
+ "postman-runtime-pro": "^7.43.17",
44
44
  "request-har": "^1.0.0",
45
45
  "strip-json-comments": "^3.1.1",
46
46
  "tough": "^0.6.0",
package/tmp/request.js CHANGED
@@ -1,6 +1,6 @@
1
1
  module.exports = {
2
2
  "option": {
3
- "scene": "auto_test",
3
+ "scene": "http_request",
4
4
  "globals": {},
5
5
  "project": {
6
6
  "request": {
@@ -68,11 +68,17 @@ module.exports = {
68
68
  "name": "默认服务",
69
69
  "sort": 1000,
70
70
  "uri": ""
71
+ },
72
+ "44e76996a401000": {
73
+ "server_id": "44e76996a401000",
74
+ "name": "222",
75
+ "sort": 2000,
76
+ "uri": ""
71
77
  }
72
78
  },
73
79
  "environment": {
74
- "code": 201,
75
- "key": "value"
80
+ "code": "0",
81
+ "key": 1
76
82
  }
77
83
  },
78
84
  "cookies": {
@@ -86,10 +92,10 @@ module.exports = {
86
92
  "path": "/",
87
93
  "secure": true,
88
94
  "httpOnly": true,
89
- "creation": "2025-04-23T18:21:01.716Z",
95
+ "creation": "2025-04-24T21:16:40.033Z",
90
96
  "name": "liveCookie",
91
- "cookie_id": "cfbb441f1704b",
92
- "expires": "Wed, 23 Apr 2025 18:23:04 GMT",
97
+ "cookie_id": "e70e48b7d6003",
98
+ "expires": "Thu, 24 Apr 2025 21:18:40 GMT",
93
99
  "project_id": "2adc267c9064000"
94
100
  },
95
101
  {
@@ -100,10 +106,10 @@ module.exports = {
100
106
  "path": "/",
101
107
  "secure": true,
102
108
  "httpOnly": true,
103
- "creation": "2025-04-23T18:21:01.716Z",
109
+ "creation": "2025-04-24T21:16:40.033Z",
104
110
  "name": "loseCookie",
105
- "cookie_id": "cfbb441f1704c",
106
- "expires": "Wed, 23 Apr 2025 18:21:04 GMT",
111
+ "cookie_id": "e70e48b7d6004",
112
+ "expires": "Thu, 24 Apr 2025 21:16:40 GMT",
107
113
  "project_id": "2adc267c9064000"
108
114
  }
109
115
  ]
@@ -138,6 +144,11 @@ module.exports = {
138
144
  },
139
145
  "client_cert": {
140
146
  "https://*:443": {
147
+ "pfx": {
148
+ "file_base64": "",
149
+ "file_name": "",
150
+ "file_url": ""
151
+ },
141
152
  "crt": {
142
153
  "file_base64": "data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURuVENDQW9VQ0ZFcDd4Z3J2VVhteWEzTEdmcEFpenRNUkJvN3ZNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1JR0sKTVFzd0NRWURWUVFHRXdKRFRqRVFNQTRHQTFVRUNBd0hRbVZwYW1sdVp6RVFNQTRHQTFVRUJ3d0hRbVZwYW1sdQpaekVRTUE0R0ExVUVDZ3dIWVhCcGNHOXpkREVNTUFvR0ExVUVDd3dEWVhCME1SWXdGQVlEVlFRRERBMWpZeTVoCmNHbHdiM04wTG1Oak1SOHdIUVlKS29aSWh2Y05BUWtCRmhCaFpHMXBia0JoY0dsd2IzTjBMbU5qTUI0WERUSXoKTVRJeE1UQTVOREl4TmxvWERUTXpNVEl3T0RBNU5ESXhObG93Z1lveEN6QUpCZ05WQkFZVEFrTk9NUkF3RGdZRApWUVFJREFkQ1pXbHFhVzVuTVJBd0RnWURWUVFIREFkQ1pXbHFhVzVuTVE4d0RRWURWUVFLREFaaGNHbHZjM1F4CkREQUtCZ05WQkFzTUEyRndkREVXTUJRR0ExVUVBd3dOWTJNdVlYQnBjRzl6ZEM1all6RWdNQjRHQ1NxR1NJYjMKRFFFSkFSWVJZMnhwWlc1MFFHRndhWEJ2YzNRdVkyTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBdwpnZ0VLQW9JQkFRRG5DalNwV2MvVEovcXg2ZHRCRUlKeHhpME0wTWc1M091U0lNK2dMVnNseTl4SVFTTndGWGhrCi8vRzhTOVl0d2lnMHpwZVNLUlhyNi9tdklQcjlsY3RBakRrZzQ4Q1BQSk5YYVo1RTdQVkRYbThtTXhhS2RBeXEKZVBkT2w2bGJ0a0pWRTB0cElWTFo4UkhEOWU4VFdiNENMNFBUSzkrNFhVSElEUU1FTUdNbWFnRUVRd3ordDdSTQpMZDVvcVAxdHVUdlhBbmlUbmU4TnZhYVQ3NDlqcFhYb3lnV29FaVcwOGJ3NmI2TmZwVVEyeFBsSkdrc2tiblRhCisyTWVqb1ZrSlpDbDFlOUhOYXV2a085WjhQamRYMG9nZTM0OE5pZW83amNDWWhBUmttanVJanhiMU1kU3dPdjcKMTVWS3EwcFFwbjNzVHJrWTVqdjZEeis3dWhSaXVnN2pBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQgpBRGFCdG10NHVPaVpoVlpHdmo1Tko2RUhUUFNGZGxBaVd6U2tiSWllV2RIY1NhK0J3K2xBM1kyalJsYnZNUVVaCndiL21jaFRtNjFJRmlKbnYvN1h2MGtmMkJxUzkyMURXenJHa3FWQk5zRUdIMEdhWGVHMVMwL1pkNXg1RE4zMlEKRW9IRE95K2lOeDlwRzA2cy8ybUlGY1E3eXQ0cW9acXFQZUg4U3VIamZOanlnZnZFUGxiYUJHb0Y4V1dneFluLwp3TzlFK2pYN3VvdlZDWXVrY3NyaEprZzJwK3o5MUFVU3p2NlpTbHlnK3pGM2kyM1Q0ZXA5VDhwRTV2eXE3UlFnClNPT3BQd25uN0d5UWd2UzREbU5LMHkyazc5ZUdGb3VnTWxnS3g1Um5nMUQxNEd0ZFcvMlE0WGxNa2tHZ1ZsR2IKRVRkcGlES1JKWjNTTDJPZ1RsSFpibWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
143
154
  "file_name": "client (1).crt",
@@ -149,19 +160,9 @@ module.exports = {
149
160
  "file_url": ""
150
161
  },
151
162
  "password": "",
152
- "pfx": {
153
- "file_base64": "",
154
- "file_name": "",
155
- "file_url": ""
156
- },
157
163
  "HOST": "https://*:443"
158
164
  },
159
165
  "https://apipost.cn:443": {
160
- "crt": {
161
- "file_url": "",
162
- "file_base64": "data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURuVENDQW9VQ0ZFcDd4Z3J2VVhteWEzTEdmcEFpenRNUkJvN3ZNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1JR0sKTVFzd0NRWURWUVFHRXdKRFRqRVFNQTRHQTFVRUNBd0hRbVZwYW1sdVp6RVFNQTRHQTFVRUJ3d0hRbVZwYW1sdQpaekVRTUE0R0ExVUVDZ3dIWVhCcGNHOXpkREVNTUFvR0ExVUVDd3dEWVhCME1SWXdGQVlEVlFRRERBMWpZeTVoCmNHbHdiM04wTG1Oak1SOHdIUVlKS29aSWh2Y05BUWtCRmhCaFpHMXBia0JoY0dsd2IzTjBMbU5qTUI0WERUSXoKTVRJeE1UQTVOREl4TmxvWERUTXpNVEl3T0RBNU5ESXhObG93Z1lveEN6QUpCZ05WQkFZVEFrTk9NUkF3RGdZRApWUVFJREFkQ1pXbHFhVzVuTVJBd0RnWURWUVFIREFkQ1pXbHFhVzVuTVE4d0RRWURWUVFLREFaaGNHbHZjM1F4CkREQUtCZ05WQkFzTUEyRndkREVXTUJRR0ExVUVBd3dOWTJNdVlYQnBjRzl6ZEM1all6RWdNQjRHQ1NxR1NJYjMKRFFFSkFSWVJZMnhwWlc1MFFHRndhWEJ2YzNRdVkyTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBdwpnZ0VLQW9JQkFRRG5DalNwV2MvVEovcXg2ZHRCRUlKeHhpME0wTWc1M091U0lNK2dMVnNseTl4SVFTTndGWGhrCi8vRzhTOVl0d2lnMHpwZVNLUlhyNi9tdklQcjlsY3RBakRrZzQ4Q1BQSk5YYVo1RTdQVkRYbThtTXhhS2RBeXEKZVBkT2w2bGJ0a0pWRTB0cElWTFo4UkhEOWU4VFdiNENMNFBUSzkrNFhVSElEUU1FTUdNbWFnRUVRd3ordDdSTQpMZDVvcVAxdHVUdlhBbmlUbmU4TnZhYVQ3NDlqcFhYb3lnV29FaVcwOGJ3NmI2TmZwVVEyeFBsSkdrc2tiblRhCisyTWVqb1ZrSlpDbDFlOUhOYXV2a085WjhQamRYMG9nZTM0OE5pZW83amNDWWhBUmttanVJanhiMU1kU3dPdjcKMTVWS3EwcFFwbjNzVHJrWTVqdjZEeis3dWhSaXVnN2pBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQgpBRGFCdG10NHVPaVpoVlpHdmo1Tko2RUhUUFNGZGxBaVd6U2tiSWllV2RIY1NhK0J3K2xBM1kyalJsYnZNUVVaCndiL21jaFRtNjFJRmlKbnYvN1h2MGtmMkJxUzkyMURXenJHa3FWQk5zRUdIMEdhWGVHMVMwL1pkNXg1RE4zMlEKRW9IRE95K2lOeDlwRzA2cy8ybUlGY1E3eXQ0cW9acXFQZUg4U3VIamZOanlnZnZFUGxiYUJHb0Y4V1dneFluLwp3TzlFK2pYN3VvdlZDWXVrY3NyaEprZzJwK3o5MUFVU3p2NlpTbHlnK3pGM2kyM1Q0ZXA5VDhwRTV2eXE3UlFnClNPT3BQd25uN0d5UWd2UzREbU5LMHkyazc5ZUdGb3VnTWxnS3g1Um5nMUQxNEd0ZFcvMlE0WGxNa2tHZ1ZsR2IKRVRkcGlES1JKWjNTTDJPZ1RsSFpibWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
163
- "file_name": "client (1).crt"
164
- },
165
166
  "key": {
166
167
  "file_base64": "data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR0VENDQXAyZ0F3SUJBZ0lKQU9ueUNxV09FeCtsTUEwR0NTcUdTSWIzRFFFQkJRVUFNRVV4Q3pBSkJnTlYKQkFZVEFrRlZNUk13RVFZRFZRUUlFd3BUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLRXhoSmJuUmxjbTVsZENCWAphV1JuYVhSeklGQjBlU0JNZEdRd0hoY05NVFV3TnpFek1UUTFNRE16V2hjTk1UVXdPREV5TVRRMU1ETXpXakJGCk1Rc3dDUVlEVlFRR0V3SkJWVEVUTUJFR0ExVUVDQk1LVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2hNWVNXNTAKWlhKdVpYUWdWMmxrWjJsMGN5QlFkSGtnVEhSa01JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQgpDZ0tDQVFFQTB1cVdPWUF1ZmgxSHZkNUw0WE8zUEZOZituZE8vVGczUGJEcWl4UTZEYUpqcUw2ZWh6eFJYeHJyCmR6U0N6RlN2b2FPRzFNaUpyazlIdUYvYUVyZ0ExdHFnb0crSmx1VVlKOG9VNzRtVFk3Zmt3dHhPUnpoT2JkSmoKbFoxNm5jNGVEaXBjVWtjUFluY0tQSGxsbnR1MXVDSUNNMkl5TmprcUFNd3lPSERrTGNFY0VyQ1F3YVdlSi80VgpGS3NVdndwbTR0cmRwWVcrelUwWkhUdWtuWkhybERrY1l2ZlE2VSt5bjI3ZEZBUWRwb3A5Q0FyNjdsL2Ftd01RCm9ZT1hqVGx6bWFZOURvRHRVazlCY0tGSUhhVDQwbGJFSDV2OTlXeDNaNE1MQ2JhNHRuQ2oyRTFzZ2UrUWFWcEEKck1aazNDTjN0amM5VUlWa2JGdUZmeUNaK1owSlpRSURBUUFCbzRHbk1JR2tNQjBHQTFVZERnUVdCQlNzandwVAp6Q2YzOGhUQmNsRFNvWEFNSkp6Q1NEQjFCZ05WSFNNRWJqQnNnQlNzandwVHpDZjM4aFRCY2xEU29YQU1KSnpDClNLRkpwRWN3UlRFTE1Ba0dBMVVFQmhNQ1FWVXhFekFSQmdOVkJBZ1RDbE52YldVdFUzUmhkR1V4SVRBZkJnTlYKQkFvVEdFbHVkR1Z5Ym1WMElGZHBaR2RwZEhNZ1VIUjVJRXgwWklJSkFPbnlDcVdPRXgrbE1Bd0dBMVVkRXdRRgpNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFJSk52M3cza0VqSGt5QkNiaURwcFFBczdDU2s1SGJzCisrV0EyZm9sdzZaM3I2SUxHWEpVYmhwaitQZ0V1YTVUTW5ja2VEL0lvMXViYnNqaWZ2eHo1UUJrTDIySHQwdkIKTFJpR1FkMGt2TTFUUkFTUyt2UFk1L096Q2hkUVFPamh0UG5Vc0h2dEVwTHV5SkRlV2QyZTV5cFoveDdmMTZRVApwRG16ajRLNG00YkZPUitSWlQxUkN2SjFDclU1VWR0UzBpWVoyczJmVVJJclQ3Qmo5dDhhdmpReTFxQnNzd1E1CkdFUERTRWVoRC96QzkzMlJsSUw4cGhja05kTHRvZGlMaVlSRU8rTGt6MHdDeWpVTG0vYXVMeWlrNzZ1WlZaR3gKTEJwRUp4WU81bmQvYVViYjNsS3liSXJZYXlkSWJBVk5CcWR1SWxaV3M1cmgwclJFOUZNaDcrbz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
167
168
  "file_name": "cert.pem",
@@ -173,6 +174,11 @@ module.exports = {
173
174
  "file_name": "client (1).key",
174
175
  "file_url": ""
175
176
  },
177
+ "crt": {
178
+ "file_base64": "data:application/x-x509-ca-cert;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURuVENDQW9VQ0ZFcDd4Z3J2VVhteWEzTEdmcEFpenRNUkJvN3ZNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1JR0sKTVFzd0NRWURWUVFHRXdKRFRqRVFNQTRHQTFVRUNBd0hRbVZwYW1sdVp6RVFNQTRHQTFVRUJ3d0hRbVZwYW1sdQpaekVRTUE0R0ExVUVDZ3dIWVhCcGNHOXpkREVNTUFvR0ExVUVDd3dEWVhCME1SWXdGQVlEVlFRRERBMWpZeTVoCmNHbHdiM04wTG1Oak1SOHdIUVlKS29aSWh2Y05BUWtCRmhCaFpHMXBia0JoY0dsd2IzTjBMbU5qTUI0WERUSXoKTVRJeE1UQTVOREl4TmxvWERUTXpNVEl3T0RBNU5ESXhObG93Z1lveEN6QUpCZ05WQkFZVEFrTk9NUkF3RGdZRApWUVFJREFkQ1pXbHFhVzVuTVJBd0RnWURWUVFIREFkQ1pXbHFhVzVuTVE4d0RRWURWUVFLREFaaGNHbHZjM1F4CkREQUtCZ05WQkFzTUEyRndkREVXTUJRR0ExVUVBd3dOWTJNdVlYQnBjRzl6ZEM1all6RWdNQjRHQ1NxR1NJYjMKRFFFSkFSWVJZMnhwWlc1MFFHRndhWEJ2YzNRdVkyTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBdwpnZ0VLQW9JQkFRRG5DalNwV2MvVEovcXg2ZHRCRUlKeHhpME0wTWc1M091U0lNK2dMVnNseTl4SVFTTndGWGhrCi8vRzhTOVl0d2lnMHpwZVNLUlhyNi9tdklQcjlsY3RBakRrZzQ4Q1BQSk5YYVo1RTdQVkRYbThtTXhhS2RBeXEKZVBkT2w2bGJ0a0pWRTB0cElWTFo4UkhEOWU4VFdiNENMNFBUSzkrNFhVSElEUU1FTUdNbWFnRUVRd3ordDdSTQpMZDVvcVAxdHVUdlhBbmlUbmU4TnZhYVQ3NDlqcFhYb3lnV29FaVcwOGJ3NmI2TmZwVVEyeFBsSkdrc2tiblRhCisyTWVqb1ZrSlpDbDFlOUhOYXV2a085WjhQamRYMG9nZTM0OE5pZW83amNDWWhBUmttanVJanhiMU1kU3dPdjcKMTVWS3EwcFFwbjNzVHJrWTVqdjZEeis3dWhSaXVnN2pBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQgpBRGFCdG10NHVPaVpoVlpHdmo1Tko2RUhUUFNGZGxBaVd6U2tiSWllV2RIY1NhK0J3K2xBM1kyalJsYnZNUVVaCndiL21jaFRtNjFJRmlKbnYvN1h2MGtmMkJxUzkyMURXenJHa3FWQk5zRUdIMEdhWGVHMVMwL1pkNXg1RE4zMlEKRW9IRE95K2lOeDlwRzA2cy8ybUlGY1E3eXQ0cW9acXFQZUg4U3VIamZOanlnZnZFUGxiYUJHb0Y4V1dneFluLwp3TzlFK2pYN3VvdlZDWXVrY3NyaEprZzJwK3o5MUFVU3p2NlpTbHlnK3pGM2kyM1Q0ZXA5VDhwRTV2eXE3UlFnClNPT3BQd25uN0d5UWd2UzREbU5LMHkyazc5ZUdGb3VnTWxnS3g1Um5nMUQxNEd0ZFcvMlE0WGxNa2tHZ1ZsR2IKRVRkcGlES1JKWjNTTDJPZ1RsSFpibWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
179
+ "file_name": "client (1).crt",
180
+ "file_url": ""
181
+ },
176
182
  "HOST": "https://apipost.cn:443"
177
183
  }
178
184
  }
@@ -180,10 +186,10 @@ module.exports = {
180
186
  "custom_functions": {},
181
187
  "collection": [
182
188
  {
183
- "target_id": "2b835ab23069000",
189
+ "target_id": "cf94971317030",
184
190
  "target_type": "api",
185
- "parent_id": "ac6c2b71700a",
186
- "name": "Anything",
191
+ "parent_id": "0",
192
+ "name": "GET 请求API 副本",
187
193
  "request": {
188
194
  "auth": {
189
195
  "type": "inherit"
@@ -192,87 +198,44 @@ module.exports = {
192
198
  "mode": "urlencoded",
193
199
  "parameter": [
194
200
  {
195
- "param_id": "a82580771003",
196
- "description": "",
197
- "field_type": "string",
198
- "is_checked": 1,
199
- "key": "",
200
- "not_null": 1,
201
- "value": "",
202
- "content_type": "",
203
- "file_name": "",
204
- "file_base64": "",
205
- "schema": {
206
- "type": "string"
207
- }
208
- },
209
- {
210
- "param_id": "dcc7d2b71005",
211
- "description": "",
212
- "field_type": "string",
213
- "is_checked": 1,
214
- "key": "",
215
- "not_null": 1,
216
- "value": "",
217
- "content_type": "",
218
- "file_name": "",
219
- "file_base64": "",
220
- "schema": {
221
- "type": "string"
222
- }
223
- },
224
- {
225
- "param_id": "10bbfac371004",
226
- "description": "",
201
+ "param_id": "cf59342771004",
202
+ "description": "记录对象最后更新的时间,精确到时分秒。\n",
227
203
  "field_type": "string",
228
204
  "is_checked": 1,
229
- "key": "",
205
+ "key": "UpdatedAt",
230
206
  "not_null": 1,
231
- "value": "",
207
+ "value": "2024-10-01 12:00:00",
232
208
  "content_type": "",
233
209
  "file_name": "",
234
210
  "file_base64": "",
235
211
  "schema": {
236
- "type": "string"
212
+ "type": "string",
213
+ "default": "2024-10-01 12:00:00"
237
214
  }
238
215
  },
239
216
  {
240
- "param_id": "12a8a25771004",
241
- "description": "",
217
+ "param_id": "d90f4cb771009",
218
+ "description": "代表用户的姓氏,是用户个人信息中家族姓氏部分。\n",
242
219
  "field_type": "string",
243
220
  "is_checked": 1,
244
- "key": "aaaaaaa",
221
+ "key": "last_name",
245
222
  "not_null": 1,
246
- "value": "",
223
+ "value": "",
247
224
  "content_type": "",
248
225
  "file_name": "",
249
226
  "file_base64": "",
250
227
  "schema": {
251
- "type": "string"
252
- }
253
- },
254
- {
255
- "param_id": "12adf05771009",
256
- "description": "",
257
- "field_type": "string",
258
- "is_checked": 1,
259
- "key": "",
260
- "not_null": 1,
261
- "value": "",
262
- "content_type": "",
263
- "file_name": "",
264
- "file_base64": "",
265
- "schema": {
266
- "type": "string"
228
+ "type": "string",
229
+ "default": "张"
267
230
  }
268
231
  }
269
232
  ],
270
- "raw": "{\n \"id\": 1,\n \"name\": \"\"\n}",
233
+ "raw": "",
271
234
  "raw_parameter": [
272
235
  {
273
236
  "param_id": "2b835c6eb86902c",
274
237
  "description": "用户主键id",
275
- "field_type": "long",
238
+ "field_type": "Long",
276
239
  "is_checked": 1,
277
240
  "key": "id",
278
241
  "not_null": 1,
@@ -292,31 +255,53 @@ module.exports = {
292
255
  }
293
256
  ],
294
257
  "raw_schema": {
295
- "type": "object"
258
+ "type": "object",
259
+ "x-refs": {
260
+ "d90a9b9b17001": {
261
+ "$ref": "#/components/schemas/3eb25347fd6011"
262
+ }
263
+ },
264
+ "x-orders": [
265
+ "d90a9b9b17001"
266
+ ],
267
+ "properties": {}
296
268
  },
297
269
  "binary": {}
298
270
  },
299
- "pre_tasks": [
271
+ "pre_tasks": [],
272
+ "post_tasks": [
300
273
  {
301
- "type": "database",
274
+ "type": "customScript",
302
275
  "enabled": -1,
276
+ "data": "pm.environment.set(\"code\", 201);\napt.test(\"正文匹配含有字符串\", function () {\n apt.expect(apt.response.text()).to.include(\"期望查找的字符串\");\n });",
277
+ "name": "自定义脚本",
278
+ "id": "3d53b40ffd6022"
279
+ },
280
+ {
281
+ "type": "database",
282
+ "enabled": 1,
303
283
  "data": {
284
+ "query": "",
285
+ "variables": [],
304
286
  "connectionId": "2b9e0de71864000",
305
- "isConsoleOutput": 1,
306
- "query": "select * from user limit 0,2",
307
- "variables": []
287
+ "isConsoleOutput": -1
308
288
  },
309
289
  "name": "数据库",
310
- "id": "3d59fd65bd6066"
311
- }
312
- ],
313
- "post_tasks": [
290
+ "id": "bcb573cb17048"
291
+ },
314
292
  {
315
- "type": "customScript",
293
+ "type": "assert",
316
294
  "enabled": -1,
317
- "data": "pm.environment.set(\"code\", 201);\napt.test(\"成功的POST请求\", function () {\n apt.expect(apt.response.code).to.be.oneOf([201, 202]);\n});\npm.environment.set(\"code\", 201);\napt.test(\"成功的POST请求\", function () {\n apt.expect(apt.response.code).to.be.oneOf([201, 202]);\n});\n\napt.test(\"响应时间小于 200ms\", function () {\n apt.expect(apt.response.responseTime).to.be.below(200);\n });\napt.test(\"存在响应头 Content-Type\", function () {\n apt.response.to.have.header(\"Content-Type\");\n });\napt.test(\"状态码包含字符串\", function () {\n apt.response.to.have.status(\"Created\");\n });\nvar jsonObject = xml2Json(responseBody);\nvar schema = {\n \"items\": {\n \"type\": \"boolean\"\n }\n };\n\n var data1 = [true, false];\n var data2 = [true, 123];\n\n apt.test('Schema is valid', function () {\n apt.expect(tv4.validate(data1, schema)).to.be.true;\n apt.expect(tv4.validate(data2, schema)).to.be.true;\n });",
318
- "name": "自定义脚本",
319
- "id": "3d53b40ffd6022"
295
+ "data": {
296
+ "type": "responseJson",
297
+ "expression": {
298
+ "path": "",
299
+ "compareType": "eq",
300
+ "compareValue": ""
301
+ }
302
+ },
303
+ "name": "断言",
304
+ "id": "bcb5b9931704a"
320
305
  }
321
306
  ],
322
307
  "header": {
@@ -326,13 +311,25 @@ module.exports = {
326
311
  "query_add_equal": 1,
327
312
  "parameter": [
328
313
  {
329
- "param_id": "cfaaea831700d",
314
+ "param_id": "3d55bc7d39b04a",
330
315
  "description": "",
331
316
  "field_type": "string",
332
317
  "is_checked": 1,
333
- "key": "code",
318
+ "key": "id",
334
319
  "not_null": 1,
335
- "value": "{{code}}",
320
+ "value": "1",
321
+ "schema": {
322
+ "type": "string"
323
+ }
324
+ },
325
+ {
326
+ "param_id": "bca53b876e042",
327
+ "description": "",
328
+ "field_type": "string",
329
+ "is_checked": 1,
330
+ "key": "",
331
+ "not_null": 1,
332
+ "value": "",
336
333
  "schema": {
337
334
  "type": "string"
338
335
  }
@@ -347,123 +344,46 @@ module.exports = {
347
344
  "parameter": []
348
345
  }
349
346
  },
350
- "parents": [
351
- {
352
- "target_id": "ac6c2b71700a",
353
- "target_type": "folder"
354
- }
355
- ],
356
- "method": "POST",
357
- "protocol": "http/1.1",
358
- "url": "https://go.apipost.cn?code={{code}}",
359
- "pre_url": ""
360
- },
361
- {
362
- "target_id": "ac6c2b71700a",
363
- "target_type": "folder",
364
- "parent_id": "0",
365
- "name": "未命名目录",
366
- "request": {
367
- "auth": {
368
- "type": "inherit"
369
- },
370
- "pre_tasks": [],
371
- "post_tasks": [],
372
- "body": {
373
- "parameter": []
374
- },
375
- "header": {
376
- "parameter": []
377
- },
378
- "query": {
379
- "parameter": []
380
- },
381
- "cookie": {
382
- "parameter": []
383
- }
384
- },
385
347
  "parents": [],
386
- "server_id": "0",
348
+ "method": "GET",
349
+ "protocol": "http/1.1",
350
+ "url": "https://httpbin.org/get?id=1",
387
351
  "pre_url": ""
388
352
  }
389
353
  ],
390
- "database_configs": {},
391
- "name": "if",
392
- "ignore_error": -1,
393
- "enable_sandbox": -1,
394
- "iterationCount": 2,
395
- "sleep": 0,
396
- "testing_id": "d1bfa1f7d603c",
397
- "iterates_data_id": "d1fdbdfbd60ac",
398
- "iterationData": [
399
- {
400
- "code": "201",
401
- "name": "name201"
402
- },
403
- {
404
- "code": "202",
405
- "name": "name202"
406
- },
407
- {
408
- "code": "203",
409
- "name": "name203"
410
- },
411
- {
412
- "name": "name204",
413
- "code": "204"
414
- },
415
- {
416
- "code": "205",
417
- "name": "name205"
418
- },
419
- {
420
- "code": "206",
421
- "name": "name206"
354
+ "database_configs": {
355
+ "2b9e0de71864000": {
356
+ "type": "mysql",
357
+ "dbconfig": {
358
+ "host": "10.10.10.20",
359
+ "port": 3306,
360
+ "user": "root",
361
+ "password": "12333333333",
362
+ "database": "apipost",
363
+ "auth_source": ""
364
+ },
365
+ "ssh": {
366
+ "enable": -1,
367
+ "host": "",
368
+ "port": 22,
369
+ "auth_type": 1,
370
+ "username": "",
371
+ "password": "",
372
+ "private_key": "",
373
+ "passphrase": ""
374
+ }
422
375
  }
423
- ]
376
+ }
424
377
  },
425
378
  "test_events": [
426
379
  {
427
- "parent_event_id": "0",
428
- "enabled": 1,
429
- "type": "if",
380
+ "type": "api",
430
381
  "data": {
431
- "var": "1",
432
- "compare": "eq",
433
- "value": "1"
434
- },
435
- "project_id": "2adc267c9064000",
436
- "test_id": "d1bfa1f7d603c",
437
- "event_id": "d1c5f603d606d",
438
- "sort": 1,
439
- "children": [
440
- {
441
- "type": "api",
442
- "auto_sync": true,
443
- "test_id": "d1bfa1f7d603c",
444
- "event_id": "d1c6a65bd6072",
445
- "enabled": 1,
446
- "data": {
447
- "target_id": "2b835ab23069000",
448
- "project_id": "2adc267c9064000",
449
- "parent_id": "ac6c2b71700a",
450
- "target_type": "api"
451
- }
452
- },
453
- {
454
- "parent_event_id": "d1c5f603d606d",
455
- "enabled": 1,
456
- "type": "script",
457
- "data": {
458
- "name": "脚本",
459
- "content": "pm.variables.set(\"code\",400)"
460
- },
461
- "project_id": "2adc267c9064000",
462
- "test_id": "d1bfa1f7d603c",
463
- "event_id": "d1c77c1fd6077",
464
- "sort": 3
465
- }
466
- ]
382
+ "target_id": "cf94971317030",
383
+ "project_id": "2adc267c9064000",
384
+ "parent_id": "0",
385
+ "target_type": "api"
386
+ }
467
387
  }
468
388
  ]
469
389
  }