New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

loadmill

Package Overview
Dependencies
Maintainers
3
Versions
100
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

loadmill - npm Package Compare versions

Comparing version 3.2.3 to 3.2.4

6

lib/index.d.ts

@@ -9,4 +9,4 @@ import './polyfills';

runTestPlan(testPlan: Loadmill.TestPlanDef, params: Loadmill.Params): Promise<Loadmill.TestDef | undefined>;
junitReport(testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, path?: string | undefined): Promise<void>;
mochawesomeReport(testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, path?: string | undefined): Promise<void>;
junitReport(testResult: Loadmill.TestResult, path?: string | undefined): Promise<void>;
mochawesomeReport(testResult: Loadmill.TestResult, path?: string | undefined): Promise<void>;
};

@@ -19,3 +19,3 @@ declare namespace Loadmill {

id: string;
type: string;
type: TYPES;
}

@@ -22,0 +22,0 @@ interface TestSuiteDef {

import * as Loadmill from "./index";
export declare const junitReport: (testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, token: string, path?: string | undefined) => Promise<void>;
export declare const mochawesomeReport: (testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, token: string, path?: string | undefined) => Promise<void>;
export declare const junitReport: (testResult: Loadmill.TestResult, token: string, path?: string | undefined) => Promise<void>;
export declare const mochawesomeReport: (testResult: Loadmill.TestResult, token: string, path?: string | undefined) => Promise<void>;

@@ -7,3 +7,2 @@ "use strict";

var path = require("path");
var xml = require("xml");
var superagent = require("superagent");

@@ -17,88 +16,72 @@ var pLimit = require('p-limit');

var utils_1 = require("./utils");
var generateJunitJsonReport = function (testResult, token) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var flowResult, suiteResult, suites, limit, jsonResults, _a, _b;
var _c;
return tslib_1.__generator(this, function (_d) {
switch (_d.label) {
var testingServer = "https://" + utils_1.TESTING_HOST;
var POLLING_INTERVAL_MS = 5000;
var MAX_POLLING = 36; // 3 minutes
var generateJunitReport = function (testId, runType, token) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var junitReportId, err_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
flowResult = function (f) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var url, flowRunDetails, flowRun;
var _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:
url = getFlowRunAPI(f);
return [4 /*yield*/, superagent.get(url).auth(token, '')];
case 1:
flowRunDetails = (_b.sent()).body;
flowRun = {
'testcase': [{
_attr: {
name: f.description,
status: f.status,
time: ((+flowRunDetails.endTime - +flowRunDetails.startTime) || 0) / 1000
}
}]
};
if (f.status === "FAILED") {
(_a = flowRun.testcase).push.apply(_a, toFailedJUnitFlowRunReport(flowRunDetails));
}
return [2 /*return*/, flowRun];
}
});
}); };
suiteResult = function (suite) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var _a, flowRuns, failures, limit, _b, _c;
var _d;
return tslib_1.__generator(this, function (_e) {
switch (_e.label) {
case 0:
_a = suite.flowRuns, flowRuns = _a === void 0 ? [] : _a;
failures = flowRuns.filter(function (f) { return f.status !== 'PASSED'; }).length;
limit = pLimit(3);
_d = {};
_b = 'testsuite';
_c = [[{
_attr: {
name: suite.description,
errors: failures,
failures: failures,
timestamp: (new Date()).toISOString().slice(0, -5),
tests: flowRuns.length,
url: suite.url
}
}]];
return [4 /*yield*/, Promise.all(flowRuns.map(function (f) { return limit(function () { return flowResult(f); }); }))];
case 1: return [2 /*return*/, (_d[_b] = tslib_1.__spreadArray.apply(void 0, _c.concat([_e.sent()])),
_d)];
}
});
}); };
if (!Array.isArray(testResult)) {
if (Array.isArray(testResult.testSuitesRuns)) { // testplan
suites = testResult.testSuitesRuns;
}
else {
suites = [testResult]; // single run
}
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, superagent.post(junitReportAPI)
.send({ testId: testId, runType: runType })
.auth(token, '')];
case 1:
junitReportId = (_a.sent()).body.junitReportId;
return [2 /*return*/, junitReportId];
case 2:
err_1 = _a.sent();
handleJunitFailed(err_1.message);
return [3 /*break*/, 3];
case 3: return [2 /*return*/];
}
});
}); };
var waitForAndSaveJunitReport = function (reportId, token, path) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var polling_count, junitReport_1, err_2;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
polling_count = 0;
_a.label = 1;
case 1:
if (!(polling_count < MAX_POLLING)) return [3 /*break*/, 7];
_a.label = 2;
case 2:
_a.trys.push([2, 4, , 5]);
return [4 /*yield*/, superagent.get(junitReportAPI + "/" + reportId)
.auth(token, '')];
case 3:
junitReport_1 = (_a.sent()).body.junitReport;
saveJunitReport(junitReport_1, path);
return [3 /*break*/, 7];
case 4:
err_2 = _a.sent();
if (err_2.status !== 404) {
handleJunitFailed(err_2.message);
return [3 /*break*/, 7];
}
else {
suites = testResult; // multiple suites
return [3 /*break*/, 5];
case 5:
polling_count++;
return [4 /*yield*/, utils_1.sleep(POLLING_INTERVAL_MS)];
case 6:
_a.sent();
return [3 /*break*/, 1];
case 7:
if (polling_count === MAX_POLLING) {
handleJunitFailed('Generating report took too long. Please contact support');
}
limit = pLimit(3);
_c = {};
_a = 'testsuites';
_b = [[{
_attr: {
name: 'Loadmill suites run'
}
}]];
return [4 /*yield*/, Promise.all(suites.map(function (s) { return limit(function () { return suiteResult(s); }); }))];
case 1:
jsonResults = (_c[_a] = tslib_1.__spreadArray.apply(void 0, _b.concat([_d.sent()])),
_c);
return [2 /*return*/, jsonResults];
return [2 /*return*/];
}
});
}); };
var saveJunitReport = function (junitReport, path) {
var resolvedPath = resolvePath(path ? path : './test-results', 'xml');
ensureDirectoryExistence(resolvedPath);
fs.writeFileSync(resolvedPath, junitReport);
};
var handleJunitFailed = function (errMsg) {
console.log("Failed to generate JUnit report" + (errMsg ? ": " + errMsg : ''));
};
var ensureDirectoryExistence = function (filePath) {

@@ -118,28 +101,25 @@ var dirname = path.dirname(filePath);

};
var toFailedJUnitFlowRunReport = function (flowRun) {
var errs = toFailedFlowRunReport(flowRun, function (check, operation, value, actual) {
var text = '';
if (actual != null) {
text += "Expected: " + check + " " + operation + " " + (value != null ? value : '') + " ";
text += "Actual: " + (actual !== 'null' ? actual : 'null') + " ";
}
return text;
});
return errs.map(function (e) { return ({
'failure': [{
_attr: {
message: e.desc + " " + (e.ass ? e.ass : ''),
type: 'ERROR'
}
}]
}); });
};
// TODO this all flow should come from @loadmill package
var toFailedFlowRunReport = function (flowRun, formater) {
var errs = [];
var _a = flowRun.result, resolvedRequests = _a.resolvedRequests, failures = _a.failures, err = _a.err;
var result = flowRun.result, redactableResult = flowRun.redactableResult;
if (result.flow) {
var flow = result.flow, afterEach = result.afterEach;
appendFlowRunFailures(errs, formater, flow, redactableResult.flow);
if (afterEach) {
appendFlowRunFailures(errs, formater, afterEach, redactableResult.afterEach, flow.resolvedRequests.length);
}
}
else {
appendFlowRunFailures(errs, formater, result, redactableResult);
}
return errs;
};
var appendFlowRunFailures = function (errs, formater, result, redactableResult, offset) {
if (offset === void 0) { offset = 0; }
var _a = result, resolvedRequests = _a.resolvedRequests, failures = _a.failures, err = _a.err;
if (Array.isArray(resolvedRequests) && resolvedRequests.length > 0) {
resolvedRequests.map(function (req, i) {
var description = req.description, method = req.method, url = req.url, _a = req.assert, assert = _a === void 0 ? [] : _a;
var postParameters = flowRun.redactableResult && flowRun.redactableResult[i].postParameters;
var postParameters = redactableResult && redactableResult[i].postParameters;
var reqFailures = failures && failures[i];

@@ -150,3 +130,3 @@ var numSuccesses = 1;

if (numFailures > 0) {
var flowFailedText_1 = genReqDesc(i) + " " + (description ? genReqDesc(i, description) : '') + " " + method + " " + url + " =>";
var flowFailedText_1 = genReqDesc(i + offset) + " " + (description ? genReqDesc(i + offset, description) : '') + " " + method + " " + url + " =>";
var assertionNames_1 = Object.keys(assert);

@@ -157,2 +137,3 @@ var requestErrorNames = Object.keys(histogram).filter(function (name) { return !includes(assertionNames_1, name); });

});
errs.push(flowFailedText_1);
var flatPostParameters_1 = flatMap(postParameters);

@@ -166,9 +147,6 @@ var assertionItems = getItems(assertionNames_1, histogram, totalNumRequests);

var assErr = generateAssertionName(assert[assertion.name], actual, formater);
errs.push({ desc: flowFailedText_1, ass: assErr });
errs.push(assErr);
}
}
});
if (isEmpty(errs)) {
errs.push({ desc: flowFailedText_1 });
}
}

