runner-runtime 1.0.47 → 1.0.49

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
@@ -9,7 +9,7 @@ const FileType = require("file-type"),
9
9
  tough = require("tough-cookie"),
10
10
  Buffer = require("buffer/").Buffer,
11
11
  isImage = require("is-image");
12
- const { getAPIFromCollection, smartUrlJoin, jsfGenerate, replace2RegExp, getParentTargetIDs, encodeURIComponentUnique, base64toCacheFile, getInsideVariables, getCaseInsensitive, camelCaseToSnakeCase } = require('../libs/utils'),
12
+ const { getAPIFromCollection, smartUrlJoin, jsfGenerate, replace2RegExp, getParentTargetIDs, encodeURIComponentUnique, base64toCacheFile, getInsideVariables, convertEndRuntimeState, getCaseInsensitive, camelCaseToSnakeCase } = require('../libs/utils'),
13
13
  { generateHarFromRequest } = require('../libs/2har'),
14
14
 
15
15
  _ = require('lodash');
@@ -22,7 +22,6 @@ const { v4: uuidv4 } = require("uuid");
22
22
  const fs = require("fs");
23
23
  const { minimatch } = require("minimatch");
24
24
  const runtime = require("postman-runtime-pro");
25
- const { error } = require("console");
26
25
 
27
26
  // 将api转postman请求参数
28
27
  const convert2PostmanRequest = (request, option) => {
@@ -38,8 +37,6 @@ const convert2PostmanRequest = (request, option) => {
38
37
  }
39
38
  };
40
39
 
41
- const { lang } = option;
42
-
43
40
  // 处理 url
44
41
  const raw = autoReplaceMockVar(_.get(request, "request.url") || _.get(request, "url"));
45
42
  const uri = new Url(raw);
@@ -423,7 +420,7 @@ const convert2PostmanRequest = (request, option) => {
423
420
  }
424
421
  }
425
422
  }
426
- } catch (e) {}
423
+ } catch (e) { }
427
424
 
428
425
  // 处理body
429
426
  const body = {};
@@ -597,7 +594,7 @@ const convert2PostmanOptions = (request, option, variables) => {
597
594
  const globals = new sdk.VariableScope({
598
595
  values: globalsVariables,
599
596
  });
600
-
597
+
601
598
  const requester = {
602
599
  strictSSL: false,
603
600
  protocolVersion: requestJson?.protocol == 'http/1.1' ? 'http1' : 'http2',
@@ -1142,11 +1139,11 @@ const convert2PostmanEvent = (request, listen, option) => {
1142
1139
  exec = `${exec}
1143
1140
  ! await (async function(){
1144
1141
  const dbData = ${JSON.stringify(item.data || { query: '' })}
1145
- const query = pm.variables.replaceIn(_.get(dbData, "query"));
1146
- const method = pm.variables.replaceIn(_.get(dbData, "method") || "");
1142
+ const query = pm.variables.replaceIn(lodashv4.get(dbData, "query"));
1143
+ const method = pm.variables.replaceIn(lodashv4.get(dbData, "method") || "");
1147
1144
 
1148
1145
  try{
1149
- let dbResultList = await pm.queryDatabase(_.assign(${dbconfig},{
1146
+ let dbResultList = await pm.queryDatabase(lodashv4.assign(${dbconfig},{
1150
1147
  method:method,
1151
1148
  query:query
1152
1149
  }));
@@ -1157,14 +1154,14 @@ const convert2PostmanEvent = (request, listen, option) => {
1157
1154
  if(${item.data?.isConsoleOutput} > 0){
1158
1155
  console.log(query, result)
1159
1156
  }
1160
- if(_.isObject(result)){
1161
- _.forEach(${JSON.stringify(item.data?.variables || [])}, (item) => {
1162
- let extra_value = jsonpath.value(result, _.trim(item?.pattern));
1157
+ if(lodashv4.isObject(result)){
1158
+ lodashv4.forEach(${JSON.stringify(item.data?.variables || [])}, (item) => {
1159
+ let extra_value = jsonpath.value(result, lodashv4.trim(item?.pattern));
1163
1160
  pm[item?.type].set(item?.name, extra_value);
1164
1161
  });
1165
1162
  }else{
1166
- if(!_.isObject(result)){
1167
- _.forEach(${JSON.stringify(item.data?.variables || [])}, (item) => {
1163
+ if(!lodashv4.isObject(result)){
1164
+ lodashv4.forEach(${JSON.stringify(item.data?.variables || [])}, (item) => {
1168
1165
  let extra_value = result;
1169
1166
  pm[item?.type].set(item?.name, extra_value);
1170
1167
  });
@@ -2127,7 +2124,7 @@ const initRequestJson = (event, option) => {
2127
2124
  // module exports
2128
2125
  module.exports = (event, option, callback, eventRuntimeData, eventResultList) => {
2129
2126
  const { scene } = option;
2130
- return new Promise((resolve) => {
2127
+ return new Promise((resolve, reject) => {
2131
2128
  try {
2132
2129
  const { requestJson, postmanJSON } = initRequestJson(event, option)
2133
2130
 
@@ -2152,131 +2149,65 @@ module.exports = (event, option, callback, eventRuntimeData, eventResultList) =>
2152
2149
  item: [collection]
2153
2150
  }), options, (err, run) => {
2154
2151
  if (err) {
2155
- resolve({
2152
+ reject({
2156
2153
  action: 'stystemError',
2157
2154
  message: String(err),
2158
- current_event_id: event?.event_id
2159
- })
2160
- return;
2161
- }
2162
- run.start({
2163
- // script error
2164
- exception(cursor, err) {
2165
- if (err) {
2166
- if (!_.includes(['assert_visual', 'assert'], event?.type)) {
2167
- const scriptType = _.get(cursor, cursor?.scriptId);
2168
- _.set(eventRuntimeData, [event?.event_id, "exception", scriptType], err);
2169
- _.set(eventRuntimeData, [event?.event_id, 'error'], {
2170
- error_type: scriptType,
2171
- message: err?.message
2172
- })
2173
- if (scriptType === 'prerequest') {
2174
- run.abort();
2155
+ event_id: event?.event_id
2156
+ });
2157
+ } else {
2158
+ run.start({
2159
+ // script error
2160
+ exception(cursor, err) {
2161
+ if (err) {
2162
+ if (!_.includes(['assert_visual', 'assert'], event?.type)) {
2163
+ const scriptType = _.get(cursor, cursor?.scriptId);
2164
+ _.set(eventRuntimeData, [event?.event_id, "exception", scriptType], err);
2165
+ _.set(eventRuntimeData, [event?.event_id, 'error'], {
2166
+ error_type: scriptType,
2167
+ message: err?.message
2168
+ })
2169
+ if (scriptType === 'prerequest') {
2170
+ run.abort();
2171
+ }
2175
2172
  }
2176
2173
  }
2177
- }
2178
- },
2179
-
2180
- // script print
2181
- console(cursor, level, ...args) {
2182
- if (_.isUndefined(_.get(eventRuntimeData, [event?.event_id, "console"]))) {
2183
- _.set(eventRuntimeData, [event?.event_id, "console"], []);
2184
- }
2185
-
2186
- eventRuntimeData[event?.event_id].console.push({ level, args })
2187
- },
2188
-
2189
- // Called just before sending a request
2190
- beforeRequest(err, cursor, request, item) {
2191
- const AllVars = getInsideVariables();
2192
- ["variables", "globals", "environment"].forEach((varName) => {
2193
- _.assign(AllVars, _.get(eventRuntimeData, `variables.${varName}`))
2194
- })
2195
- preProcessMockExp(request, postmanJSON, AllVars, _.pick(option, ['lang', 'custom_functions']))
2196
- },
2197
-
2198
- beforePrerequest(err, cursor, events, item) {
2199
- if (!err) {
2200
- const pmEvent = convert2PostmanEvent({ requestJson, postmanJSON }, "prerequest", option);
2201
-
2202
- _.forEach(pmEvent, (event) => {
2203
- const script = new PostmanEvent(event);
2204
- events.push(script);
2205
- _.set(cursor, script?.script?.id, script?.listen);
2206
- });
2207
- }
2208
- },
2209
-
2210
- prerequest(err, cursor, results, item) {
2211
- if (!err) {
2212
- _.forEach(results, (result) => {
2213
- _.forEach(['_variables', 'environment', 'globals'], (varType) => {
2214
- const currentVar = _.get(result, `result.${varType}`);
2215
- try {
2216
- _.forEach(currentVar.toObject(), (val, key) => {
2217
- let setPath = varType;
2218
- if (varType === '_variables') {
2219
- setPath = 'variables';
2220
- }
2174
+ },
2221
2175
 
2222
- if (varType === 'globals' && !_.includes(_.keys(getInsideVariables()), key)) {
2223
- _.set(eventRuntimeData, ["variables", '_globals', key], val)
2224
- }
2225
- _.set(eventRuntimeData, ["variables", setPath, key], val)
2226
- })
2227
- } catch (e) { }
2228
- })
2176
+ // script print
2177
+ console(cursor, level, ...args) {
2178
+ if (_.isUndefined(_.get(eventRuntimeData, [event?.event_id, "console"]))) {
2179
+ _.set(eventRuntimeData, [event?.event_id, "console"], []);
2180
+ }
2181
+ const time = Date.now()
2182
+ eventRuntimeData[event?.event_id].console.push({ time, level, args })
2183
+ },
2184
+
2185
+ // Called just before sending a request
2186
+ beforeRequest(err, cursor, request, item) {
2187
+ const AllVars = getInsideVariables();
2188
+ ["globals", "environment", "variables"].forEach((varName) => {
2189
+ _.assign(AllVars, _.get(eventRuntimeData, `variables.${varName}`))
2229
2190
  })
2230
- }
2231
- },
2191
+ preProcessMockExp(request, postmanJSON, AllVars, _.pick(option, ['lang', 'custom_functions']))
2192
+ },
2232
2193
 
2233
- response: async (err, cursor, response, request, item, cookies, history) => {
2234
- if (!err) {
2235
- if (!_.includes(['get_parsed_request'], scene)) {
2236
- _.set(eventRuntimeData, [event?.event_id, "response"], await convert2EchoResponse(response, history));
2237
- }
2238
- } else {
2239
- if (!_.includes(['script', 'sql', 'assert_visual', 'assert'], event?.type)) {
2240
- _.set(eventRuntimeData, [event?.event_id, "exception", 'prerequest'], String(err));
2241
- _.set(eventRuntimeData, [event?.event_id, 'error'], {
2242
- error_type: 'prerequest',
2243
- message: String(err)
2244
- })
2245
- }
2246
- }
2247
- // console.log(String(request?.url), 111111)
2248
- const requestOptions = convert2EchoRequest(request, requestJson, postmanJSON, history);
2249
- _.set(eventRuntimeData, [event?.event_id, "request"], requestOptions);
2250
-
2251
- if (_.includes(['get_parsed_request'], scene)) {
2252
- resolve(generateHarFromRequest(request));
2253
- try {
2254
- run.abort();
2255
- } catch (e) { }
2256
- }
2257
- },
2194
+ beforePrerequest(err, cursor, events, item) {
2195
+ if (!err) {
2196
+ const pmEvent = convert2PostmanEvent({ requestJson, postmanJSON }, "prerequest", option);
2258
2197
 
2259
- beforeTest(err, cursor, events, item) {
2260
- if (!err) {
2261
- if (!_.includes(['get_parsed_request'], scene)) {
2262
- const pmEvent = convert2PostmanEvent({ requestJson, postmanJSON }, "test", option);
2263
2198
  _.forEach(pmEvent, (event) => {
2264
2199
  const script = new PostmanEvent(event);
2265
2200
  events.push(script);
2266
2201
  _.set(cursor, script?.script?.id, script?.listen);
2267
2202
  });
2268
2203
  }
2269
- }
2270
- },
2271
-
2272
- test(err, cursor, results, item) {
2273
- if (!err) {
2274
- if (!_.includes(['get_parsed_request'], scene)) {
2204
+ },
2275
2205
 
2206
+ prerequest(err, cursor, results, item) {
2207
+ if (!err) {
2276
2208
  _.forEach(results, (result) => {
2277
2209
  _.forEach(['_variables', 'environment', 'globals'], (varType) => {
2278
2210
  const currentVar = _.get(result, `result.${varType}`);
2279
-
2280
2211
  try {
2281
2212
  _.forEach(currentVar.toObject(), (val, key) => {
2282
2213
  let setPath = varType;
@@ -2293,104 +2224,183 @@ module.exports = (event, option, callback, eventRuntimeData, eventResultList) =>
2293
2224
  })
2294
2225
  })
2295
2226
  }
2296
- }
2297
- },
2227
+ },
2298
2228
 
2299
- assertion(cursor, assertions) {
2300
- if (!_.includes(['get_parsed_request'], scene)) {
2301
- if (!_.isEmpty(assertions) && _.isArray(assertions)) {
2302
- if (_.isUndefined(_.get(eventRuntimeData, [event?.event_id, "assertions"]))) {
2303
- _.set(eventRuntimeData, [event?.event_id, "assertions"], []);
2229
+ response: async (err, cursor, response, request, item, cookies, history) => {
2230
+ if (!err) {
2231
+ if (!_.includes(['get_parsed_request'], scene)) {
2232
+ _.set(eventRuntimeData, [event?.event_id, "response"], await convert2EchoResponse(response, history));
2233
+ }
2234
+ } else {
2235
+ if (!_.includes(['script', 'sql', 'assert_visual', 'assert'], event?.type)) {
2236
+ _.set(eventRuntimeData, [event?.event_id, "exception", 'prerequest'], String(err));
2237
+ _.set(eventRuntimeData, [event?.event_id, 'error'], {
2238
+ error_type: 'prerequest',
2239
+ message: String(err)
2240
+ })
2304
2241
  }
2305
-
2306
- eventRuntimeData[event?.event_id].assertions = _.unionWith(_.concat(_.get(eventRuntimeData, [event?.event_id, "assertions"]), assertions), _.isEqual);
2307
2242
  }
2308
- }
2309
- },
2310
2243
 
2311
- item(err, cursor, item, visualizer, result) {
2312
- if (!err && _.isObject(visualizer)) {
2313
- const { error, processed_template } = visualizer;
2314
- _.set(eventRuntimeData[event?.event_id], "visualizer", { error, processed_template });
2315
- } else {
2316
- _.set(eventRuntimeData[event?.event_id], "visualizer", { error: null, processed_template: "" });
2317
- }
2318
- },
2244
+ const requestOptions = convert2EchoRequest(request, requestJson, postmanJSON, history);
2245
+ _.set(eventRuntimeData, [event?.event_id, "request"], requestOptions);
2319
2246
 
2320
- responseData(cursor, data) {
2321
- callback({
2322
- action: "sse",
2323
- data: {
2324
- stream: data,
2325
- size: _.size(data),
2326
- time: Date.now()
2327
- },
2328
- msg: "success",
2329
- error: null,
2330
- })
2331
- },
2247
+ if (_.includes(['get_parsed_request'], scene)) {
2248
+ callback(generateHarFromRequest(request));
2249
+ try {
2250
+ run.abort();
2251
+ } catch (e) { }
2252
+ resolve();
2253
+ }
2254
+ },
2332
2255
 
2333
- done(err, summary) {
2334
- if (!_.includes(['get_parsed_request'], scene)) {
2256
+ beforeTest(err, cursor, events, item) {
2335
2257
  if (!err) {
2336
- const success_assert = _.filter(_.get(eventRuntimeData, [event?.event_id, "assertions"]), (item) => {
2337
- return item?.passed === false
2338
- })
2258
+ if (!_.includes(['get_parsed_request'], scene)) {
2259
+ const pmEvent = convert2PostmanEvent({ requestJson, postmanJSON }, "test", option);
2260
+ _.forEach(pmEvent, (event) => {
2261
+ const script = new PostmanEvent(event);
2262
+ events.push(script);
2263
+ _.set(cursor, script?.script?.id, script?.listen);
2264
+ });
2265
+ }
2266
+ }
2267
+ },
2339
2268
 
2340
- _.set(eventRuntimeData, [event?.event_id, "status"], {
2341
- assert: _.get(eventRuntimeData, [event?.event_id, "assertions"], []),
2342
- success_assert,
2343
- http: _.get(eventRuntimeData, [event?.event_id, 'response', 'status']) || _.get(eventRuntimeData, [event?.event_id, 'error', 'message'])
2344
- });
2269
+ test(err, cursor, results, item) {
2270
+ if (!err) {
2271
+ if (!_.includes(['get_parsed_request'], scene)) {
2272
+
2273
+ _.forEach(results, (result) => {
2274
+ _.forEach(['_variables', 'environment', 'globals'], (varType) => {
2275
+ const currentVar = _.get(result, `result.${varType}`);
2276
+
2277
+ try {
2278
+ _.forEach(currentVar.toObject(), (val, key) => {
2279
+ let setPath = varType;
2280
+ if (varType === '_variables') {
2281
+ setPath = 'variables';
2282
+ }
2283
+
2284
+ if (varType === 'globals' && !_.includes(_.keys(getInsideVariables()), key)) {
2285
+ _.set(eventRuntimeData, ["variables", '_globals', key], val)
2286
+ }
2287
+ _.set(eventRuntimeData, ["variables", setPath, key], val)
2288
+ })
2289
+ } catch (e) { }
2290
+ })
2291
+ })
2292
+ }
2345
2293
  }
2294
+ },
2346
2295
 
2347
- // 返回结果
2348
- const tempVars = _.pick(_.get(eventRuntimeData, 'variables'), ['environment', '_globals']);
2349
- const toLowerResponseJson = camelCaseToSnakeCase(_.get(eventRuntimeData, event?.event_id));
2350
- const finalRequestResult = _.assign(
2351
- _.pick(requestJson, ['parent_id', 'project_id', 'test_id', 'target_id']),
2352
- _.defaults(_.pick(toLowerResponseJson, ['error', 'iteration_id']), { error: null }),
2353
- {
2354
- action: 'request',
2355
- type: 'request',
2356
- data: _.assign(
2357
- {
2358
- variables: {
2359
- globals: _.get(tempVars, '_globals', {}),
2360
- environment: _.get(tempVars, 'environment', {})
2361
- }
2362
- },
2363
- _.omit(_.cloneDeep(toLowerResponseJson), ['error'])
2364
- ),
2365
- event_id: event?.event_id,
2296
+ assertion(cursor, assertions) {
2297
+ if (!_.includes(['get_parsed_request'], scene)) {
2298
+ if (!_.isEmpty(assertions) && _.isArray(assertions)) {
2299
+ if (_.isUndefined(_.get(eventRuntimeData, [event?.event_id, "assertions"]))) {
2300
+ _.set(eventRuntimeData, [event?.event_id, "assertions"], []);
2301
+ }
2302
+
2303
+ eventRuntimeData[event?.event_id].assertions = _.unionWith(_.concat(_.get(eventRuntimeData, [event?.event_id, "assertions"]), assertions), _.isEqual);
2366
2304
  }
2367
- );
2305
+ }
2306
+ },
2368
2307
 
2369
- if (scene === 'auto_test') {
2370
- if (_.includes(['assert', 'assert_visual', 'api', 'sample', 'script'], event?.type)) {
2371
- eventResultList.push(_.assign(camelCaseToSnakeCase(_.get(_.cloneDeep(eventRuntimeData), event?.event_id)), _.pick(event, ['type', 'event_id', 'test_id', 'iteration_id'])));
2308
+ item(err, cursor, item, visualizer, result) {
2309
+ if (!err && _.isObject(visualizer)) {
2310
+ const { error, processed_template } = visualizer;
2311
+ _.set(eventRuntimeData[event?.event_id], "visualizer", { error, processed_template });
2312
+ } else {
2313
+ _.set(eventRuntimeData[event?.event_id], "visualizer", { error: null, processed_template: "" });
2314
+ }
2315
+ },
2316
+
2317
+ responseData(cursor, data) {
2318
+ callback({
2319
+ action: "sse",
2320
+ data: {
2321
+ stream: data,
2322
+ size: _.size(data),
2323
+ time: Date.now()
2324
+ },
2325
+ msg: "success",
2326
+ error: null,
2327
+ })
2328
+ },
2372
2329
 
2373
- resolve({
2374
- action: 'request',
2375
- data: _.assign(finalRequestResult, {
2376
- type: 'request'
2377
- })
2330
+ done(err, summary) {
2331
+ if (!_.includes(['get_parsed_request'], scene)) {
2332
+ if (!err) {
2333
+ const success_assert = _.filter(_.get(eventRuntimeData, [event?.event_id, "assertions"]), (item) => {
2334
+ return item?.passed === false
2378
2335
  })
2336
+
2337
+ _.set(eventRuntimeData, [event?.event_id, "status"], {
2338
+ assert: _.get(eventRuntimeData, [event?.event_id, "assertions"], []),
2339
+ success_assert,
2340
+ http: _.get(eventRuntimeData, [event?.event_id, 'response', 'status']) || _.get(eventRuntimeData, [event?.event_id, 'error', 'message'])
2341
+ });
2342
+ }
2343
+
2344
+ // 返回结果
2345
+ try {
2346
+ const runtimeState = convertEndRuntimeState(eventRuntimeData, event?.event_id) || {}
2347
+ const tempVars = _.pick(_.get(eventRuntimeData, 'variables'), ['environment', '_globals']);
2348
+ const toLowerResponseJson = _.assign(camelCaseToSnakeCase(_.get(eventRuntimeData, event?.event_id)), _.pick(runtimeState, ['startTime', 'endTime', 'currentVariables']));
2349
+ const finalRequestResult = _.assign(
2350
+ _.pick(requestJson, ['parent_id', 'project_id', 'test_id', 'target_id']),
2351
+ _.defaults(_.pick(toLowerResponseJson, ['error', 'iteration_id', 'startTime', 'endTime', 'currentVariables']), { error: null }),
2352
+ {
2353
+ action: 'request',
2354
+ // type: 'request',
2355
+ type: event?.type,
2356
+ data: _.assign(
2357
+ {
2358
+ variables: {
2359
+ globals: _.get(tempVars, '_globals', {}),
2360
+ environment: _.get(tempVars, 'environment', {})
2361
+ }
2362
+ },
2363
+ _.omit(_.cloneDeep(toLowerResponseJson), ['error'])
2364
+ ),
2365
+ event_id: event?.event_id,
2366
+ }
2367
+ );
2368
+
2369
+ if (scene === 'auto_test') {
2370
+ if (_.includes(['assert', 'assert_visual', 'api', 'sample', 'script'], event?.type)) {
2371
+ eventResultList.push(_.assign(camelCaseToSnakeCase(_.get(_.cloneDeep(eventRuntimeData), event?.event_id)), _.pick(event, ['type', 'event_id', 'test_id', 'iteration_id'])));
2372
+
2373
+ callback({
2374
+ action: 'request',
2375
+ data: _.assign(finalRequestResult, {
2376
+ type: 'request'
2377
+ })
2378
+ })
2379
+ }
2380
+ } else {
2381
+ callback(finalRequestResult);
2382
+ }
2383
+ } catch (e) {
2384
+ reject({
2385
+ action: 'stystemError',
2386
+ message: String(e),
2387
+ event_id: event?.event_id
2388
+ });
2379
2389
  }
2380
- } else {
2381
- resolve(finalRequestResult)
2382
2390
  }
2391
+
2392
+ resolve();
2383
2393
  }
2384
- }
2385
- })
2394
+ })
2395
+ }
2386
2396
  }
2387
2397
  );
2388
2398
  } catch (e) {
2389
- resolve({
2399
+ reject({
2390
2400
  action: 'stystemError',
2391
2401
  message: String(e),
2392
- current_event_id: event?.event_id
2393
- })
2402
+ event_id: event?.event_id
2403
+ });
2394
2404
  }
2395
2405
  });
2396
2406
  }