0

我正在尝试为不同的环境并行设置一些 newman 测试运行,然后在所有结果完成后通过 API 请求创建 Jira 票证。但是,当我使用该ansync.parallelLimit功能执行该任务时,我发现创建 jira 票证时没有任何来自测试运行的信息。

该过程的简化版本是这样的:

var async = require('async');
const path = require('path');
const newman = require('newman');
config = require(path.join(__dirname, 'config.json'));

const jira_data = [];

var create_ticket = function(err, results){
    console.log("Run Complete");
};

var test_run = async() =>{
  newman.run({
    collection: path.join(__dirname, 'Test.postman_collection.json'),
    reporters: ['htmlextra'],
    reporter: {
      htmlextra : { export : path.join(__dirname, '/reports/Test.html')}
    },})
}

var commands = [test_run,test_run,test_run,test_run];

async.parallelLimit(commands,4, (err, results) => {
  console.log("Run Complete");
  console.log(results);
});

这将导致以下输出,表明 create_ticket 在执行其他任何操作之前执行:

运行 Complete
使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
创建了 htmlextra 报告。
创建了 htmlextra 报告。
创建了 htmlextra 报告。
创建了 htmlextra 报告。

或者,我可以让 test_run 成为一个函数而不是异步,如下所示:

var async = require('async');
const path = require('path');
const newman = require('newman');

const jira_data = [];

var create_ticket = function(err, results){
    console.log("Test Run Complete");
};

var test_run = function() {
  newman.run({
    collection: path.join(__dirname, 'Test.postman_collection.json'),
    reporters: ['htmlextra'],
    reporter: {
      htmlextra : { export : path.join(__dirname, '/reports/Test.html')}
    },}).on('request', function(err, results) {
      console.log("Hello");
    })
}

var commands = [test_run, test_run, test_run, test_run];

async.parallelLimit(commands, 4, create_ticket);

但是现在,create ticket 根本不运行:

使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
使用 htmlextra 版本 1.22.3
Hello
Hello
Hello
Hello
创建 htmlextra 报告。
创建了 htmlextra 报告。
创建了 htmlextra 报告。
创建了 htmlextra 报告。

在花费了比我愿意承认的更多的时间来使用变量类型、参数传递和其他修复的不同组合之后,我完全被难住了。任何帮助都将不胜感激。

4

1 回答 1

0

您需要将回调传递并调用到 test_run 以完成异步任务。

var test_run = function(callback) {
  newman.run({
    collection: path.join(__dirname, 'Test.postman_collection.json'),
    reporters: ['htmlextra'],
    reporter: {
      htmlextra : { export : path.join(__dirname, '/reports/Test.html')}
    },}).on('request', function(err, results) {
      console.log("Hello");
      callback(null);
    })
}

于 2022-01-06T09:49:03.157 回答