@@ -178,5 +156,4 @@ });

else if (err) {
errs.push({ desc: typeof err === 'string' ? err : err.message });
errs.push(typeof err === 'string' ? err : err.message);
}
return errs;
};

@@ -263,16 +240,14 @@ function generateAssertionName(_a, actual, formatAssertion) {

function getFlowRunAPI(f) {
var testingServer = "https://" + utils_1.TESTING_HOST;
return testingServer + "/api/test-suites-runs/flows/" + f.id;
}
function getFlowRunWebURL(s, f) {
var testingServer = "https://" + utils_1.TESTING_HOST;
return testingServer + "/app/api-tests/test-suite-runs/" + s.id + "/flows/" + f.id;
}
var junitReportAPI = testingServer + "/api/reports/junit";
var toMochawesomeFailedFlow = function (flowRun) {
var _a;
var errs = toFailedFlowRunReport(flowRun, function (check, operation, value, actual) {
var text = '';
if (actual != null) {
text += "\n+ \"Expected: " + check + " " + operation + " " + (value != null ? value : '') + " ";
text += "\n- \"Actual: " + (actual !== 'null' ? actual : 'null') + " ";
text += "\n+ Expected: " + check + " " + operation + " " + (value != null ? value : '') + " ";
text += "\n- Actual: " + (actual !== 'null' ? actual : 'null') + " ";
}

@@ -287,3 +262,3 @@ return text;

"generatedMessage": false,
"diff": ((_a = errs[0]) === null || _a === void 0 ? void 0 : _a.desc) + errs.reduce(function (acc, e) { return acc + " \n " + (e.ass ? "\n " + e.ass : ''); }, '')
"diff": errs.join('\n')
};

@@ -361,3 +336,3 @@ };

case 0:
suites = !Array.isArray(testResult) ? (testResult.testSuitesRuns || [testResult]) : testResult;
suites = testResult.testSuitesRuns || [testResult];
passedSuites = suites.filter(function (t) { return t.passed; }).length;

@@ -418,5 +393,5 @@ failedSuites = suites.filter(function (t) { return !t.passed; }).length;

var junitReport = function (testResult, token, path) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var jsonResults, asXml, resolvedPath;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
var reportId, _a;
return tslib_1.__generator(this, function (_b) {
switch (_b.label) {
case 0:

@@ -426,9 +401,15 @@ if (!testResult) {

}
return [4 /*yield*/, generateJunitJsonReport(testResult, token)];
console.log('Generating JUnit report...');
return [4 /*yield*/, generateJunitReport(testResult.id, testResult.type, token)];
case 1:
jsonResults = _a.sent();
asXml = xml(jsonResults, { indent: ' ', declaration: true });
resolvedPath = resolvePath(path ? path : './test-results', 'xml');
ensureDirectoryExistence(resolvedPath);
fs.writeFileSync(resolvedPath, asXml);
reportId = _b.sent();
_a = reportId;
if (!_a) return [3 /*break*/, 3];
return [4 /*yield*/, waitForAndSaveJunitReport(reportId, token, path)];
case 2:
_a = (_b.sent());
_b.label = 3;
case 3:
_a;
console.log('Finished generating JUnit report');
return [2 /*return*/];

@@ -435,0 +416,0 @@ }

"use strict";
exports.__esModule = true;
exports.TESTING_HOST = exports.getLogger = exports.Logger = exports.readRawParams = exports.toLoadmillParams = exports.isUUID = exports.isString = exports.isEmptyObj = exports.getJSONFilesInFolderRecursively = exports.filterLabels = exports.convertArrToLabelQueryParams = exports.convertStrToArr = exports.printTestSuitesRunsReport = exports.printFlowRunsReport = exports.getObjectAsString = void 0;
exports.TESTING_HOST = exports.getLogger = exports.Logger = exports.sleep = exports.readRawParams = exports.toLoadmillParams = exports.isUUID = exports.isString = exports.isEmptyObj = exports.getJSONFilesInFolderRecursively = exports.filterLabels = exports.convertArrToLabelQueryParams = exports.convertStrToArr = exports.printTestSuitesRunsReport = exports.printFlowRunsReport = exports.getObjectAsString = void 0;
var tslib_1 = require("tslib");

@@ -107,2 +107,13 @@ var fs = require("fs");

exports.readRawParams = readRawParams;
var sleep = function (ms) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, new Promise(function (r) { return setTimeout(r, ms); })];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); };
exports.sleep = sleep;
var Logger = /** @class */ (function () {

@@ -109,0 +120,0 @@ function Logger(verbose, colors) {

{
"name": "loadmill",
"version": "3.2.3",
"version": "3.2.4",
"description": "A node.js module for running load tests and functional tests on loadmill.com",

@@ -5,0 +5,0 @@ "keywords": [

@@ -176,7 +176,7 @@ import './polyfills'

async function _junitReport(testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, path?: string) {
async function _junitReport(testResult: Loadmill.TestResult, path?: string) {
return createJunitReport(testResult, token, path);
}
async function _mochawesomeReport(testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, path?: string) {
async function _mochawesomeReport(testResult: Loadmill.TestResult, path?: string) {
return createMochawesomeReport(testResult, token, path);

@@ -241,7 +241,7 @@ }

async junitReport(testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, path?: string): Promise<void> {
async junitReport(testResult: Loadmill.TestResult, path?: string): Promise<void> {
return _junitReport(testResult, path);
},
async mochawesomeReport(testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, path?: string): Promise<void> {
async mochawesomeReport(testResult: Loadmill.TestResult, path?: string): Promise<void> {
return _mochawesomeReport(testResult, path);

@@ -386,3 +386,3 @@ },

id: string;
type: string;
type: TYPES;
}

@@ -389,0 +389,0 @@ export interface TestSuiteDef {

import * as fs from "fs";
import * as path from "path";
import * as Loadmill from "./index";
import * as xml from "xml";
import * as superagent from 'superagent';

@@ -14,72 +13,60 @@ const pLimit = require('p-limit');

import { TESTING_HOST } from './utils';
import { TESTING_HOST, sleep } from './utils';
const generateJunitJsonReport = async (testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, token: string) => {
const testingServer = "https://" + TESTING_HOST;
const flowResult = async (f: Loadmill.FlowRun) => {
const url = getFlowRunAPI(f);
const { body: flowRunDetails } = await superagent.get(url).auth(token, '');
const flowRun: any = {
'testcase': [{
_attr: {
name: f.description,
status: f.status,
time: ((+flowRunDetails.endTime - +flowRunDetails.startTime) || 0)/1000,
}
}]
};
const POLLING_INTERVAL_MS = 5000;
const MAX_POLLING = 36; // 3 minutes
if (f.status === "FAILED") {
flowRun.testcase.push(...toFailedJUnitFlowRunReport(flowRunDetails));
}
return flowRun;
const generateJunitReport = async (
testId: string,
runType: Loadmill.TYPES,
token: string
): Promise<string | undefined> => {
try {
const { body: { junitReportId } } = await superagent.post(junitReportAPI)
.send({ testId, runType })
.auth(token, '');
return junitReportId;
} catch (err) {
handleJunitFailed(err.message);
}
};
const suiteResult = async (suite: Loadmill.TestResult) => {
const { flowRuns = [] } = suite;
const failures = flowRuns.filter((f: any) => f.status !== 'PASSED').length;
const limit = pLimit(3);
const waitForAndSaveJunitReport = async (reportId: string, token: string, path?: string) => {
let polling_count = 0;
return {
'testsuite': [{
_attr: {
name: suite.description,
errors: failures,
failures,
timestamp: (new Date()).toISOString().slice(0, -5),
tests: flowRuns.length,
url: suite.url
}
},
...await Promise.all(flowRuns.map(f => limit(() => flowResult(f))))
]
};
}
while (polling_count < MAX_POLLING) {
try {
const { body: { junitReport } } = await superagent.get(`${junitReportAPI}/${reportId}`)
.auth(token, '');
let suites;
if (!Array.isArray(testResult)) {
if (Array.isArray(testResult.testSuitesRuns)) { // testplan
suites = testResult.testSuitesRuns;
saveJunitReport(junitReport, path);
break;
}
else {
suites = [testResult] // single run
catch (err) {
if (err.status !== 404) {
handleJunitFailed(err.message);
break;
}
}
} else {
suites = testResult; // multiple suites
polling_count ++;
await sleep(POLLING_INTERVAL_MS);
}
const limit = pLimit(3);
if (polling_count === MAX_POLLING) {
handleJunitFailed('Generating report took too long. Please contact support');
}
};
let jsonResults = {
'testsuites': [{
_attr: {
name: 'Loadmill suites run',
}
},
...await Promise.all(suites.map(s => limit(() => suiteResult(s))))
]
};
const saveJunitReport = (junitReport: string, path?: string) => {
const resolvedPath = resolvePath(path ? path : './test-results', 'xml');
ensureDirectoryExistence(resolvedPath);
fs.writeFileSync(resolvedPath, junitReport);
};
return jsonResults
const handleJunitFailed = (errMsg?) => {
console.log(`Failed to generate JUnit report${errMsg ? `: ${errMsg}` : '' }`);
};

@@ -103,32 +90,28 @@

const toFailedJUnitFlowRunReport = (flowRun) => {
const errs = toFailedFlowRunReport(flowRun, (check, operation, value, actual) => {
let text = '';
if (actual != null) {
text += `Expected: ${check} ${operation} ${value != null ? value : ''} `;
text += `Actual: ${actual !== 'null' ? actual : 'null'} `;
// TODO this all flow should come from @loadmill package
const toFailedFlowRunReport = (flowRun, formater) => {
const errs: Array<string> = [];
const { result, redactableResult } = flowRun;
if (result.flow) {
const { flow, afterEach } = result;
appendFlowRunFailures(errs, formater, flow, redactableResult.flow);
if (afterEach) {
appendFlowRunFailures(errs, formater, afterEach, redactableResult.afterEach, flow.resolvedRequests.length);
}
return text;
});
}
else {
appendFlowRunFailures(errs, formater, result, redactableResult);
}
return errs.map(e => (
{
'failure': [{
_attr: {
message: `${e.desc} ${e.ass ? e.ass : ''}`,
type: 'ERROR'
}
}]
}
));
return errs;
};
// TODO this all flow should come from @loadmill package
const toFailedFlowRunReport = (flowRun, formater) => {
const errs: Array<any> = []
const { resolvedRequests, failures, err } = flowRun.result as any;
const appendFlowRunFailures = (errs: string[], formater, result, redactableResult, offset: number = 0) => {
const { resolvedRequests, failures, err } = result as any;
if (Array.isArray(resolvedRequests) && resolvedRequests.length > 0) {
resolvedRequests.map((req, i) => {
const { description, method, url, assert = [] } = req;
const postParameters = flowRun.redactableResult && flowRun.redactableResult[i].postParameters;
const postParameters = redactableResult && redactableResult[i].postParameters;

@@ -141,3 +124,3 @@ const reqFailures = failures && failures[i];

if (numFailures > 0) {
let flowFailedText = `${genReqDesc(i)} ${description ? genReqDesc(i, description) : ''} ${method} ${url} =>`;
let flowFailedText = `${genReqDesc(i + offset)} ${description ? genReqDesc(i + offset, description) : ''} ${method} ${url} =>`;

@@ -153,2 +136,4 @@ const assertionNames = Object.keys(assert);

errs.push(flowFailedText);
const flatPostParameters = flatMap(postParameters);

@@ -173,9 +158,6 @@ const assertionItems = getItems(

);
errs.push({ desc: flowFailedText, ass: assErr });
errs.push(assErr);
}
}
});
if (isEmpty(errs)) {
errs.push({ desc: flowFailedText });
}
}

@@ -185,5 +167,4 @@ });

else if (err) {
errs.push({ desc: typeof err === 'string' ? err : err.message })
errs.push(typeof err === 'string' ? err : err.message)
}
return errs;
};

@@ -281,3 +262,2 @@

function getFlowRunAPI(f: Loadmill.FlowRun) {
const testingServer = "https://" + TESTING_HOST;
return `${testingServer}/api/test-suites-runs/flows/${f.id}`;

@@ -287,6 +267,7 @@ }

function getFlowRunWebURL(s: Loadmill.TestResult, f: Loadmill.FlowRun) {
const testingServer = "https://" + TESTING_HOST;
return `${testingServer}/app/api-tests/test-suite-runs/${s.id}/flows/${f.id}`;
}
const junitReportAPI = `${testingServer}/api/reports/junit`;
const toMochawesomeFailedFlow = (flowRun) => {

@@ -297,4 +278,4 @@

if (actual != null) {
text += `\n+ \"Expected: ${check} ${operation} ${value != null ? value : ''} `;
text += `\n- \"Actual: ${actual !== 'null' ? actual : 'null'} `;
text += `\n+ Expected: ${check} ${operation} ${value != null ? value : ''} `;
text += `\n- Actual: ${actual !== 'null' ? actual : 'null'} `;
}

@@ -310,3 +291,3 @@ return text;

"generatedMessage": false,
"diff": errs[0]?.desc + errs.reduce((acc, e) => `${acc} \n ${e.ass ? `\n ${e.ass}` : ''}`, '')
"diff": errs.join('\n')
};

@@ -371,4 +352,4 @@ };

const generateMochawesomeReport = async (testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, token: string) => {
const suites = !Array.isArray(testResult) ? (testResult.testSuitesRuns || [testResult]) : testResult;
const generateMochawesomeReport = async (testResult: Loadmill.TestResult, token: string) => {
const suites = testResult.testSuitesRuns || [testResult];
const passedSuites = suites.filter(t => t.passed).length;

@@ -423,14 +404,13 @@ const failedSuites = suites.filter(t => !t.passed).length;

export const junitReport = async (testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, token: string, path?: string) => {
export const junitReport = async (testResult: Loadmill.TestResult, token: string, path?: string) => {
if (!testResult) {
return;
}
const jsonResults = await generateJunitJsonReport(testResult, token);
const asXml = xml(jsonResults, { indent: ' ', declaration: true });
const resolvedPath = resolvePath(path ? path : './test-results', 'xml');
ensureDirectoryExistence(resolvedPath);
fs.writeFileSync(resolvedPath, asXml);
console.log('Generating JUnit report...');
const reportId = await generateJunitReport(testResult.id, testResult.type, token);
reportId && await waitForAndSaveJunitReport(reportId, token, path);
console.log('Finished generating JUnit report');
}
export const mochawesomeReport = async (testResult: Loadmill.TestResult | Array<Loadmill.TestResult>, token: string, path?: string) => {
export const mochawesomeReport = async (testResult: Loadmill.TestResult, token: string, path?: string) => {
if (!testResult) {

@@ -451,2 +431,1 @@ return;

}

@@ -110,2 +110,6 @@ import * as fs from "fs";

export const sleep = async (ms: number) => {
await new Promise(r => setTimeout(r, ms));
};
export class Logger {

@@ -112,0 +116,0 @@ private readonly verb: boolean = false;

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc