artillery
Version:
Cloud-scale load testing. https://www.artillery.io
95 lines (77 loc) • 2.52 kB
text/typescript
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import { parse as urlparse } from 'node:url';
import chalkModule from 'chalk';
const chalk: any = chalkModule;
import createDebug from 'debug';
const debug = createDebug('plugin:expect');
export {
prettyPrint as pretty,
jsonPrint as json,
prettyError,
silent
};
function silent(_requestExpectation, _req, _res, _userContext) {
return;
}
function prettyPrint(requestExpectations, req, res, userContext) {
debug('prettyPrint formatter');
if (requestExpectations.results.length > 0) {
console.log(
`${chalk.blue('*', req.method, urlparse(req.url).path)} ${
req.name ? `- ${req.name}` : ''
}\n`
);
}
let hasFailedExpectations = false;
requestExpectations.results.forEach((result) => {
console.log(
` ${result.ok ? chalk.green('ok') : chalk.red('not ok')} ${
result.type
} ${result.got} `
);
if (!result.ok) {
console.log(` expected: ${result.expected}`);
console.log(` got: ${result.got}`);
hasFailedExpectations = true;
}
});
if (hasFailedExpectations) {
printExchangeContext(req, res, userContext);
}
}
function printExchangeContext(req, res, userContext) {
console.log(chalk.yellow(' Request params:'));
console.log(prepend(req.url, ' '));
console.log(prepend(JSON.stringify(req.json || '', null, 2), ' '));
console.log(chalk.yellow(' Headers:'));
Object.keys(res.headers).forEach((h) => {
console.log(` ${h}: ${res.headers[h]}`);
});
console.log(chalk.yellow(' Body:'));
console.log(res.body?.substring(0, 512));
console.log(chalk.yellow(' User variables:'));
Object.keys(userContext.vars)
.filter(
(varName) => varName !== '$processEnvironment' && varName !== '$env'
)
.forEach((varName) => {
console.log(` ${varName}: ${userContext.vars[varName]}`);
});
}
function jsonPrint(requestExpectations, _req, _res, _userContext) {
console.log(JSON.stringify(requestExpectations));
}
function prettyError(requestExpectations, req, res, userContext) {
if (requestExpectations.results.find((result) => !result.ok) === undefined) {
return;
}
prettyPrint(requestExpectations, req, res, userContext);
}
function prepend(text, str) {
return text
.split('\n')
.map((line) => str + line)
.join('\n');
}