UNPKG

apipost-runtime8

Version:

apipost-runtime 新版本 for apipost8 支持单接口http请求、自动化测试, 使用全新的参数结构

993 lines (912 loc) 197 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var lodash = require('lodash'); var jsonBigint = require('json-bigint'); var apipostTools = require('apipost-tools'); var expMock = require('exp-mock'); var uuid = require('uuid'); var postmanCollection = require('postman-collection'); var jsonpath = require('jsonpath'); var fileType = require('file-type'); var isImage = require('is-image'); var contentDisposition = require('content-disposition'); var urlJoin = require('@apipost/url-join'); var isSvg = require('is-svg'); var mime = require('mime'); var apipostMock = require('apipost-mock'); var atomicSleep = require('atomic-sleep'); var stripJsonComments = require('strip-json-comments'); var toughCookie = require('tough-cookie'); var minimatch$1 = require('minimatch'); var fs = require('fs'); var os = require('os'); var child_process = require('child_process'); var buffer = require('buffer/'); var path = require('path'); var msgpack5 = require('msgpack5'); var pmRuntime = require('pm-runtime'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var lodash__default = /*#__PURE__*/_interopDefaultLegacy(lodash); var jsonBigint__default = /*#__PURE__*/_interopDefaultLegacy(jsonBigint); var apipostTools__default = /*#__PURE__*/_interopDefaultLegacy(apipostTools); var expMock__default = /*#__PURE__*/_interopDefaultLegacy(expMock); var uuid__default = /*#__PURE__*/_interopDefaultLegacy(uuid); var postmanCollection__default = /*#__PURE__*/_interopDefaultLegacy(postmanCollection); var jsonpath__default = /*#__PURE__*/_interopDefaultLegacy(jsonpath); var fileType__default = /*#__PURE__*/_interopDefaultLegacy(fileType); var isImage__default = /*#__PURE__*/_interopDefaultLegacy(isImage); var contentDisposition__default = /*#__PURE__*/_interopDefaultLegacy(contentDisposition); var urlJoin__default = /*#__PURE__*/_interopDefaultLegacy(urlJoin); var isSvg__default = /*#__PURE__*/_interopDefaultLegacy(isSvg); var mime__default = /*#__PURE__*/_interopDefaultLegacy(mime); var apipostMock__default = /*#__PURE__*/_interopDefaultLegacy(apipostMock); var atomicSleep__default = /*#__PURE__*/_interopDefaultLegacy(atomicSleep); var stripJsonComments__default = /*#__PURE__*/_interopDefaultLegacy(stripJsonComments); var toughCookie__default = /*#__PURE__*/_interopDefaultLegacy(toughCookie); var minimatch__default = /*#__PURE__*/_interopDefaultLegacy(minimatch$1); var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); var os__default = /*#__PURE__*/_interopDefaultLegacy(os); var child_process__default = /*#__PURE__*/_interopDefaultLegacy(child_process); var buffer__default = /*#__PURE__*/_interopDefaultLegacy(buffer); var path__default = /*#__PURE__*/_interopDefaultLegacy(path); var msgpack5__default = /*#__PURE__*/_interopDefaultLegacy(msgpack5); var pmRuntime__default = /*#__PURE__*/_interopDefaultLegacy(pmRuntime); var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; // @ts-check // 一些公共方法 const Url = postmanCollection__default["default"].Url, JSONbig$1 = jsonBigint__default["default"]({ storeAsString: true }), { minimatch } = minimatch__default["default"], { v4: uuidv4$1 } = uuid__default["default"], Buffer$1 = buffer__default["default"].Buffer; // sleep 延迟方法 const sleepDelay$1 = function (ms) { atomicSleep__default["default"](ms); }; // 根据测试条件返回布尔值 const returnBoolean$1 = function (exp, compare, value) { let bool = false; if (exp === "") { // fix bug return compare == "null"; } switch (compare) { case "eq": bool = exp == value; break; case "uneq": bool = exp != value; break; case "gt": bool = lodash__default["default"].gt(Number(exp), Number(value)); break; case "gte": bool = lodash__default["default"].gte(Number(exp), Number(value)); break; case "lt": bool = lodash__default["default"].lt(Number(exp), Number(value)); break; case "lte": bool = lodash__default["default"].lte(Number(exp), Number(value)); break; case "includes": bool = lodash__default["default"].includes(exp, value) || lodash__default["default"].includes(exp, Number(value)); break; case "unincludes": bool = !lodash__default["default"].includes(exp, value) && !lodash__default["default"].includes(exp, Number(value)); break; case "null": bool = lodash__default["default"].isEmpty(exp); break; case "notnull": bool = !lodash__default["default"].isEmpty(exp); break; case "exist": bool = !lodash__default["default"].isUndefined(exp); break; case "notexist": bool = lodash__default["default"].isUndefined(exp); break; case "regularmatch": try { bool = new RegExp( String(value).substring(1, String(value).length - 1) ).test(exp); } catch (e) { } break; case "belongscollection": bool = lodash__default["default"].split(value, ",").indexOf(exp) > -1; break; case "notbelongscollection": bool = lodash__default["default"].split(value, ",").indexOf(exp) == -1; break; } return bool; }; // 获取某接口的 所有父target const getParentTargetIDs = function (collection, target_id, type, parent_ids) { if (lodash__default["default"].isArray(collection)) { const item = lodash__default["default"].find( collection, lodash__default["default"].matchesProperty(type == "sample" ? "sample_id" : "target_id", target_id) ); if (item) { if (parent_ids.includes(item.parent_id)) { //出现死循环,不要继续了。 return; } if (item?.type != "sample") { parent_ids.push(item.parent_id); } getParentTargetIDs(collection, item.parent_id, null, parent_ids); } } }; // 获取某接口的详细信息 const getItemFromCollection = function (collection, target_id) { return lodash__default["default"].find(collection, lodash__default["default"].matchesProperty("target_id", target_id)); }; // 获取某接口用例的详细信息 const getItemSampleFromCollection = function (collection, target_id) { const item = lodash__default["default"].find(collection, lodash__default["default"].matchesProperty("sample_id", target_id)); if (lodash__default["default"].isObject(item)) { // @ts-ignore let old_target_id = item?.target_id; //记录原始target_id // @ts-ignore if (item?.sample_id && item?.target_id != item?.sample_id) { // @ts-ignore item.target_id = item.sample_id; //确保有target_id } // @ts-ignore if (old_target_id && old_target_id != item?.sample_id) { //确保没有死循环 // @ts-ignore item.parent_id = old_target_id; } return item; } else { return item; } }; // 强制跳出 function breakNestedLoop$1(emitRuntimeEvent, msg = { action: "stop", msg: "Stop with an error" }) { lodash__default["default"].isFunction(emitRuntimeEvent) && emitRuntimeEvent(msg); throw new Error(); } // 转换pm request为输出的request function pmRequest2EchoRequest$1(pmRequest, requestJson, postmanJSON, history) { const cloneRequest = lodash__default["default"].assign(lodash__default["default"].cloneDeep(pmRequest), { name: requestJson?.name, project_id: requestJson?.project_id, }); // 请求体类型 cloneRequest.mode = lodash__default["default"].get(requestJson, "request.body.mode"); // 其他请求参数 try { cloneRequest.paths = lodash__default["default"].fromPairs( (lodash__default["default"].get(postmanJSON, "url.variable") || []).map((item) => [ item.key, item.value, ]) ) || {}; } catch (e) { } try { const allRequestHeaders = lodash__default["default"].mapValues(lodash__default["default"].keyBy(lodash__default["default"].get(history, 'execution.data[0].request.headers') || {}, 'key'), 'value'); if (!lodash__default["default"].isEmpty(allRequestHeaders) && lodash__default["default"].isObject(allRequestHeaders)) { cloneRequest.headers = allRequestHeaders; } else { cloneRequest.headers = lodash__default["default"].reduce( cloneRequest.headers?.toJSON(), (obj, item) => { obj[item.key] = item.value; return obj; }, {} ); } } catch (e) { } try { cloneRequest.querys = cloneRequest.url?.query?.toObject(); cloneRequest.url = String(cloneRequest.url); } catch (e) { } try { cloneRequest.body = lodash__default["default"].get( pmRequest, `body.${lodash__default["default"].get(pmRequest, "body.mode")}` ); if (cloneRequest.mode == "msgpack") { const msgpack = msgpack5__default["default"](); try { cloneRequest.body = JSON.stringify( msgpack.decode(Buffer$1.from(lodash__default["default"].values(cloneRequest.body))) ); } catch (e) { } } try { cloneRequest.body = cloneRequest.body.toObject(); } catch (e) { } } catch (e) { } try { cloneRequest.uri = pmRequest?.url.toJSON(); lodash__default["default"].forEach(cloneRequest.uri, function (value, key) { if (key == "query") { cloneRequest.uri[key] = value.toObject(); } else if (key == "host") { cloneRequest.uri[key] = lodash__default["default"].join(value, "."); } else if (key == "path") { cloneRequest.uri[key] = lodash__default["default"].join(value, "/"); } else { if (lodash__default["default"].isArray(value)) { cloneRequest.uri[key] = lodash__default["default"].join(value, ""); } } }); } catch (e) { } // 获取cookies cloneRequest.cookies = {}; try { const cookiesString = cloneRequest.headers?.cookie; if (!lodash__default["default"].isEmpty(cookiesString) && lodash__default["default"].isString(cookiesString)) { lodash__default["default"].forEach(lodash__default["default"].split(cookiesString, ";"), (cookie) => { const { key, value } = toughCookie__default["default"].Cookie.parse(cookie).toJSON(); cloneRequest.cookies[key] = value; }); } } catch (e) { } return cloneRequest; } // 转换pm response为输出的response iterationResult async function pmResponse2EchoResponse$1(response, history) { const cloneResponse = lodash__default["default"].cloneDeep(response); lodash__default["default"].unset(cloneResponse, "_details"); // 响应体 try { lodash__default["default"].assign(cloneResponse, { body: String(cloneResponse.stream), }); } catch (e) { } // 判断适合什么格式输出 try { let fitForShow = "Monaco"; let mimeType = { ext: "json", mime: "application/json", }; if (isSvg__default["default"](cloneResponse.body)) { lodash__default["default"].assign(mimeType, { ext: "svg", mime: "image/svg+xml", }); fitForShow = "Image"; } else { const fileType = await fileType__default["default"].fromBuffer(cloneResponse.stream); if (lodash__default["default"].isObject(fileType)) { lodash__default["default"].assign(mimeType, fileType); if (isImage__default["default"](`test.${mimeType?.ext}`)) { fitForShow = "Image"; } else if (mimeType?.ext == "pdf") { fitForShow = "Pdf"; } else if (mimeType?.ext == "xml") { fitForShow = "Monaco"; } else { fitForShow = "Other"; } } else { const contentType = getCaseInsensitive(cloneResponse?.headers || {}, "content-type") || ""; if (!lodash__default["default"].isEmpty(contentType)) { mimeType = { ext: mime__default["default"].getExtension(contentType), mime: mime__default["default"].getType(mime__default["default"].getExtension(contentType)), }; } else { const ext = apipostTools__default["default"].isJson(cloneResponse.body) ? "json" : apipostTools__default["default"].isJsonp(cloneResponse.body) ? "jsonp" : "html"; mimeType = { ext: ext, mime: mime__default["default"].getType(ext) || "application/jsonp", }; } } } lodash__default["default"].assign(cloneResponse, { mimeType, fitForShow, }); } catch (e) { } // 响应头对象 const responseHeader = {}; try { lodash__default["default"].assign( responseHeader, lodash__default["default"].reduce( response.headers?.toJSON(), (obj, item) => { if (obj[item.key]) { if (!Array.isArray(obj[item.key])) { obj[item.key] = [obj[item.key]]; } obj[item.key].push(item.value); } else { obj[item.key] = item.value; } return obj; }, {} ) ); } catch (e) { } // 响应头 try { lodash__default["default"].assign(cloneResponse, { headers: responseHeader, }); } catch (e) { } // 缓存文件名 let cacheFileName = `${cloneResponse?.id}.${cloneResponse?.mimeType?.ext}`; try { cacheFileName = lodash__default["default"].get( contentDisposition__default["default"].parse( getCaseInsensitive(responseHeader || {}, "content-disposition") ), "parameters.filename" ); if (lodash__default["default"].isString(cacheFileName)) { try { cacheFileName = decodeURIComponent(cacheFileName); } catch (e) { } } } catch (e) { } cloneResponse.filename = cacheFileName; // cookie cloneResponse.cookies = {}; cloneResponse.arrCookies = []; let cookieArrs = getCaseInsensitive(responseHeader || {}, "set-cookie"); if (lodash__default["default"].isString(cookieArrs)) { cookieArrs = [cookieArrs]; } try { lodash__default["default"].forEach(cookieArrs, (cookie) => { const cookieJson = toughCookie__default["default"].Cookie.parse(cookie).toJSON(); lodash__default["default"].assign(cookieJson, { name: cookieJson?.key, cookie_id: apipostTools__default["default"].snowflakeId(`cookie_id_${uuidv4$1()}`), }); cloneResponse.arrCookies.push(cookieJson); const { key, value } = cookieJson; cloneResponse.cookies[key] = value; }); } catch (e) { } const requestStart = lodash__default["default"].get(history, "execution.data.0.timings.requestStart") || Date.now(); lodash__default["default"].assign(cloneResponse, { proxy: lodash__default["default"].get(history, "execution.data.0.request.proxy") || {}, timings: lodash__default["default"].mapKeys( lodash__default["default"].get(history, "execution.data.0.timings.offset") || {}, (value, key) => lodash__default["default"].snakeCase(key) ), requestStart, response_at: requestStart, }); return cloneResponse; } // 不区分大小写的 _.get function getCaseInsensitive(object, keyToFind) { try { // 先将要查找的键转换成小写 const lowerKey = keyToFind.toLowerCase(); if (!lodash__default["default"].isObject(object)) { return undefined; } // 在对象的所有键中查找 for (const key in object) { if (key.toLowerCase() === lowerKey) { return object[key]; } } } catch (e) { } // 如果没有找到,返回undefined return undefined; } // 避免重复编码的 encodeURIComponent function encodeURIComponentUnique(str) { if (lodash__default["default"].startsWith(str, '{{') && lodash__default["default"].endsWith(str, '}}')) { return str; } else { try { if (decodeURIComponent(str) == str) { return encodeURIComponent(str); } return str; } catch (e) { return encodeURIComponent(str); } } } // 将 apipost json 转为postman 2.1 collaction 的 event function convert2PostmanEvent$1(request, listen, database_configs, env, dynamic_option) { const sysScript = [ "(async function(){", "const response = {};", ` const splitCookieString = (input)=> { let index = input.indexOf('='); if (index === -1) { return [input]; } return [input.slice(0, index), input.slice(index + 1)]; } `, "let lodashv4 = require('lodash');", "let { mockExp } = require('exp-mock');", "let Mock = require('mockjs');", "let xml2json = xml2Json;", "let JSON5 = require('json5');", "let aTools = require('apipost-tools');", "let jsonpath = require('jsonpath');", `let _envTmpVariablesData = ${JSON.stringify(env)}`, `let _dynamicValueOptions = ${JSON.stringify(dynamic_option)}`, "let $ = {}; $.md5 = function(str){return CryptoJS.MD5(str).toString()};$.ajax = pm.ajaxSendRequest;", `pm.environment.getPreUrl = function(){return _.get(_envTmpVariablesData, "env_pre_url");}`, `pm.environment.getName = function(){return _.get(_envTmpVariablesData, "env_name");}`, "pm.environment.getCollection = function(){return pm.environment.toObject();}", `pm.variables.getPreUrl = function(){return _.get(_envTmpVariablesData, "env_pre_url");}`, `pm.variables.getName = function(){return _.get(_envTmpVariablesData, "env_name");}`, "pm.variables.getCollection = function(){return pm.environment.toObject();}", "pm.environment.delete = pm.environment.unset;", "pm.variables.delete = pm.variables.unset;", "pm.globals.delete = pm.globals.unset;", "pm.Visualizing = pm.visualizer.set", // 兼容旧版本的可视化 ` let _requestTmpBodyObject = request?.data try{ _requestTmpBodyObject = JSON.stringify(JSON5.parse(request?.data)); }catch(e){} try{ let _requestTmpVariablesData = ${JSON.stringify({ name: request?.name })} _.assign(request, { request_headers: pm.request?.headers?.toObject(), request_bodys: _requestTmpBodyObject, request_querys: pm.request?.url?.query?.toObject(), request_variables: pm.request?.url?.variables?.toObject(), mode: "${lodash__default["default"].get(request, "request.body.mode")}", contentType: pm.request?.headers?.get('content-type'), id: "${request?.sample_id || request?.target_id}", name: _.get(_requestTmpVariablesData, "name") || "HTTP request", url: String(pm.request?.url), uri: pm.request?.url }); }catch(e){} // 获取最终请求body try{ pm.getFinalRequestRawBody = () => { let requestBody = pm.variables.replaceIn(request.request_bodys); if(lodashv4.isString(requestBody)){ const regex = /{{([^}]+)}}/g; const matches = requestBody.match(regex); if (!lodashv4.isEmpty(matches)) { lodashv4.forEach(matches, (match) => { try { const tmpVal = mockExp(match, _dynamicValueOptions?.all_vars || {}, _dynamicValueOptions?.lang || 'en', _dynamicValueOptions?.custom_functions || {}); if (tmpVal != match && !lodashv4.isUndefined(tmpVal)) { requestBody = lodashv4.replace(requestBody, match, tmpVal); } } catch (e) { } }) } pm.setRequestBody(requestBody); } return requestBody; } }catch(e){ pm.getFinalRequestRawBody = () => {} } // 变量替换(含动态值) try{ pm.mock = (str) => { if(lodashv4.isString(str)){ const regex = /{{([^}]+)}}/g; const matches = str.match(regex); if (!lodashv4.isEmpty(matches)) { lodashv4.forEach(matches, (match) => { try { const tmpVal = mockExp(match, _dynamicValueOptions?.all_vars || {}, _dynamicValueOptions?.lang || 'en', _dynamicValueOptions?.custom_functions || {}); if (tmpVal != match && !lodashv4.isUndefined(tmpVal)) { str = lodashv4.replace(str, match, tmpVal); } } catch (e) { } }) } } return str; } }catch(e){ pm.mock = (str) => {return str} } `, "if(_.isObject(pm.response)){", "try{", "_.set(response, 'headers', pm.response.headers?.toObject());", "}catch(e){}", `try{ // 设置cookie response.cookies = {}; const responseCookies = lodashv4.get(pm.response.headers.toObject(), 'set-cookie'); lodashv4.forEach(lodashv4.isArray(responseCookies)?responseCookies:[responseCookies], (cookieStr) => { let cookieArr = splitCookieString(lodashv4.head(lodashv4.split(cookieStr, ';'))); let cookieValue = lodashv4.join(lodashv4.tail(cookieArr),''); if(cookieArr[0] && cookieValue){ try{ _.set(response.cookies, cookieArr[0], decodeURIComponent(cookieValue)) }catch(e){ _.set(response.cookies, cookieArr[0], cookieValue) } } }) }catch(e){} `, "_.set(pm, 'response.raw.responseText', pm.response.text());", "_.set(response, 'raw.responseText', pm.response.text());", "try{", "_.set(response, 'json', pm.response.json());", "_.set(response, 'raw.json', pm.response.json());", "}catch(e){_.set(response, 'raw.json', {})}", "_.set(response, 'raw.status', pm.response.code);", "_.set(response, 'raw.responseTime', pm.response.responseTime);", " pm.response.setBody = function (body) {", " if (typeof body !== 'string') {", " body = JSON.stringify(body);", " }", " if (typeof body === 'string') {", " const originalText = _.cloneDeep(pm.response.text());", " try {", " const originalJson = _.cloneDeep(pm.response.json());", " pm.response.originalJson = function () {", " return originalJson;", " };", " }", " catch (e) {", " pm.response.originalJson = function () {", " return null;", " };", " }", " pm.response.originalText = function () {", " return originalText;", " };", " pm.response.stream = Buffer.from(body);", ` pm.variables.set("_pm.response.setBody", body);`, " }", " };", "", " pm.response.setCode = function (code) {", " if (typeof code === 'number') {", " pm.response.originalCode = function () {", " return pm.response.code;", " };", "", " pm.response.code = code;", ` pm.variables.set("_pm.response.code", code);`, " }", " };", "}", "pm.execute = async function(file, args, extra, option){}", "const apipost = postman;", "const apt = fox = ea = echoapi = insomnia = pm;", // TODO 兼容旧版本apipost的语法、增加更多三方库 ` // Compatible with tc const expect = pm.expect; const assert = pm.assert; assert.equal = (source, dist) => { return source === dist } const tc = {}; try { // global tc.loadModule = require; tc.info = {}; tc.delay = sleep; // Ignored library tc.exec = () => { console.warn("The tc.exec script syntax of Thunder client is not supported.") } tc.runRequest = () => { console.warn("The tc.runRequest script syntax of Thunder client is not supported, Please use pm.sendRequest() instead.") } tc.skipRequest = () => { console.warn("The tc.skipRequest script syntax of Thunder client is not supported.") } tc.chartHTML = () => { console.warn("The tc.chartHTML script syntax of Thunder client is not supported.") } tc.retryRequest = () => { console.warn("The tc.retryRequest script syntax of Thunder client is not supported.") } tc.runRequest = () => { console.warn("The tc.runRequest script syntax of Thunder client is not supported.") } tc.setCookie = () => { console.warn("The tc.setCookie script syntax of Thunder client is not supported.") } tc.clearCookies = () => { console.warn("The tc.clearCookies script syntax of Thunder client is not supported.") } tc.getCookies = () => { console.warn("The tc.getCookies script syntax of Thunder client is not supported.") } tc.readFile = () => { console.warn("The tc.readFile script syntax of Thunder client is not supported.") } tc.loadFromPath = () => { console.warn("The tc.loadFromPath script syntax of Thunder client is not supported.") } // test tc.test = (name, func) => { if (lodashv4.isFunction(func)) { if(!lodashv4.isUndefined(func())){ try{ pm.test(name, func) }catch(e){} }else{ pm.test(name, pm.expect(func()).to.equal(true)) } } else { pm.test(name, pm.expect(lodashv4.toInteger(func) > 0 ? true : false).to.equal(true)) } } // var tc.setVar = (key, value) => { pm.environment.set(key, value) }; tc.getVar = (key) => { return pm.environment.get(key) }; // Param tc.setParam = (key, value) => { pm.setRequestQuery(key, value) }; // request tc.request = lodashv4.cloneDeep(request); tc.request.body = {}; tc.request.name = request.name; tc.request.id = request.id; tc.request.name = request.name; tc.request.setHeader = (key, value) => { pm.setRequestHeader(key, value) }; tc.request.getHeader = (key) => { return pm.request.headers.get(key) }; tc.request.setBody = (key, value) => { pm.setRequestBody(key, value) }; // response if (lodashv4.isObject(pm.response)) { tc.response = lodashv4.cloneDeep(response); tc.response.size = pm.response.responseSize; tc.response.status = pm.response.code; tc.response.time = pm.response.responseTime; tc.response.text = response?.raw?.responseText; tc.response.contentType = lodashv4.get(response, 'headers.content-type'); tc.response.cookies = lodashv4.toPairs(lodashv4.get(tc, 'response.cookies')).map(([key, value]) => ({ key, value })); tc.response.headers = lodashv4.cloneDeep(lodashv4.cloneDeep(pm.response.headers.toJSON())); tc.response.getHeader = (key) => { return lodashv4.get(response.headers, lodashv4.toLower(key)) }; tc.response.getBinary = () => { console.warn("The tc.getBinary script syntax of Thunder client is not supported.") } } } catch (e) { console.warn("Thunder Client script has an issue; please check manually. EchoAPI is fully compatible with Postman.") } `, // 兼容 thuner client ]; const pmEvent = { prerequest: [], test: [], }; const eventMap = { pre_tasks: "prerequest", post_tasks: "test", }; lodash__default["default"].forEach(lodash__default["default"].keys(eventMap), function (type) { let exec = lodash__default["default"].join(sysScript, "\n"); lodash__default["default"].forEach( lodash__default["default"].get(request, `request.${type}`), /** @param {TaskScriptObject} item */ function (item) { if (lodash__default["default"].isObject(item)) { if (item.enabled > 0) { let randomCursor = `_${item.type}_${lodash__default["default"].random( 1, 99999999, false )}`; switch (item.type) { case "customScript": // done if (!lodash__default["default"].isEmpty(item?.data) && lodash__default["default"].isString(item?.data) && item?.data != 'undefined') { if (item?.language == "python") ; else { exec = `${exec} ${lodash__default["default"].trim(item?.data)} `; } } break; case "database": // done let dbconfig = database_configs[item.data?.connectionId] || {}; if (!lodash__default["default"].isEmpty(dbconfig)) { dbconfig = JSON.stringify(dbconfig, null, "\t"); exec = `${exec} ! await (async function(){ const dbData${randomCursor} = ${JSON.stringify(item.data || { query: '' })} const query${randomCursor} = pm.variables.replaceIn(_.get(dbData${randomCursor}, "query")); const method${randomCursor} = pm.variables.replaceIn(_.get(dbData${randomCursor}, "method") || ""); try{ let dbResult${randomCursor}List = []; if(${item.data?.isConsoleOutput} > 0){ console.log(query${randomCursor}, dbResult${randomCursor}List) } if(_.isObject(dbResult${randomCursor}List)){ _.forEach(${JSON.stringify(item.data?.variables || [])}, function(item) { let extra_value = jsonpath.value(dbResult${randomCursor}List, _.trim(item?.pattern)); pm[item?.type].set(item?.name, extra_value); }); }else{ if(!_.isObject(dbResult${randomCursor}List)){ _.forEach(${JSON.stringify(item.data?.variables || [])}, function(item) { let extra_value = dbResult${randomCursor}List; pm[item?.type].set(item?.name, extra_value); }); } } }catch(e){ console.error(query${randomCursor}, String(e?.message || e)) }; })();`; } break; case "wait": // done const timeout = lodash__default["default"].toInteger(item?.data); if (timeout > 0) { exec = `${exec}\n sleep(${timeout}); `; } break; case "assert": //done exec = `${exec} !(function(){ let assertObjectData${randomCursor} = ${JSON.stringify(item)}; let responseData${randomCursor} = ''; let expertData${randomCursor} = null; let expertExpression${randomCursor} = ''; let expertValue${randomCursor} = null; if(_.get(assertObjectData${randomCursor}, "data.type") == 'responseJson'){ try{ responseData${randomCursor} = pm.response.json(); }catch(e){ responseData${randomCursor} = xml2Json(pm.response.text()) } expertData${randomCursor} = jsonpath.value(responseData${randomCursor}, _.get(assertObjectData${randomCursor}, "data.expression.path")); }else if(_.get(assertObjectData${randomCursor}, "data.type") == 'responseXml'){ try{ responseData${randomCursor} = pm.response.text(); var xpath${randomCursor} = require('xpath'); var dom${randomCursor} = require('xmldom').DOMParser; expertData${randomCursor} = String(xpath${randomCursor}.select(_.get(assertObjectData${randomCursor}, "data.expression.path"), new dom${randomCursor}().parseFromString(responseData${randomCursor}, 'text/xml'))); }catch(e){} }else if(_.get(assertObjectData${randomCursor}, "data.type") == 'responseText'){ expertData${randomCursor} = pm.response.text(); }else if(_.get(assertObjectData${randomCursor}, "data.type") == 'responseHeader'){ expertData${randomCursor} = pm.response.headers.get(_.get(assertObjectData${randomCursor}, "data.expression.path")); }else if(_.get(assertObjectData${randomCursor}, "data.type") == 'responseCookie'){ expertData${randomCursor} = _.get(response.cookies, _.get(assertObjectData${randomCursor}, "data.expression.path")); }else if(_.get(assertObjectData${randomCursor}, "data.type") == 'responseCode'){ expertData${randomCursor} = pm.response.code; }else if(_.get(assertObjectData${randomCursor}, "data.type") == 'responseTime'){ expertData${randomCursor} = pm.response.responseTime; }else if(_.get(assertObjectData${randomCursor}, "data.type") == 'responseSize'){ expertData${randomCursor} = pm.response.responseSize; }else if(_.get(assertObjectData${randomCursor}, "data.type") == 'tempVars'){ expertData${randomCursor} = pm.variables.get(_.get(assertObjectData${randomCursor}, "data.expression.path")); }else if(_.get(assertObjectData${randomCursor}, "data.type") == 'envVars'){ expertData${randomCursor} = pm.environment.get(_.get(assertObjectData${randomCursor}, "data.expression.path")); }else if(_.get(assertObjectData${randomCursor}, "data.type") == 'globalVars'){ expertData${randomCursor} = pm.globals.get(_.get(assertObjectData${randomCursor}, "data.expression.path")); } expertValue${randomCursor} = pm.variables.replaceIn(_.get(assertObjectData${randomCursor}, "data.expression.compareValue")); if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "eq"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(String(${"expertData" + randomCursor})).to.eql(String(${"expertValue" + randomCursor})); }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "uneq"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(String(${"expertData" + randomCursor})).to.not.eql(String(${"expertValue" + randomCursor})); }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "lt"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(lodashv4.toNumber(${"expertData" + randomCursor})).to.be.below(lodashv4.toNumber(${"expertValue" + randomCursor})); }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "lte"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(lodashv4.toNumber(${"expertData" + randomCursor})).to.be.at.most(lodashv4.toNumber(${"expertValue" + randomCursor})); }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "gt"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(lodashv4.toNumber(${"expertData" + randomCursor})).to.be.above(lodashv4.toNumber(${"expertValue" + randomCursor})); }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "gte"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(lodashv4.toNumber(${"expertData" + randomCursor})).to.be.at.least(lodashv4.toNumber(${"expertValue" + randomCursor})); }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "includes"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(String(${"expertData" + randomCursor})).to.include(String(${"expertValue" + randomCursor})); }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "unincludes"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(String(${"expertData" + randomCursor})).to.not.include(String(${"expertValue" + randomCursor})); }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "null"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(${"expertData" + randomCursor}).to.be.empty; }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "notnull"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(String(${"expertData" + randomCursor})).to.not.be.empty; }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "exist"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(${"expertData" + randomCursor}).to.exist; }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "notexist"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(${"expertData" + randomCursor}).to.not.exist; }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "regularmatch"){ expertExpression${randomCursor} = null; if(!lodashv4.isEmpty(expertValue${randomCursor})){ expertValue${randomCursor} = new RegExp(lodashv4.trim(expertValue${randomCursor}, '/')); pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(${"expertData" + randomCursor}).to.match(expertValue${randomCursor}); }); } }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "belongscollection"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(String(${"expertData" + randomCursor})).to.be.oneOf(lodashv4.split(expertValue${randomCursor}, ",")); }); }else if(_.get(assertObjectData${randomCursor}, "data.expression.compareType") == "notbelongscollection"){ expertExpression${randomCursor} = null; pm.test(_.get(assertObjectData${randomCursor}, "name"), function () { pm.expect(String(${"expertData" + randomCursor})).to.not.be.oneOf(lodashv4.split(expertValue${randomCursor}, ",")); }); } })(); `; break; case "pickVars": //done const varTypeMap = { tempVars: "variables", envVars: "environment", globalVars: "globals", }; exec = `${exec}\n !(function(){ `; switch (item.data?.source) { case "responseJson": exec = `${exec}\n let varSource${randomCursor} = ''; try{ varSource${randomCursor} = pm.response.json(); }catch(e){ varSource${randomCursor} = xml2Json(pm.response.text()) } `; break; case "responseXml": case "responseText": exec = `${exec}\n let varSource${randomCursor} = pm.response.text(); `; break; case "responseHeader": exec = `${exec}\n let varSource${randomCursor} = pm.response.headers; `; break; case "responseCookie": exec = `${exec}\n let varSource${randomCursor} = response.cookies; `; break; case "responseCode": exec = `${exec}\n let varSource${randomCursor} = pm.response.code; `; break; case "responseTime": exec = `${exec}\n let varSource${randomCursor} = pm.response.responseTime; `; break; case "responseSize": exec = `${exec}\n let varSource${randomCursor} = pm.response.responseSize; `;