并行运行Postman(或Newman)集合运行器迭代

时间:2017-03-24 11:21:47

标签: node.js postman postman-collection-runner

使用集合运行器(或newman)时,您可以指定要执行的迭代次数。迭代全部按顺序执行。工具中是否有一种方法可以将测试/迭代配置为并行运行?我在使用Newman的节点脚本中使用一个简单的循环完成了这个操作,但结果都是相互写入的。

1 个答案:

答案 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);
  });
}