apipost-runtime
Version:
apipost-runtime 支持单接口http请求、自动化测试
1,429 lines (1,291 loc) • 196 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var apipostSend = require('apipost-send');
var urljoins$2 = require('urljoins');
var cliTable3 = require('cli-table3');
var zlib = require('zlib');
var buffer = require('buffer/');
var url = require('url');
var lodash = require('lodash');
var json5 = require('json5');
var uuid$1 = require('uuid');
var dayjs = require('dayjs');
var stripJsonComments = require('strip-json-comments');
var jsonBigint = require('json-bigint');
var apipostTools = require('apipost-tools');
var checkValidCookie = require('check-valid-cookie');
var atomicSleep = require('atomic-sleep');
var smCrypto = require('sm-crypto');
var async = require('async');
var formData = require('form-data');
var chai = require('chai');
var apipostMock = require('apipost-mock');
var cryptoJs = require('crypto-js');
var jsonpath = require('jsonpath');
var x2js = require('x2js');
var jquery = require('jquery');
var ajaxForNode = require('ajax-for-node');
var jsencryptNode = require('jsencrypt-node');
var moment = require('moment');
var vm2 = require('vm2');
var apipostInsideTools = require('apipost-inside-tools');
var urlJoin = require('url-join');
var fs = require('fs');
var path = require('path');
var mysql2 = require('mysql2');
var mssql = require('mssql');
var json2Csv = require('json-2-csv');
var testdataToApipostJson = require('testdata-to-apipost-json');
var clickhouse = require('clickhouse');
var pg = require('pg');
var child_process = require('child_process');
var artTemplate = require('art-template');
var cheerio = require('cheerio');
var tv4 = require('tv4');
var ajv = require('ajv');
var xml2js = require('xml2js');
var xpath = require('xpath');
var xmldom = require('@xmldom/xmldom');
var atob = require('atob');
var btoa = require('btoa');
var databaseQuery = require('database-query');
var csvParse = require('csv-parse');
var zh_CN = require('@faker-js/faker/locale/zh_CN');
var chaiApipost = require('chai-apipost');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var apipostSend__default = /*#__PURE__*/_interopDefaultLegacy(apipostSend);
var urljoins__default = /*#__PURE__*/_interopDefaultLegacy(urljoins$2);
var cliTable3__default = /*#__PURE__*/_interopDefaultLegacy(cliTable3);
var zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib);
var buffer__default = /*#__PURE__*/_interopDefaultLegacy(buffer);
var url__default = /*#__PURE__*/_interopDefaultLegacy(url);
var lodash__default = /*#__PURE__*/_interopDefaultLegacy(lodash);
var json5__default = /*#__PURE__*/_interopDefaultLegacy(json5);
var uuid__default = /*#__PURE__*/_interopDefaultLegacy(uuid$1);
var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
var stripJsonComments__default = /*#__PURE__*/_interopDefaultLegacy(stripJsonComments);
var jsonBigint__default = /*#__PURE__*/_interopDefaultLegacy(jsonBigint);
var apipostTools__default = /*#__PURE__*/_interopDefaultLegacy(apipostTools);
var checkValidCookie__default = /*#__PURE__*/_interopDefaultLegacy(checkValidCookie);
var atomicSleep__default = /*#__PURE__*/_interopDefaultLegacy(atomicSleep);
var smCrypto__default = /*#__PURE__*/_interopDefaultLegacy(smCrypto);
var async__default = /*#__PURE__*/_interopDefaultLegacy(async);
var formData__default = /*#__PURE__*/_interopDefaultLegacy(formData);
var chai__default = /*#__PURE__*/_interopDefaultLegacy(chai);
var apipostMock__default = /*#__PURE__*/_interopDefaultLegacy(apipostMock);
var cryptoJs__default = /*#__PURE__*/_interopDefaultLegacy(cryptoJs);
var jsonpath__default = /*#__PURE__*/_interopDefaultLegacy(jsonpath);
var x2js__default = /*#__PURE__*/_interopDefaultLegacy(x2js);
var jquery__default = /*#__PURE__*/_interopDefaultLegacy(jquery);
var ajaxForNode__default = /*#__PURE__*/_interopDefaultLegacy(ajaxForNode);
var jsencryptNode__default = /*#__PURE__*/_interopDefaultLegacy(jsencryptNode);
var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
var vm2__default = /*#__PURE__*/_interopDefaultLegacy(vm2);
var apipostInsideTools__default = /*#__PURE__*/_interopDefaultLegacy(apipostInsideTools);
var urlJoin__default = /*#__PURE__*/_interopDefaultLegacy(urlJoin);
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
var mysql2__default = /*#__PURE__*/_interopDefaultLegacy(mysql2);
var mssql__default = /*#__PURE__*/_interopDefaultLegacy(mssql);
var json2Csv__default = /*#__PURE__*/_interopDefaultLegacy(json2Csv);
var testdataToApipostJson__default = /*#__PURE__*/_interopDefaultLegacy(testdataToApipostJson);
var clickhouse__default = /*#__PURE__*/_interopDefaultLegacy(clickhouse);
var pg__default = /*#__PURE__*/_interopDefaultLegacy(pg);
var child_process__default = /*#__PURE__*/_interopDefaultLegacy(child_process);
var artTemplate__default = /*#__PURE__*/_interopDefaultLegacy(artTemplate);
var cheerio__default = /*#__PURE__*/_interopDefaultLegacy(cheerio);
var tv4__default = /*#__PURE__*/_interopDefaultLegacy(tv4);
var ajv__default = /*#__PURE__*/_interopDefaultLegacy(ajv);
var xml2js__default = /*#__PURE__*/_interopDefaultLegacy(xml2js);
var xpath__default = /*#__PURE__*/_interopDefaultLegacy(xpath);
var xmldom__default = /*#__PURE__*/_interopDefaultLegacy(xmldom);
var atob__default = /*#__PURE__*/_interopDefaultLegacy(atob);
var btoa__default = /*#__PURE__*/_interopDefaultLegacy(btoa);
var databaseQuery__default = /*#__PURE__*/_interopDefaultLegacy(databaseQuery);
var csvParse__default = /*#__PURE__*/_interopDefaultLegacy(csvParse);
var zh_CN__default = /*#__PURE__*/_interopDefaultLegacy(zh_CN);
var chaiApipost__default = /*#__PURE__*/_interopDefaultLegacy(chaiApipost);
// 一些公共方法
const { isUndefined, isString, isArray } = lodash__default["default"],
_ = lodash__default["default"];
const getCollectionServerId$2 = (collection_id, collection_list) => {
// step1:建立索引
const parents_data = {};
if (isArray(collection_list)) {
collection_list.forEach(data => {
parents_data[data?.target_id] = data;
});
}
//递归查找
const digFind = (target_id) => {
const result = 'default'; // 默认使用default
const targetInfo = parents_data?.[target_id];
if (isUndefined(targetInfo)) {
return result;
}
if (isString(targetInfo?.server_id) && targetInfo.server_id?.length > 0) {
return targetInfo.server_id;
}
return digFind(targetInfo.parent_id);
};
return digFind(collection_id);
};
const cliConsole$2 = function (args) {
if (isCliMode$2() && typeof args == 'string') {
console.log(args);
}
};
// is apipost-cli mode
const isCliMode$2 = function (iscli) {
if (typeof iscli === 'boolean') {
return iscli
} else {
try {
//通过判断环境变量来判断是否是cli模式
if (process.env['IS_CLI']){
return true;
}
if (process.stdin.isTTY) {
const commandName = process.argv[2];
if (commandName == 'run') {
return true;
}
}
return false;
} catch (e) { return false; }
}
};
// sleep 延迟方法
const sleepDelay$1 = function (ms) {
atomicSleep__default["default"](ms);
};
// 根据测试条件返回布尔值
const returnBoolean$1 = function (exp, compare, value, PREV_REQUEST) {
let bool = false;
if (exp === '') { // fix bug
return compare == 'null';
}
// get request
if (typeof exp == 'string' && _.has(PREV_REQUEST, 'request') && _.startsWith(exp, `{{request\.`) && _.endsWith(exp, '}}')) {
let _path = String(_.trimEnd(_.trimStart(exp, `{{request`), '}}'));
if (_path.substr(0, 1) == '.') {
_path = _path.substr(1);
}
exp = _.get(PREV_REQUEST.request, _path);
}
if (typeof value == 'string' && _.has(PREV_REQUEST, 'request') && _.startsWith(value, `{{request\.`) && _.endsWith(value, '}}')) {
let _path = String(_.trimEnd(_.trimStart(value, `{{request`), '}}'));
if (_path.substr(0, 1) == '.') {
_path = _path.substr(1);
}
value = _.get(PREV_REQUEST.request, _path);
}
// get response
if (typeof exp == 'string' && _.has(PREV_REQUEST, 'response') && _.startsWith(exp, `{{response\.`) && _.endsWith(exp, '}}')) {
let _path = String(_.trimEnd(_.trimStart(exp, `{{response`), '}}'));
if (_path.substr(0, 1) == '.') {
_path = _path.substr(1);
}
exp = _.get(PREV_REQUEST.response, _path);
}
if (typeof value == 'string' && _.has(PREV_REQUEST, 'response') && _.startsWith(value, `{{response\.`) && _.endsWith(value, '}}')) {
let _path = String(_.trimEnd(_.trimStart(value, `{{response`), '}}'));
if (_path.substr(0, 1) == '.') {
_path = _path.substr(1);
}
value = _.get(PREV_REQUEST.response, _path);
}
switch (compare) {
case 'eq':
bool = exp == value;
break;
case 'uneq':
bool = exp != value;
break;
case 'gt':
bool = _.gt(Number(exp), Number(value));
break;
case 'gte':
bool = _.gte(Number(exp), Number(value));
break;
case 'lt':
bool = _.lt(Number(exp), Number(value));
break;
case 'lte':
bool = _.lte(Number(exp), Number(value));
break;
case 'includes':
bool = _.includes(exp, value) || _.includes(exp, Number(value)); // fix bug
break;
case 'unincludes':
bool = !_.includes(exp, value) && !_.includes(exp, Number(value)); // fix bug
break;
case 'null':
bool = _.isNull(exp, value);
break;
case 'notnull':
bool = !_.isNull(exp, value);
break;
}
return bool;
};
// 获取某接口的 所有父target
const getParentTargetIDs$1 = function (collection, target_id, parent_ids = []) {
if (_.isArray(collection)) {
const item = _.find(collection, _.matchesProperty('target_id', target_id));
if (item) {
parent_ids.push(item.parent_id);
getParentTargetIDs$1(collection, item.parent_id, parent_ids);
}
}
return parent_ids;
};
// 获取 指定 event_id 的 initDefinitions 的所有父亲ID
const getInitDefinitionsParentIDs$1 = function (event_id, initDefinitions = []) {
const definitionArr = [];
(function convertArray(initDefinitions) {
if (_.isArray(initDefinitions)) {
initDefinitions.forEach((item) => {
definitionArr.push({
event_id: item.event_id,
parent_id: item.parent_id,
});
if (_.isArray(item.children)) {
convertArray(item.children);
}
});
}
}(initDefinitions));
const parentArr = [];
(function getParentArr(event_id) {
definitionArr.forEach((item) => {
if (item.event_id == event_id && item.parent_id != '0') {
parentArr.push(item.parent_id);
getParentArr(item.parent_id);
}
});
}(event_id));
return parentArr;
};
// 获取某接口的详细信息
const getItemFromCollection$1 = function (collection, target_id) {
return _.find(collection, _.matchesProperty('target_id', target_id));
};
// 拓展操作method
const arrayPrototypeExtend$1 = function (obj) {
if (_.isArray(obj)) {
Object.defineProperty(obj, 'all', { // 1
configurable: true,
value() {
return obj;
},
});
Object.defineProperty(obj, 'count', { // 2
configurable: true,
value() {
return _.size(obj);
},
});
Object.defineProperty(obj, 'each', { // 3
configurable: true,
value(callback) {
if (_.isFunction(callback)) {
_.forEach(obj, function (item) {
callback(item);
});
}
},
});
Object.defineProperty(obj, 'has', { // 4
configurable: true,
value(key) {
return _.keys(_.fromPairs(obj.map((item) => {
if (_.isObject(item)) {
return [item.key, item.value];
} else {
return [item]
}
}))).indexOf(key) > -1
},
});
Object.defineProperty(obj, 'get', { // 5
configurable: true,
value(key) {
return _.get(_.fromPairs(obj.map(item => [item.key, item.value])), key);
},
});
Object.defineProperty(obj, 'idx', { // 6
configurable: true,
value(key) {
return _.get(obj, Number(key));
},
});
Object.defineProperty(obj, 'one', { // 7
configurable: true,
value(key) {
return _.find(obj, { key: key });
},
});
Object.defineProperty(obj, 'toObject', { // 8
configurable: true,
value() {
return _.fromPairs(obj.map(item => [item.key, item.value]));
},
});
Object.defineProperty(obj, 'toString', { // 9
configurable: true,
value() {
return _.join(_.map(obj, item => `${item.key}:${item.value}`), '\n')
},
});
Object.defineProperty(obj, 'members', { // 10
configurable: true,
value: obj
});
} else if (_.isObject(obj) && !_.isFunction(obj)) {
Object.defineProperty(obj, 'toJSON', { // 1
configurable: true,
value() {
if (_.isObject(obj)) {
return obj;
} else {
try {
return JSON.parse(obj);
} catch (e) {
return obj
}
}
},
});
}
if (_.isObject(obj) && !_.isFunction(obj)) {
// 递归处理
_.forEach(obj, (items) => {
arrayPrototypeExtend$1(items);
});
}
};
var utils$1 = {
getCollectionServerId: getCollectionServerId$2,
cliConsole: cliConsole$2,
isCliMode: isCliMode$2,
sleepDelay: sleepDelay$1,
returnBoolean: returnBoolean$1,
getParentTargetIDs: getParentTargetIDs$1,
getInitDefinitionsParentIDs: getInitDefinitionsParentIDs$1,
getItemFromCollection: getItemFromCollection$1,
arrayPrototypeExtend: arrayPrototypeExtend$1
};
function commonjsRequire () {
throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');
}
// 利用开源的 faker.js 库,用于生成内置随机数据
const { sample } = lodash__default["default"],
LOCALES = ['af', 'am', 'an', 'ar', 'ast', 'az', 'be', 'bg', 'bh', 'bn', 'br', 'bs', 'ca', 'ceb', 'ckb', 'co', 'cs',
'cy', 'da', 'de', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'fi', 'fil', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl',
'gn', 'gu', 'ha', 'haw', 'he', 'hi', 'hmn', 'hr', 'ht', 'hu', 'hy', 'ia', 'id', 'ig', 'is', 'it', 'ja', 'jv',
'ka', 'kk', 'km', 'kn', 'ko', 'ku', 'ky', 'la', 'lb', 'ln', 'lo', 'lt', 'lv', 'mg', 'mi', 'mk', 'ml', 'mn',
'mo', 'mr', 'ms', 'mt', 'my', 'nb', 'ne', 'nl', 'nn', 'no', 'ny', 'oc', 'om', 'or', 'pa', 'pl', 'ps', 'pt',
'qu', 'rm', 'ro', 'ru', 'sd', 'sh', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'st', 'su', 'sv', 'sw',
'ta', 'te', 'tg', 'th', 'ti', 'tk', 'to', 'tr', 'tt', 'tw', 'ug', 'uk', 'ur', 'uz', 'vi', 'wa', 'xh', 'yi',
'yo', 'zh', 'zu'],
{ faker: faker$1 } = zh_CN__default["default"], // zh_CN/en
// add for 7.2.0
// paths for directories
DIRECTORY_PATHS = [
'/Applications',
'/bin',
'/boot',
'/boot/defaults',
'/dev',
'/etc',
'/etc/defaults',
'/etc/mail',
'/etc/namedb',
'/etc/periodic',
'/etc/ppp',
'/home',
'/home/user',
'/home/user/dir',
'/lib',
'/Library',
'/lost+found',
'/media',
'/mnt',
'/net',
'/Network',
'/opt',
'/opt/bin',
'/opt/include',
'/opt/lib',
'/opt/sbin',
'/opt/share',
'/private',
'/private/tmp',
'/private/var',
'/proc',
'/rescue',
'/root',
'/sbin',
'/selinux',
'/srv',
'/sys',
'/System',
'/tmp',
'/Users',
'/usr',
'/usr/X11R6',
'/usr/bin',
'/usr/include',
'/usr/lib',
'/usr/libdata',
'/usr/libexec',
'/usr/local/bin',
'/usr/local/src',
'/usr/obj',
'/usr/ports',
'/usr/sbin',
'/usr/share',
'/usr/src',
'/var',
'/var/log',
'/var/mail',
'/var/spool',
'/var/tmp',
'/var/yp',
],
dynamicGenerators$1 = {
$guid: {
description: 'A v4 style guid',
generator() {
return uuid.v4();
},
},
$timestamp: {
description: 'The current timestamp',
generator() {
return Math.round(Date.now() / 1000);
},
},
$isoTimestamp: {
description: 'The current ISO timestamp at zero UTC',
generator() {
return new Date().toISOString();
},
},
$randomInt: {
description: 'A random integer between 0 and 1000',
generator() {
return ~~(Math.random() * (1000 + 1));
},
},
// faker.phone.phoneNumber returns phone number with or without
// extension randomly. this only returns a phone number without extension.
$randomPhoneNumber: {
description: 'A random 10-digit phone number',
generator() {
return faker$1.phone.phoneNumberFormat(0);
},
},
// faker.phone.phoneNumber returns phone number with or without
// extension randomly. this only returns a phone number with extension.
$randomPhoneNumberExt: {
description: 'A random phone number with extension (12 digits)',
generator() {
return `${faker$1.datatype.number({ min: 1, max: 99 })}-${faker$1.phone.phoneNumberFormat(0)}`;
},
},
// faker's random.locale only returns 'en'. this returns from a list of
// random locales
$randomLocale: {
description: 'A random two-letter language code (ISO 639-1)',
generator() {
return sample(LOCALES);
},
},
// fakers' random.words returns random number of words between 1, 3.
// this returns number of words between 2, 5.
$randomWords: {
description: 'Some random words',
generator() {
let words = [],
count = faker$1.datatype.number({ min: 2, max: 5 }),
i;
for (i = 0; i < count; i++) {
words.push(faker$1.random.word());
}
return words.join(' ');
},
},
// faker's system.filePath retuns nothing. this returns a path for a file.
$randomFilePath: {
description: 'A random file path',
generator() {
return `${dynamicGenerators$1.$randomDirectoryPath.generator()}/${faker$1.system.fileName()}`;
},
},
// faker's system.directoryPath retuns nothing. this returns a path for
// a directory.
$randomDirectoryPath: {
description: 'A random directory path',
generator() {
return sample(DIRECTORY_PATHS);
},
},
$randomCity: {
description: 'A random city name',
generator: faker$1.address.city,
},
$randomStreetName: {
description: 'A random street name',
generator: faker$1.address.streetName,
},
$randomStreetAddress: {
description: 'A random street address (e.g. 1234 Main Street)',
generator: faker$1.address.streetAddress,
},
$randomCountry: {
description: 'A random country',
generator: faker$1.address.country,
},
$randomCountryCode: {
description: 'A random 2-letter country code (ISO 3166-1 alpha-2)',
generator: faker$1.address.countryCode,
},
$randomLatitude: {
description: 'A random latitude coordinate',
generator: faker$1.address.latitude,
},
$randomLongitude: {
description: 'A random longitude coordinate',
generator: faker$1.address.longitude,
},
$randomColor: {
description: 'A random color',
generator: faker$1.commerce.color,
},
$randomDepartment: {
description: 'A random commerce category (e.g. electronics, clothing)',
generator: faker$1.commerce.department,
},
$randomProductName: {
description: 'A random product name (e.g. handmade concrete tuna)',
generator: faker$1.commerce.productName,
},
$randomProductAdjective: {
description: 'A random product adjective (e.g. tasty, eco-friendly)',
generator: faker$1.commerce.productAdjective,
},
$randomProductMaterial: {
description: 'A random product material (e.g. steel, plastic, leather)',
generator: faker$1.commerce.productMaterial,
},
$randomProduct: {
description: 'A random product (e.g. shoes, table, chair)',
generator: faker$1.commerce.product,
},
$randomCompanyName: {
description: 'A random company name',
generator: faker$1.company.companyName,
},
$randomCompanySuffix: {
description: 'A random company suffix (e.g. Inc, LLC, Group)',
generator: faker$1.company.companySuffix,
},
$randomCatchPhrase: {
description: 'A random catchphrase',
generator: faker$1.company.catchPhrase,
},
$randomBs: {
description: 'A random phrase of business speak',
generator: faker$1.company.bs,
},
$randomCatchPhraseAdjective: {
description: 'A random catchphrase adjective',
generator: faker$1.company.catchPhraseAdjective,
},
$randomCatchPhraseDescriptor: {
description: 'A random catchphrase descriptor',
generator: faker$1.company.catchPhraseDescriptor,
},
$randomCatchPhraseNoun: {
description: 'Randomly generates a catchphrase noun',
generator: faker$1.company.catchPhraseNoun,
},
$randomBsAdjective: {
description: 'A random business speak adjective',
generator: faker$1.company.bsAdjective,
},
$randomBsBuzz: {
description: 'A random business speak buzzword',
generator: faker$1.company.bsBuzz,
},
$randomBsNoun: {
description: 'A random business speak noun',
generator: faker$1.company.bsNoun,
},
$randomDatabaseColumn: {
description: 'A random database column name (e.g. updatedAt, token, group)',
generator: faker$1.database.column,
},
$randomDatabaseType: {
description: 'A random database type (e.g. tiny int, double, point)',
generator: faker$1.database.type,
},
$randomDatabaseCollation: {
description: 'A random database collation (e.g. cp1250_bin)',
generator: faker$1.database.collation,
},
$randomDatabaseEngine: {
description: 'A random database engine (e.g. Memory, Archive, InnoDB)',
generator: faker$1.database.engine,
},
$randomDatePast: {
description: 'A random past datetime',
generator: faker$1.date.past,
},
$randomDateFuture: {
description: 'A random future datetime',
generator: faker$1.date.future,
},
$randomDateRecent: {
description: 'A random recent datetime',
generator: faker$1.date.recent,
},
$randomMonth: {
description: 'A random month',
generator: faker$1.date.month,
},
$randomWeekday: {
description: 'A random weekday',
generator: faker$1.date.weekday,
},
$randomBankAccount: {
description: 'A random 8-digit bank account number',
generator: faker$1.finance.account,
},
$randomBankAccountName: {
description: 'A random bank account name (e.g. savings account, checking account)',
generator: faker$1.finance.accountName,
},
$randomCreditCardMask: {
description: 'A random masked credit card number',
generator: faker$1.finance.mask,
},
$randomPrice: {
description: 'A random price between 0.00 and 1000.00',
generator: faker$1.finance.amount,
},
$randomTransactionType: {
description: 'A random transaction type (e.g. invoice, payment, deposit)',
generator: faker$1.finance.transactionType,
},
$randomCurrencyCode: {
description: 'A random 3-letter currency code (ISO-4217)',
generator: faker$1.finance.currencyCode,
},
$randomCurrencyName: {
description: 'A random currency name',
generator: faker$1.finance.currencyName,
},
$randomCurrencySymbol: {
description: 'A random currency symbol',
generator: faker$1.finance.currencySymbol,
},
$randomBitcoin: {
description: 'A random bitcoin address',
generator: faker$1.finance.bitcoinAddress,
},
$randomBankAccountIban: {
description: 'A random 15-31 character IBAN (International Bank Account Number)',
generator: faker$1.finance.iban,
},
$randomBankAccountBic: {
description: 'A random BIC (Bank Identifier Code)',
generator: faker$1.finance.bic,
},
$randomAbbreviation: {
description: 'A random abbreviation',
generator: faker$1.hacker.abbreviation,
},
$randomAdjective: {
description: 'A random adjective',
generator: faker$1.hacker.adjective,
},
$randomNoun: {
description: 'A random noun',
generator: faker$1.hacker.noun,
},
$randomVerb: {
description: 'A random verb',
generator: faker$1.hacker.verb,
},
$randomIngverb: {
description: 'A random verb ending in “-ing”',
generator: faker$1.hacker.ingverb,
},
$randomPhrase: {
description: 'A random phrase',
generator: faker$1.hacker.phrase,
},
$randomAvatarImage: {
description: 'A random avatar image',
generator: faker$1.image.avatar,
},
$randomImageUrl: {
description: 'A URL for a random image',
generator: faker$1.image.imageUrl,
},
$randomAbstractImage: {
description: 'A URL for a random abstract image',
generator: faker$1.image.abstract,
},
$randomAnimalsImage: {
description: 'A URL for a random animal image',
generator: faker$1.image.animals,
},
$randomBusinessImage: {
description: 'A URL for a random stock business image',
generator: faker$1.image.business,
},
$randomCatsImage: {
description: 'A URL for a random cat image',
generator: faker$1.image.cats,
},
$randomCityImage: {
description: 'A URL for a random city image',
generator: faker$1.image.city,
},
$randomFoodImage: {
description: 'A URL for a random food image',
generator: faker$1.image.food,
},
$randomNightlifeImage: {
description: 'A URL for a random nightlife image',
generator: faker$1.image.nightlife,
},
$randomFashionImage: {
description: 'A URL for a random fashion image',
generator: faker$1.image.fashion,
},
$randomPeopleImage: {
description: 'A URL for a random image of a person',
generator: faker$1.image.people,
},
$randomNatureImage: {
description: 'A URL for a random nature image',
generator: faker$1.image.nature,
},
$randomSportsImage: {
description: 'A URL for a random sports image',
generator: faker$1.image.sports,
},
$randomTransportImage: {
description: 'A URL for a random transportation image',
generator: faker$1.image.transport,
},
$randomImageDataUri: {
description: 'A random image data URI',
generator: faker$1.image.dataUri,
},
$randomEmail: {
description: 'A random email address',
generator: faker$1.internet.email,
},
$randomExampleEmail: {
description: 'A random email address from an “example” domain (e.g. ben@example.com)',
generator: faker$1.internet.exampleEmail,
},
$randomUserName: {
description: 'A random username',
generator: faker$1.internet.userName,
},
$randomProtocol: {
description: 'A random internet protocol',
generator: faker$1.internet.protocol,
},
$randomUrl: {
description: 'A random URL',
generator: faker$1.internet.url,
},
$randomDomainName: {
description: 'A random domain name (e.g. gracie.biz, trevor.info)',
generator: faker$1.internet.domainName,
},
$randomDomainSuffix: {
description: 'A random domain suffix (e.g. .com, .net, .org)',
generator: faker$1.internet.domainSuffix,
},
$randomDomainWord: {
description: 'A random unqualified domain name (a name with no dots)',
generator: faker$1.internet.domainWord,
},
$randomIP: {
description: 'A random IPv4 address',
generator: faker$1.internet.ip,
},
$randomIPV6: {
description: 'A random IPv6 address',
generator: faker$1.internet.ipv6,
},
$randomUserAgent: {
description: 'A random user agent',
generator: faker$1.internet.userAgent,
},
$randomHexColor: {
description: 'A random hex value',
generator: faker$1.internet.color,
},
$randomMACAddress: {
description: 'A random MAC address',
generator: faker$1.internet.mac,
},
$randomPassword: {
description: 'A random 15-character alpha-numeric password',
generator: faker$1.internet.password,
},
$randomLoremWord: {
description: 'A random word of lorem ipsum text',
generator: faker$1.lorem.word,
},
$randomLoremWords: {
description: 'Some random words of lorem ipsum text',
generator: faker$1.lorem.words,
},
$randomLoremSentence: {
description: 'A random sentence of lorem ipsum text',
generator: faker$1.lorem.sentence,
},
$randomLoremSlug: {
description: 'A random lorem ipsum URL slug',
generator: faker$1.lorem.slug,
},
$randomLoremSentences: {
description: 'A random 2-6 sentences of lorem ipsum text',
generator: faker$1.lorem.sentences,
},
$randomLoremParagraph: {
description: 'A random paragraph of lorem ipsum text',
generator: faker$1.lorem.paragraph,
},
$randomLoremParagraphs: {
description: '3 random paragraphs of lorem ipsum text',
generator: faker$1.lorem.paragraphs,
},
$randomLoremText: {
description: 'A random amount of lorem ipsum text',
generator: faker$1.lorem.text,
},
$randomLoremLines: {
description: '1-5 random lines of lorem ipsum',
generator: faker$1.lorem.lines,
},
$randomFirstName: {
description: 'A random first name',
generator: faker$1.name.firstName,
},
$randomLastName: {
description: 'A random last name',
generator: faker$1.name.lastName,
},
$randomFullName: {
description: 'A random first and last name',
generator: faker$1.name.findName,
},
$randomJobTitle: {
description: 'A random job title (e.g. senior software developer)',
generator: faker$1.name.jobTitle,
},
$randomNamePrefix: {
description: 'A random name prefix (e.g. Mr., Mrs., Dr.)',
generator: faker$1.name.prefix,
},
$randomNameSuffix: {
description: 'A random name suffix (e.g. Jr., MD, PhD)',
generator: faker$1.name.suffix,
},
$randomJobDescriptor: {
description: 'A random job descriptor (e.g., senior, chief, corporate, etc.)',
generator: faker$1.name.jobDescriptor,
},
$randomJobArea: {
description: 'A random job area (e.g. branding, functionality, usability)',
generator: faker$1.name.jobArea,
},
$randomJobType: {
description: 'A random job type (e.g. supervisor, manager, coordinator, etc.)',
generator: faker$1.name.jobType,
},
$randomUUID: {
description: 'A random 36-character UUID',
generator: faker$1.datatype.uuid,
},
$randomBoolean: {
description: 'A random boolean value (true/false)',
generator: faker$1.datatype.boolean,
},
$randomWord: {
description: 'A random word',
generator: faker$1.random.word,
},
$randomAlphaNumeric: {
description: 'A random alpha-numeric character',
generator: faker$1.random.alphaNumeric,
},
$randomFileName: {
description: 'A random file name (includes uncommon extensions)',
generator: faker$1.system.fileName,
},
$randomCommonFileName: {
description: 'A random file name',
generator: faker$1.system.commonFileName,
},
$randomMimeType: {
description: 'A random MIME type',
generator: faker$1.system.mimeType,
},
$randomCommonFileType: {
description: 'A random, common file type (e.g., video, text, image, etc.)',
generator: faker$1.system.commonFileType,
},
$randomCommonFileExt: {
description: 'A random, common file extension (.doc, .jpg, etc.)',
generator: faker$1.system.commonFileExt,
},
$randomFileType: {
description: 'A random file type (includes uncommon file types)',
generator: faker$1.system.fileType,
},
$randomFileExt: {
description: 'A random file extension (includes uncommon extensions)',
generator: faker$1.system.fileExt,
},
$randomSemver: {
description: 'A random semantic version number',
generator: faker$1.system.semver,
},
};
var faker_1 = {
LOCALES,
DIRECTORY_PATHS,
dynamicGenerators: dynamicGenerators$1,
};
// apipost 内置变量 如:{{$randomSportsImage}}等
const { dynamicGenerators } = faker_1;
// for 7.2.2
const insideVariablesScopeInit = function (insideVariablesScope) {
/**
* 拓展mockjs, 定义一些内置 mock
* fix bug for 7.0.8
*/
const _mockjsRandomExtend = {};
// 重写 string
_mockjsRandomExtend.string = function (pool, start, end) {
let charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
if (typeof pool === 'string') {
charSet = apipostMock__default["default"].mock(pool);
}
if (typeof pool === 'string') {
pool = apipostMock__default["default"].mock(pool);
try {
if (!lodash__default["default"].isNaN(Number(start))) {
if (lodash__default["default"].isNaN(Number(end)) === false) {
return lodash__default["default"].sampleSize(pool, lodash__default["default"].random(start, end)).join('');
}
return lodash__default["default"].sampleSize(pool, start).join('');
}
} catch (ex) { }
return lodash__default["default"].sample(pool);
}
if (typeof pool === 'number') {
if (typeof start === 'number') {
return lodash__default["default"].sampleSize(charSet, lodash__default["default"].random(pool, start)).join('');
}
return lodash__default["default"].sampleSize(charSet, pool).join('');
}
};
new Array('telephone', 'phone', 'mobile').forEach((func) => {
_mockjsRandomExtend[func] = function () {
return this.pick(['131', '132', '137', '188']) + apipostMock__default["default"].mock(/\d{8}/);
};
});
new Array('username', 'user_name', 'nickname', 'nick_name').forEach((func) => {
_mockjsRandomExtend[func] = function () {
return apipostMock__default["default"].mock('@cname');
};
});
new Array('avatar', 'icon', 'img', 'photo', 'pic').forEach((func) => {
_mockjsRandomExtend[func] = function () {
return apipostMock__default["default"].mock('@image(\'400x400\')');
};
});
new Array('description').forEach((func) => {
_mockjsRandomExtend[func] = function () {
return apipostMock__default["default"].mock('@cparagraph');
};
});
new Array('id', 'userid', 'user_id', 'articleid', 'article_id').forEach((func) => {
_mockjsRandomExtend[func] = function () {
return apipostMock__default["default"].mock('@integer(100, 1000)');
};
});
apipostMock__default["default"].Random.extend(_mockjsRandomExtend);
// 拓展兼容 Postman 的内置变量 for 7.2.0
lodash__default["default"].forEach(dynamicGenerators, (item, key) => {
if (typeof item.generator === 'function') {
insideVariablesScope.list[key] = (function () {
try {
return item.generator();
} catch (e) {
return '';
}
}());
}
});
new Array('natural', 'integer', 'float', 'character', 'range', 'date', 'time', 'datetime', 'now', 'guid', 'integeincrementr', 'url', 'protocol', 'domain', 'tld', 'email', 'ip', 'region', 'province', 'city', 'county', 'county', 'zip', 'first', 'last', 'name', 'cfirst', 'clast', 'cname', 'color', 'rgb', 'rgba', 'hsl', 'paragraph', 'cparagraph', 'sentence', 'csentence', 'word', 'cword', 'title', 'ctitle', 'username', 'user_name', 'nickname', 'nick_name', 'avatar', 'icon', 'img', 'photo', 'pic', 'description', 'id', 'userid', 'user_id', 'articleid', 'article_id').forEach((func) => {
insideVariablesScope.list[`$${func}`] = apipostMock__default["default"].mock(`@${func}`);
});
new Array('phone', 'mobile', 'telephone').forEach((func) => {
insideVariablesScope.list[`$${func}`] = ['131', '132', '137', '188'][lodash__default["default"].random(0, 3)] + apipostMock__default["default"].mock(/\d{8}/);
});
// 兼容 v3
insideVariablesScope.list.$timestamp = (function () {
return Date.parse(new Date()) / 1000;
}());
insideVariablesScope.list.$microTimestamp = (function () {
return (new Date()).getTime();
}());
insideVariablesScope.list.$randomInt = (function () {
return Math.floor(Math.random() * 1000);
}());
insideVariablesScope.list.$randomFloat = (function () {
return Math.random() * 1000;
}());
};
var insideVariablesScope = insideVariablesScopeInit;
// 实现 pm.request.headers
const pmRequestHeaders = function (scope, pm) {
let _headers = [];
lodash__default["default"].forEach(scope.script_request?.headers, function (value, key) {
_headers.push({
key: key,
value: value
});
});
['add', 'upsert'].forEach((method) => {
Object.defineProperty(_headers, method, { // for 7.2.2
configurable: true,
value(item) {
if (lodash__default["default"].isObject(item) && lodash__default["default"].isString(item?.key)) {
return pm.setRequestHeader(item?.key, item?.value);
} else if (lodash__default["default"].isString(item)) {
let itemArr = lodash__default["default"].split(item, ':');
return pm.setRequestHeader(itemArr[0], itemArr[1]);
}
},
});
});
['append', 'populate', 'repopulate', 'insert', 'insertAfter'].forEach((method) => {
Object.defineProperty(_headers, method, { // for 7.2.2
configurable: true,
value(obj) {
let item = lodash__default["default"].toPairs(obj);
if (lodash__default["default"].isArray(lodash__default["default"].get(item, 0))) {
return pm.setRequestHeader(item[0][0], item[0][1]);
}
},
});
});
Object.defineProperty(_headers, 'remove', {
configurable: true,
value(key) {
return pm.removeRequestQuery(key);
},
});
return _headers;
};
var pmRequestHeaders_1 = pmRequestHeaders;
// 实现 pm.request.body
const pmRequestBody = function (scope, pm) {
let _body = {};
switch (scope.script_request?.mode) {
case 'none':
_body = {};
break;
case 'urlencoded':
let _urlencoded = [];
lodash__default["default"].forEach(scope.script_request?.request_bodys, function (value, key) {
_urlencoded.push({
key: key,
value: value,
type: "text"
});
});
_body = {
mode: 'urlencoded',
urlencoded: _urlencoded
};
break;
case 'form-data':
let _formdata = [];
lodash__default["default"].forEach(scope.script_request?.request_bodys, function (value, key) {
_formdata.push({
key: key,
value: value,
type: "text"
});
});
_body = {
mode: 'formdata',
formdata: _formdata
};
break;
default:
_body = {
mode: 'raw',
raw: scope.script_request?.request_bodys
};
break;
}
return _body;
};
var pmRequestBody_1 = pmRequestBody;
// 实现 pm.request.url
const pmRequestUrl = function (scope, pm) {
let _urls = {};
try {
let _urlParse = url__default["default"].parse(lodash__default["default"].cloneDeep(scope.script_request?.url));
if (lodash__default["default"].isObject(_urlParse)) {
lodash__default["default"].forEach({ hostname: 'getHost', host: 'getRemote', path: 'getPath', query: 'getQueryString' }, function (method, path) {
Object.defineProperty(_urls, method, {
configurable: true,
value() {
return lodash__default["default"].get(_urlParse, path)
},
});
});
Object.defineProperty(_urls, 'addQueryParams', { // 兼容两种写法
configurable: true,
value(item) {
if (lodash__default["default"].isObject(item) && lodash__default["default"].isString(item.key)) {
return pm.setRequestQuery(item.key, item.value)
} else if (lodash__default["default"].isString(item)) {
let itemArr = lodash__default["default"].split(item, '=');
return pm.setRequestQuery(itemArr[0], itemArr[1])
}
},
});
Object.defineProperty(_urls, 'removeQueryParams', {
configurable: true,
value(keys) {
if (lodash__default["default"].isArray(keys)) {
lodash__default["default"].forEach(keys, (key) => {
return pm.removeRequestQuery(key)
});
} else if (lodash__default["default"].isString(keys)) {
return pm.removeRequestQuery(keys)
}
},
});
Object.defineProperty(_urls, 'update', {
configurable: true,
value(uri) {
scope.script_request.updateurl = uri;
},
});
lodash__default["default"].forEach(_urlParse, (value, key) => {
if (key == 'host') {
let _host = lodash__default["default"].split(_urlParse?.hostname, '.');
Object.defineProperty(_urls, key, {
configurable: true,
enumerable: true,
value: _host,
});
} else if (key == 'path') {
let _paths = lodash__default["default"].split(lodash__default["default"].trim(value, '/'), '/');
Object.defineProperty(_urls, key, {
configurable: true,
enumerable: true,
value: _paths,
});
} else if (key == 'query') {
let _querys = [];
lodash__default["default"].forEach(scope.script_request?.request_querys, (value, key) => {
_querys.push({
key: key,
value: value
});
});
Object.defineProperty(_urls, key, {
configurable: true,
enumerable: true,
value: _querys,
});
} else {
if (lodash__default["default"].isString(key)) {
Object.defineProperty(_urls, key, {
configurable: true,
enumerable: true,
value: value,
});
}
}
});
}
} catch (e) { }
// variables
let request_variables = scope.script_request?.request_variables;
if(!lodash__default["default"].isObject(request_variables)){
request_variables = {};
}
Object.defineProperty(_urls, 'variables', {
configurable: true,
enumerable: true,
value:lodash__default["default"].map(Object.entries(request_variables), ([key, value]) => { return { key, value }; })
});
Object.defineProperty(_urls, 'toString', {
configurable: true,
value() {
return scope.script_request?.url
},
});
Object.defineProperty(_urls, 'toJSON', {
configurable: true,
value() {
return {
path: _urls.path,
host: _urls.host,
query: _urls.query,
variable: []
}
},
});
return _urls;
};
var pmRequestUrl_1 = pmRequestUrl;
// 实现 pm.cookies
const pmCookies = function (scope, pm) {
let _cookies = lodash__default["default"].map(scope?.response?.data?.response?.rawCookies, obj => {
return {
...obj,
key: obj.name
};
});
// arrayPrototypeExtend(_cookies);
lodash__default["default"].assign(_cookies, {
jar: function () {
return {
set: function (url, name, value, callback) {
if (typeof callback != 'function') {
callback = function () { };
}
try {
if (lodash__default["default"].isArray(scope?.jar?.data)) {
let _replace = 0;
let _cookie = {};
lodash__default["default"].forEach(scope?.jar?.data, function (item, key) {
if (item.domain == url && item.name == name) {
_replace = 1;
lodash__default["default"].set(scope, `jar.data[${key}].value`, value);
_cookie = lodash__default["default"].get(scope, `jar.data[${key}].value`);
}