Creating monitors in Postman - Automation Script Walkthrough
import fetch from 'node-fetch'; const POSTMAN_API_KEY = process.env.POSTMAN_API_KEY; const COLLECTION_UID = process.env.COLLECTION_UID; // e.g. '123abc' const ENVIRONMENT_UID = process.env.ENVIRONMENT_UID; // optional async function createMonitor() { const url = 'https://api.getpostman.com/monitors'; const monitorData = { monitor: { name: 'Daily API Check', collection: { uid: COLLECTION_UID }, environment: ENVIRONMENT_UID ? { uid: ENVIRONMENT_UID } : undefined, schedule: { type: 'daily', interval: 1, time: '09:00' } } }; const response = await fetch(url, { method: 'POST', headers: { 'X-Api-Key': POSTMAN_API_KEY, 'Content-Type': 'application/json' }, body: JSON.stringify(monitorData) }); if (response.status !== 201) { throw new Error(`Failed to create monitor, status code: ${response.status}`); } const data = await response.json(); if (data.monitor.name !== 'Daily API Check') { throw new Error('Monitor name does not match'); } if (!data.monitor.schedule || data.monitor.schedule.type !== 'daily' || data.monitor.schedule.time !== '09:00') { throw new Error('Monitor schedule is incorrect'); } console.log('Monitor created successfully:', data.monitor.uid); // Verify monitor is listed const listResponse = await fetch(url, { method: 'GET', headers: { 'X-Api-Key': POSTMAN_API_KEY } }); if (listResponse.status !== 200) { throw new Error(`Failed to fetch monitors, status code: ${listResponse.status}`); } const listData = await listResponse.json(); const found = listData.monitors.some(m => m.uid === data.monitor.uid); if (!found) { throw new Error('Created monitor not found in monitor list'); } console.log('Monitor verified in list successfully'); } createMonitor().catch(err => { console.error('Test failed:', err.message); process.exit(1); });
This script uses Node.js with the node-fetch library to call the Postman API.
First, it reads environment variables for the API key, collection UID, and optionally environment UID.
It sends a POST request to create a monitor with the specified name, collection, and schedule.
It checks the response status is 201 (created) and verifies the monitor name and schedule in the response.
Then it sends a GET request to list all monitors and confirms the newly created monitor is present.
Errors are thrown if any assertion fails, causing the script to exit with failure.
This approach uses async/await for clear asynchronous code and environment variables for sensitive data.
Now add data-driven testing to create monitors with 3 different schedules: daily at 9 AM, weekly on Monday at 10 AM, and hourly every 2 hours.