runner-runtime 1.0.48 → 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');
@@ -37,8 +37,6 @@ const convert2PostmanRequest = (request, option) => {
37
37
  }
38
38
  };
39
39
 
40
- const { lang } = option;
41
-
42
40
  // 处理 url
43
41
  const raw = autoReplaceMockVar(_.get(request, "request.url") || _.get(request, "url"));
44
42
  const uri = new Url(raw);
@@ -2126,7 +2124,7 @@ const initRequestJson = (event, option) => {
2126
2124
  // module exports
2127
2125
  module.exports = (event, option, callback, eventRuntimeData, eventResultList) => {
2128
2126
  const { scene } = option;
2129
- return new Promise((resolve) => {
2127
+ return new Promise((resolve, reject) => {
2130
2128
  try {
2131
2129
  const { requestJson, postmanJSON } = initRequestJson(event, option)
2132
2130
 
@@ -2151,131 +2149,65 @@ module.exports = (event, option, callback, eventRuntimeData, eventResultList) =>
2151
2149
  item: [collection]
2152
2150
  }), options, (err, run) => {
2153
2151
  if (err) {
2154
- resolve({
2152
+ reject({
2155
2153
  action: 'stystemError',
2156
2154
  message: String(err),
2157
- current_event_id: event?.event_id
2158
- })
2159
- return;
2160
- }
2161
- run.start({
2162
- // script error
2163
- exception(cursor, err) {
2164
- if (err) {
2165
- if (!_.includes(['assert_visual', 'assert'], event?.type)) {
2166
- const scriptType = _.get(cursor, cursor?.scriptId);
2167
- _.set(eventRuntimeData, [event?.event_id, "exception", scriptType], err);
2168
- _.set(eventRuntimeData, [event?.event_id, 'error'], {
2169
- error_type: scriptType,
2170
- message: err?.message
2171
- })
2172
- if (scriptType === 'prerequest') {
2173
- 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
+ }
2174
2172
  }
2175
2173
  }
2176
- }
2177
- },
2178
-
2179
- // script print
2180
- console(cursor, level, ...args) {
2181
- if (_.isUndefined(_.get(eventRuntimeData, [event?.event_id, "console"]))) {
2182
- _.set(eventRuntimeData, [event?.event_id, "console"], []);
2183
- }
2174
+ },
2184
2175
 
2185
- eventRuntimeData[event?.event_id].console.push({ level, args })
2186
- },
2187
-
2188
- // Called just before sending a request
2189
- beforeRequest(err, cursor, request, item) {
2190
- const AllVars = getInsideVariables();
2191
- ["variables", "globals", "environment"].forEach((varName) => {
2192
- _.assign(AllVars, _.get(eventRuntimeData, `variables.${varName}`))
2193
- })
2194
- preProcessMockExp(request, postmanJSON, AllVars, _.pick(option, ['lang', 'custom_functions']))
2195
- },
2196
-
2197
- beforePrerequest(err, cursor, events, item) {
2198
- if (!err) {
2199
- const pmEvent = convert2PostmanEvent({ requestJson, postmanJSON }, "prerequest", option);
2200
-
2201
- _.forEach(pmEvent, (event) => {
2202
- const script = new PostmanEvent(event);
2203
- events.push(script);
2204
- _.set(cursor, script?.script?.id, script?.listen);
2205
- });
2206
- }
2207
- },
2208
-
2209
- prerequest(err, cursor, results, item) {
2210
- if (!err) {
2211
- _.forEach(results, (result) => {
2212
- _.forEach(['_variables', 'environment', 'globals'], (varType) => {
2213
- const currentVar = _.get(result, `result.${varType}`);
2214
- try {
2215
- _.forEach(currentVar.toObject(), (val, key) => {
2216
- let setPath = varType;
2217
- if (varType === '_variables') {
2218
- setPath = 'variables';
2219
- }
2220
-
2221
- if (varType === 'globals' && !_.includes(_.keys(getInsideVariables()), key)) {
2222
- _.set(eventRuntimeData, ["variables", '_globals', key], val)
2223
- }
2224
- _.set(eventRuntimeData, ["variables", setPath, key], val)
2225
- })
2226
- } catch (e) { }
2227
- })
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}`))
2228
2190
  })
2229
- }
2230
- },
2191
+ preProcessMockExp(request, postmanJSON, AllVars, _.pick(option, ['lang', 'custom_functions']))
2192
+ },
2231
2193
 
2232
- response: async (err, cursor, response, request, item, cookies, history) => {
2233
- if (!err) {
2234
- if (!_.includes(['get_parsed_request'], scene)) {
2235
- _.set(eventRuntimeData, [event?.event_id, "response"], await convert2EchoResponse(response, history));
2236
- }
2237
- } else {
2238
- if (!_.includes(['script', 'sql', 'assert_visual', 'assert'], event?.type)) {
2239
- _.set(eventRuntimeData, [event?.event_id, "exception", 'prerequest'], String(err));
2240
- _.set(eventRuntimeData, [event?.event_id, 'error'], {
2241
- error_type: 'prerequest',
2242
- message: String(err)
2243
- })
2244
- }
2245
- }
2246
- // console.log(String(request?.url), 111111)
2247
- const requestOptions = convert2EchoRequest(request, requestJson, postmanJSON, history);
2248
- _.set(eventRuntimeData, [event?.event_id, "request"], requestOptions);
2249
-
2250
- if (_.includes(['get_parsed_request'], scene)) {
2251
- resolve(generateHarFromRequest(request));
2252
- try {
2253
- run.abort();
2254
- } catch (e) { }
2255
- }
2256
- },
2194
+ beforePrerequest(err, cursor, events, item) {
2195
+ if (!err) {
2196
+ const pmEvent = convert2PostmanEvent({ requestJson, postmanJSON }, "prerequest", option);
2257
2197
 
2258
- beforeTest(err, cursor, events, item) {
2259
- if (!err) {
2260
- if (!_.includes(['get_parsed_request'], scene)) {
2261
- const pmEvent = convert2PostmanEvent({ requestJson, postmanJSON }, "test", option);
2262
2198
  _.forEach(pmEvent, (event) => {
2263
2199
  const script = new PostmanEvent(event);
2264
2200
  events.push(script);
2265
2201
  _.set(cursor, script?.script?.id, script?.listen);
2266
2202
  });
2267
2203
  }
2268
- }
2269
- },
2270
-
2271
- test(err, cursor, results, item) {
2272
- if (!err) {
2273
- if (!_.includes(['get_parsed_request'], scene)) {
2204
+ },
2274
2205
 
2206
+ prerequest(err, cursor, results, item) {
2207
+ if (!err) {
2275
2208
  _.forEach(results, (result) => {
2276
2209
  _.forEach(['_variables', 'environment', 'globals'], (varType) => {
2277
2210
  const currentVar = _.get(result, `result.${varType}`);
2278
-
2279
2211
  try {
2280
2212
  _.forEach(currentVar.toObject(), (val, key) => {
2281
2213
  let setPath = varType;
@@ -2292,111 +2224,183 @@ module.exports = (event, option, callback, eventRuntimeData, eventResultList) =>
2292
2224
  })
2293
2225
  })
2294
2226
  }
2295
- }
2296
- },
2227
+ },
2297
2228
 
2298
- assertion(cursor, assertions) {
2299
- console.log(JSON.stringify(assertions, null, 2), 111111)
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
- // 增加控制器开始时间
2349
- _.set(eventRuntimeData, [event.event_id, 'iteration', 'endTime'], Date.now());
2350
-
2351
- // 增加初始化变量
2352
- const { environment = {}, variables = {}, _globals = {}, iterationData = {} } = _.get(eventRuntimeData, 'variables', {});
2353
- _.set(eventRuntimeData, [event.event_id, 'iteration', 'endVariables'], { environment, variables, iterationData, globals: _globals });
2354
- const tempVars = _.pick(_.get(eventRuntimeData, 'variables'), ['environment', '_globals']);
2355
- const toLowerResponseJson = camelCaseToSnakeCase(_.get(eventRuntimeData, event?.event_id));
2356
- const finalRequestResult = _.assign(
2357
- _.pick(requestJson, ['parent_id', 'project_id', 'test_id', 'target_id']),
2358
- _.defaults(_.pick(toLowerResponseJson, ['error', 'iteration_id','iteration']), { error: null }),
2359
- {
2360
- action: 'request',
2361
- type: 'request',
2362
- data: _.assign(
2363
- {
2364
- variables: {
2365
- globals: _.get(tempVars, '_globals', {}),
2366
- environment: _.get(tempVars, 'environment', {})
2367
- }
2368
- },
2369
- _.omit(_.cloneDeep(toLowerResponseJson), ['error'])
2370
- ),
2371
- 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);
2372
2304
  }
2373
- );
2305
+ }
2306
+ },
2374
2307
 
2375
- if (scene === 'auto_test') {
2376
- if (_.includes(['assert', 'assert_visual', 'api', 'sample', 'script'], event?.type)) {
2377
- 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
+ },
2378
2329
 
2379
- resolve({
2380
- action: 'request',
2381
- data: _.assign(finalRequestResult, {
2382
- type: 'request'
2383
- })
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
2384
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
+ });
2385
2389
  }
2386
- } else {
2387
- resolve(finalRequestResult)
2388
2390
  }
2391
+
2392
+ resolve();
2389
2393
  }
2390
- }
2391
- })
2394
+ })
2395
+ }
2392
2396
  }
2393
2397
  );
2394
2398
  } catch (e) {
2395
- resolve({
2399
+ reject({
2396
2400
  action: 'stystemError',
2397
2401
  message: String(e),
2398
- current_event_id: event?.event_id
2399
- })
2402
+ event_id: event?.event_id
2403
+ });
2400
2404
  }
2401
2405
  });
2402
2406
  }