Estoy intentando configurar algunas ejecuciones de prueba de Newman en paralelo para diferentes entornos, y luego crear un ticket de Jira a través de una solicitud de API una vez que todos estén completos con los resultados. Sin embargo, cuando uso la función ansync.parallelLimit para esa tarea, encuentro que el ticket de Jira se crea sin ninguna información de las ejecuciones de prueba.
Una versión simplificada del proceso es esta:
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); });Eso dará como resultado el siguiente resultado, que indica que create_ticket se ejecutó antes que nada:
Ejecutar completo
Usando htmlextra versión 1.22.3
Usando htmlextra versión 1.22.3
Usando htmlextra versión 1.22.3
Usando htmlextra versión 1.22.3
Creó el informe htmlextra.
Creó el informe htmlextra.
Creó el informe htmlextra.
Creó el informe htmlextra.
Alternativamente, puedo hacer que test_run sea una función en lugar de asíncrona, como esta:
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);Pero ahora, create ticket no se ejecuta en absoluto:
Usando htmlextra versión 1.22.3
Usando htmlextra versión 1.22.3
Usando htmlextra versión 1.22.3
Usando htmlextra versión 1.22.3
Hola
Hola
Hola
Hola
Creó el informe htmlextra.
Creó el informe htmlextra.
Creó el informe htmlextra.
Creó el informe htmlextra.
Después de pasar más tiempo del que quisiera admitir jugando con diferentes combinaciones de tipos de variables, paso de argumentos y otras correcciones, estoy completamente perplejo. Cualquier ayuda en absoluto sería muy apreciada.
Debe pasar y llamar a una devolución de llamada a test_run para completar la tarea asincrónica.
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); }) }