Git Product home page Git Product logo

performance-tests's Introduction

ThingsBoard Builds Server Status

performance-tests

ThingsBoard performance tests

Project that is able to stress test ThingsBoard server with a huge number of MQTT messages published simultaneously from different devices.

Prerequisites

Running

To run test against ThingsBoard first create plain text file to set up test configuration (in our example configuration file name is .env):

touch .env

Edit this .env file:

nano .env

and put next content into the text file (modify it according to your test goals):

REST_URL=http://IP_ADDRESS_OF_TB_INSTANCE:8080
# IP_ADDRESS_OF_TB_INSTANCE is your local IP address if you run ThingsBoard on your dev machine in docker
# Port should be modified as well if needed 
[email protected]
REST_PASSWORD=tenant
REST_POOL_SIZE=4

MQTT_HOST=IP_ADDRESS_OF_TB_INSTANCE
# IP_ADDRESS_OF_TB_INSTANCE is your local IP address if you run ThingsBoard on your dev machine in docker
MQTT_PORT=1883

MQTT_SSL_ENABLED=false
MQTT_SSL_KEY_STORE=mqttclient.jks
MQTT_SSL_KEY_STORE_PASSWORD=

# Test API to use - device or gateway. In case device data is send directly to devices, in case gateway - over MQTT gateway API
TEST_API=gateway

# Device API to use - MQTT or HTTP. HTTP applicable only in case TEST_API=device
DEVICE_API=MQTT

DEVICE_START_IDX=0
DEVICE_END_IDX=10
DEVICE_CREATE_ON_START=true
DEVICE_DELETE_ON_COMPLETE=true

GATEWAY_START_IDX=0
GATEWAY_END_IDX=3
GATEWAY_CREATE_ON_START=true
GATEWAY_DELETE_ON_COMPLETE=true

WARMUP_ENABLED=true

# Type of the payload to send: DEFAULT, SMART_TRACKER, SMART_METER
# RANDOM - TODO: add description
# SMART_TRACKER - sample payload: {"latitude": 42.222222, "longitude": 73.333333, "speed": 55.5, "fuel": 92, "batteryLevel": 81}
# SMART_METER - sample payload: {"pulseCounter": 1234567, "leakage": false, "batteryLevel": 81}
TEST_PAYLOAD_TYPE=SMART_METER

TEST_ENABLED=true

# true - send data to devices by device ids, false - select random devices from the list  
TEST_SEQUENTIAL=false

MESSAGES_PER_SECOND=1000
DURATION_IN_SECONDS=300

UPDATE_ROOT_RULE_CHAIN=false
REVERT_ROOT_RULE_CHAIN=false
RULE_CHAIN_NAME=root_rule_chain_ce.json

Where:

  • REST_URL - Rest URL of the TB instance. Default: http://localhost:8080
  • REST_USERNAME - Login of the user. Default: [email protected]
  • REST_PASSWORD - Password of the user. Default: tenant
  • MQTT_HOST - URL of the ThingsBoard MQTT broker. Default: localhost
  • MQTT_PORT - Port of the ThingsBoard MQTT broker. Default: 1883
  • DEVICE_API - Use MQTT, HTTP or LWM2M Device API for send messages. Default: MQTT
  • DEVICE_START_IDX - First index of the device that is going to be used in the test. Token of the device is going to be index of this device during test
  • DEVICE_END_IDX - Last index of the device that is going to be used in the test
  • DEVICE_CREATE_ON_START - Create devices before test
  • DEVICE_DELETE_ON_COMPLETE - Delete devices after test, there were created on start of the test
  • MESSAGES_PER_SECOND - Number of the messages to be published per second to ThingsBoard
  • DURATION_IN_SECONDS - Number of seconds run of the test
  • MQTT_SSL_ENABLED - Enable/disable ssl for MQTT. Default: false
  • MQTT_SSL_KEY_STORE - MQTT key store file location
  • MQTT_SSL_KEY_STORE_PASSWORD - MQTT key store file password

Once params are configured to run test simple type from the folder where configuration file is located:

docker run -it --env-file .env --name tb-perf-test thingsboard/tb-ce-performance-test:latest

Simply run test on the same machine (service, IDE, Docker)

docker run -it --rm --network host --pull always --log-driver none --name tb-perf-test thingsboard/tb-ce-performance-test:latest

Simply run test somewhere else

docker run -it --rm --network host --name tb-perf-test \
           --pull always --log-driver none \
           --env REST_URL=http://127.0.0.1:8080 \
           --env MQTT_HOST=127.0.0.1 \
           --env [email protected] \
           --env REST_PASSWORD=tenant \
           --env DEVICE_END_IDX=1111 \
           --env MESSAGES_PER_SECOND=1000 \
           --env DURATION_IN_SECONDS=86400 \
           --env ALARMS_PER_SECOND=1 \
           --env DEVICE_CREATE_ON_START=true \
           --env TEST_PAYLOAD_TYPE=SMART_METER \
           thingsboard/tb-ce-performance-test:latest

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.