Search code examples
dockerjenkinsnpmpostmannewman

Newman htmlextra reporter complains about newman is missing but it's installed


I'm trying to install and run Postman's Newman tests collection with HTML reporter (on a jenkins podTemplate container with docker image from Postman's account) but it keeps failing because no suitable Newman version is found:

"npm WARN [email protected] requires a peer of newman@>=4 but none is installed. You must install peer dependencies yourself"

Newman image docker is "postman/newman:5.2-alpine".

And the Run command is

sh "newman run tests/collection.json -r htmlextra --reporter-htmlextra-export var/reports/newman/html/index.html";

I've also tried to install with (the "sh" prefix is because it's in groovy script..in Jenkins) :

sh "npm install -g [email protected]"
sh "npm install -g newman-reporter-htmlextra"

and then executing the same run command as above.

sh "newman run tests/collection.json -r htmlextra --reporter-htmlextra-export var/reports/newman/html/index.html";

But the results are the same.

What's weird is that right after I get the error mentioned above - the jenkinsfile executes the "newman run" command and successfully creates the tests report file:

Using htmlextra version 1.19.6
Created the htmlextra report in this location: var/reports/newman/html/index.html

But then exits the script/job with FAILURE.

What am I missing? Any advice?

Thank you!


Solution

  • Thats a npm bug, https://github.com/npm/npm/issues/12905

    for newman-reporter-htmlextra , newman is a peer dependency.

    In npm peer dependency is not detected for global packages if the dependency and the package are not installed together

    In this case you can fix it by installing it together using

    npm install -g newman newman-reporter-htmlextra
    

    Try :

    podTemplate(label: "newmanPodHtmlExtra", containers: [
    containerTemplate(name: "newman", image: "dannydainton/htmlextra", command: "cat", ttyEnabled: true),
    ]) {
    node("newmanPodHtmlExtra") {
    def testsFolder = "./tests";
    container("newman") {
    
    stage("Checkout") {
    checkout scm;
          }
    
    try{
    stage("Install & run Newman") {
    sh "npm install -g newman newman-reporter-htmlextra";
    sh "newman run ${testsFolder}/collection.json -r htmlextra --reporter-htmlextra-export var/reports/newman/html/index.html";
      }
    }catch(e){}finally{
    
    stage("Show tests results") {
    publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false, reportDir: 'var/reports/newman/html', reportFiles: 'index.html', reportName: 'API Tests', reportTitles: ''
        ])
      }
    }
    
    
        }
      }
    }