使用集合运行器(或newman)时,您可以指定要执行的迭代次数。迭代全部按顺序执行。工具中是否有一种方法可以将测试/迭代配置为并行运行?我在使用Newman的节点脚本中使用一个简单的循环完成了这个操作,但结果都是相互写入的。
答案 0 :(得分:2)
到目前为止,我发现这样做的唯一方法是编写自定义节点代码以启动多个newman.run
进程,然后汇总这些进程返回的所有结果。
以下是一个例子:
const
newman = require('newman');
config = require('./postman-config.js').CONFIG,
collectionPath = 'postman-collection.json',
iterationCount = 5,
threadCount = 5,
after = require('lodash').after;
exports.test = function() {
// Use lodash.after to wait till all threads complete before aggregating the results
let finished = after(threadCount, processResults);
let summaries = [];
console.log(`Running test collection: ${collectionPath}`);
console.log(`Running ${threadCount} threads`);
for (let i = 0; i < threadCount; i++) {
testThread(summaries, finished, collectionPath);
}
};
function processResults(summaries) {
let sections = ['iterations', 'items', 'scripts', 'prerequests', 'requests', 'tests', 'assertions', 'testScripts', 'prerequestScripts'];
let totals = summaries[0].run.stats;
for (let i = 1; i < threadCount; i++) {
let summary = summaries[i].run.stats;
for (let j = 0; j < sections.length; j++) {
let section = sections[j];
totals[section].total += summary[section].total;
totals[section].pending += summary[section].pending;
totals[section].failed += summary[section].failed;
}
}
console.log(`Run results: ${JSON.stringify(totals, null, 2)}`);
}
function testThread(summaries, callback, collectionPath) {
console.log(`Running ${iterationCount} iterations`);
newman.run({
iterationCount: iterationCount,
environment: config,
collection: require(collectionPath),
reporters: []
}, function (err, summary) {
if (err) {
throw err;
}
console.log('collection run complete');
summaries.push(summary);
callback(summaries);
});
}