# performance-tests **Repository Path**: backup2k/performance-tests ## Basic Information - **Project Name**: performance-tests - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-02-07 - **Last Updated**: 2024-07-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [![ThingsBoard Builds Server Status](https://img.shields.io/teamcity/build/e/ThingsBoard_Build?label=TB%20builds%20server&server=https%3A%2F%2Fbuilds.thingsboard.io&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAALzAAAC8wHS6QoqAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAB9FJREFUeJzVm3+MXUUVx7+zWwqEtnRLWisQ2lKVUisIQmsqYCohpUhpEGsFKSJJTS0qGiGIISJ/8CNGYzSaEKBQEZUiP7RgVbCVdpE0xYKBWgI2rFLZJZQWtFKobPfjH3Pfdu7s3Pvmzntv3/JNNr3bOXPO+Z6ZO3PumVmjFgEYJWmWpDmSZks6VtIESV3Zv29LWmGMubdVPgw7gEOBJcAaYC/18fd2+zyqngAwXdL7M9keSduMMXgyH5R0laRPSRpbwf62CrLDB8AAS4HnAqP2EvA1YBTwPuBnwP46I70H+DPwALAS+B5wBTCu3VyHIJvG98dMX+B/BW1vAvcAnwdmAp3t5hWFbORXR5AvwmPARcCYdnNJAnCBR+gd7HQ9HZgLfAt4PUB8AzCv3f43DGCTQ6o/RAo43gtCL2Da4W9TAUwEBhxiPymRvcabAR8eTl+biQ7neYokdyTXlvR7xPt9etM8GmZ0FDxL+WD42FdBdkTDJd0jyU1wzi7pd473e0+qA8AM4AbgkrK1BDgOWAc8ChyTaq+eM5ud93ofcHpAZiY2sanhZaDDaTfAZ7HJUmlWCJzm6bqLQM6QBanXkfthcxgPNbTEW9z2AT8AzgTmANdikxwXX/d0XOi0bQEmFNj6GPAfhuKnXkB98kNsNjsITwacKkI3MNrrf4UnswXoiiRfwyqgo4D8L2hVZglMw456DDYCRwR0jCH/KuWCgE2oysjX8KsA+V+2jHzm3CrP4PMBx/4JfAU4qETP+EAQ/gKcA/w7gnwNbl5yD7bG0DLyM7DZXw3d2f9PA+YD5wIzK+gLBSEFA/XIA2cAVwLvbSQAt3mGP5Gs7IDO8dg1ZYDGcAfOwujZuIwDn+ObUx09hHx+v7Eh5nndCyIIDgBbgd0lMiv9IABfIF+LeDnVyU97xj5XR/6bwI5sZEaXyH2UuHd+WSbfRXktYjAIAfL9wGdSA/Cgo+gtSio12IKJa3hNKAgZ+TciyL+AlwECKzI/ioLgTvsa+YtTyXeSz8ZW15E3wN88p3JBwCZNMeShIKkBTsRmmSG4a0o/sDSJfGboBE/5pRF9pgI9oSBUJP8mXpLk2bm6pO9Aw+QzI8s8xVFbXRaEf3h911cgD7Cyjg0/L/GxnoLdoUoA3O1vDxUyLWyO4AehCpYX6D2L/LpUhtsaCkIWxRoeT+g/DVsqT8EWYDowC5jh6FxUUc+tJJblOmSPqWp4JUFHl6TDUoxLOlnSdknPSnK3sA2S9lfQs0zS7SkzwQ/A61U6A6dKWufpSMVg5mmMeUPSXyv2v0zSN6oa7ZAdwRqiA5CRf0TS+KpGAxiQ1OFN4z8l6PErVXUxSvmp1hvTqUnk35adPWskPWSM6fPaq84ASXqscg/gi9gcvJuC6o0nfwrhw5EYvIpNn88HStcN4M6KulfTys/lzKlO0lb8P2Lrf6VbLDAF+DLweEX998aSx372bwP6gPlVA3BEAvm9FJwVYtPqjwDXA08n6AZbOYoeeeAWp++mSlPGGLMLeFjSuRW6Iektx4GDJc2TdJ6khZKOruKDh/skXWSM6a/Q5yjn+dDKFrE1vw0VR2m2039x4kj7uJ+SslyJ/+7rtaly4mCM+a+kBaq2TbnVpfWy216jmCzpkIR+7kK/MymHNsbslX0NYoMweMpsjNklaWuKXQ9zJf2eOocvAbzHee5N/ojIgvBVxY3madh3v4b1iWZ/o3zw5kpaS+SFDGCq8jPguUQ/CmsCZfi403dhwjv/AHAQMAl41mvbGBMEhq4/c1PJTwmQr1f7u97pfzj5EnwUead/KAg/ivD7Zkf+HSBpFwiRfwibI3SXkOj29PgEivAggdU+C8JWR+6+CN9dm1tSyHcBLwbIj87ax1Kcxe0DJmVyY4CdEeR/TXnVeRLwc+C3wHF1fP+Qp/uGlABc6Cl5mPziVi8IzwDfAZ6KIN9LyhQt9v1GT/+sFCXTOVBBXuOTd+TGkp+eqWjKSTBwMPAvR+9TjSibjK35l93mWIxdZFKOxPzFseEgAJd7Olt6v+AC8jdIqwRhLbZM758HRH3tYa/vnoqtKZ4JHIk99tvh6HqNVl3RLSB/JfBEBPnBwxXsJ2uf176qxO7hwE3ALq/PfuyVXhdXt4r8+QHyK7K2cXWCMLiTOPqODwTh2IDdD2CP12LwCnUKMankO8kfiAySd2SKgjCEfEEQ+nznsZc7eyLJA9zddPKZIx0c2NcHgMsL5MZhr83XULiTeCSXAEcG2m4PjPCXsEWWBdhbZ/4h6knN4u07Mxv4MbCojtxo7DW6RTRwopMFxt0xeoCJAblLvCDdlWpzRAG42CO2sET2UUfuVbetsYPF9mKq8zwg6Q8lsm7bRJxt8N0cAPdar5FUupYU9X03B2C782wknVUi+0nneacxZk9rXBpGABO8RXA72demJ7fcWyvubIe/TQN2y11MuJ6wA5v3z8HeMbjba+8n5StwJCDb9lYUEI/Fde3mEQ1svnBKRvp32K/LEPYQd1z3XQJfsG3/Sw/gKElLZev8tb8rnizpBEmF1SDZ06ZbJN0saa+kayQtV77qi6QnJF1njFnXdOebAcIXssvQB3yfcGrcCZwEnAfMC8mMKGArNUVT28VubF4/nyZflx8Jr8BVkr4tm83tzn5ek/S8pM2SnpT0gv8H283C/wGTFfhGtexQwQAAAABJRU5ErkJggg==&labelColor=305680)](https://builds.thingsboard.io/viewType.html?buildTypeId=PerformanceTests_Build&guest=1) # 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 - [Install Docker CE](https://docs.docker.com/engine/installation/) ## Running To run test against ThingsBoard first create plain text file to set up test configuration (in our example configuration file name is *.env*): ```bash touch .env ``` Edit this *.env* file: ```bash nano .env ``` and put next content into the text file (modify it according to your test goals): ```bash 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 REST_USERNAME=tenant@thingsboard.org 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: tenant@thingsboard.org - `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: ```bash 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) ```bash 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 ```bash 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 REST_USERNAME=tenant@thingsboard.org \ --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 ```