Automated API Testing with Jenkins and Postman/Newman
Tags: postman, jenkins, automation
Published: 2019-05-19 07:43:56

---
title: Automated API Testing with Jenkins and Postman/Newman
published: true
description:
tags: postman, jenkins, automation
---

Let me start off by saying that this is purely experimental, I am not using this strategy in my workplace nor any production environment. This is me, spending my lazy Sunday afternoon playing around with API testing automation.

I got this idea to play around with Jenkins/Postman after my workplace is looking for an API testing automation tool that would run periodically and notify us immediately when something fails.

I knew [Postman](https://www.getpostman.com/) is perfect for running multiple API tests with it's [Runner](https://learning.getpostman.com/docs/postman/collection_runs/starting_a_collection_run/) and pair it with [Newman](https://www.npmjs.com/package/newman) I can execute collections in headless state.  

I stumbled upon Jenkins while googling away how to automate the process of running Postman collections. So now I have the means to test and automate. Below is my step-by-step setup for running Postman + Newman + Jenkins.

My folder structure
```
automated-test
├── docker-compose.yml
├── Dockerfile
├── postman_collections
├── .. # some other Jenkins related stuff that is not in the scope of this post

```

I begin by extending the official Jenkins docker image to include Newman.

Dockerfile
```
FROM jenkins/jenkins:lts

USER root

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
    # install nodejs
    && curl -sL https://deb.nodesource.com/setup_10.x | bash - \
    && apt-get install -y apt-utils \
    && apt-get install -y nodejs \
    && apt-get install -y build-essential \
    && apt-get install -y inotify-tools \
    # install newman
    && npm install -g newman

USER jenkins

```

Then build using `docker-compose` (since I'm lazy to type a long list of docker command just to start Jenkin server)

docker-compose.yml
```
version: "3"

services:
  app:
    build: .
    volumes:
      - .:/var/jenkins_home
    ports:
      - "8080:8080"
      - "50000:50000"
```

After that, a simple `docker-compose up` will suffice.

So I got my Jenkins server up and running, now I need to export my postman collections. Below is a simple API test that I made. It calls an endpoint and assert the HTTP response status is 200, pretty simple right?
![](https://thepracticaldev.s3.amazonaws.com/i/k4vz7i9stwqlzm2fy4cc.png)

I exported the collection to `~/automated-test/postman_collections/collection.json`

Now, I need to create a new project in `Jenkins` dashboard. 
![](https://thepracticaldev.s3.amazonaws.com/i/lc4d1txlhejxe3h13aw2.png)
The configs worth noting is
1. Interval to run the test (I set it to run every 5min)
`Build Triggers > Build periodically > */5 * * * *`

2. Actual test execution for the postman collections
`Build > Add build step > Execute shell > newman run /var/jenkins_home/postman_collections/collection.json`

Once saved, Jenkins will execute your postman collections every 5min.
 ![](https://thepracticaldev.s3.amazonaws.com/i/te25b4lrh0msq3bnvj56.png)

And done! Of course using Jenkins just to test for Postman API collections is a bit overkill, but it does the job. If you have any other automation tool that you find suitable, do let me know since my workplace is still looking for a suitable API testing automation.