NodeJS SMPP Stress Tester with configurable parameters
Tags: node, npm, inthirtyseconds, github
Published: 2020-04-23 20:33:18


This script allows you to perform sending high number of SMS messages towards an SMPP server and configure parameters to control it's behavior.

It's easy to setup and works. 

I hope you find it useful.

### Installation

- Clone  repository to your machine

```shell

# git clone https://github.com/telecomsxchange/smpp-client-nodejs.git

```

```shell

cd /smpp-client-nodejs/

```

- Install node modules

```shell

# npm install

# npm install system-sleep

```

- Open smpp-stress-tester.js in your code editor and configure SMPP HOST, PORT, USER, PASS, MESSAGES COUNT etc..

```javascript


const nanoid = require('nanoid')
const sleep = require('system-sleep')

var smpp = require('smpp');

// define SMPP host and port

var session = smpp.connect('smpp://YOUR-SMPP-IP-OR-DOMAIN:PORT');

// If you're using TelecomsXChange as provider, this TLV will show the //price per message being sent out. 
// if you do not require it, you can comment it.

smpp.addTLV('billing_price', {
    id: 0x1520,
    type: smpp.types.tlv.string
});

// Configure test parameters

const test_sms_count = 5000;                // Number of SMS messages to send.
const req_sec_limit = 65;                   // Number of messages per second
const sleep_time = 1/req_sec_limit*1000;    // Sleep time / Wait for x secs
let i = 0
let test_end = 0
let start_test_ts = Math.floor(new Date() / 1000)
let end_test_ts
let failed_count = 0
var success_count = 0
let last_sms_sent_time = 0


session.bind_transceiver({

        //SMPP Credintials used during the test.

        system_id: 'ENTER SMPP USERNAME',
        password: 'ENTER SMPP PASSWORD'
        
}, function(pdu) {
	if (pdu.command_status == 0) {
		// Successfully bound
		start_test_ts = Math.floor(new Date() / 1000)
		for(i=0; i<test_sms_count; i++) {
			sleep(sleep_time)
			session.submit_sm({
				destination_addr: '{ENTER TO Number}',         // To Phone Number
				source_addr: '{ENTER FROM Number}',             // From Number or Sender ID
				registered_delivery: 1, 
				message_id: nanoid(24),
// Generate random verification code for every message. 
short_message: 'Your verification code is SS: ' + nanoid(4) ,    



// Uncomment below if your SMPP server supports message_payload for long text messages.

// message_payload: 'verification code AAA:' + nanoid(4)  
	
			}, function(pdu) {
				if (pdu.command_status == 0) {
					// Message successfully sent
					//console.log("message sent OK")
					success_count++
					end_test_ts = Math.floor(new Date() / 1000)
				} else {

          //console.log("message sending failed");
					failed_count++
					end_test_ts = Math.floor(new Date() / 1000)
				}
			});
			last_sms_sent_time = Math.floor(new Date() / 1000)
		}
	}
});


sleep(sleep_time * test_sms_count)
console.log("Finished sending, sleeping 30 secs");
const end_send_ts = Math.floor(new Date() / 1000);
sleep(10000)

// Console log the final report

console.log("Sent " + success_count + " SMS. Failed: " + failed_count + ". Total req/sec:" + (success_count / ( end_test_ts - start_test_ts)) + ". Waited for " + (end_test_ts - last_sms_sent_time) + " sec for last SMS" );
process.exit()

```


- Now, let's start SMPP test

```shell

#node smpp-stress-tester.js

```

- Sample Response

```shell

Finished sending, sleeping 30 secs
Sent 5000 SMS. Failed: 0. Total req/sec:50.5555555555555556. 

Waited for 1 sec for last SMS

```