{"id":18521443,"url":"https://github.com/thingsboard/performance-tests","last_synced_at":"2025-09-06T17:37:21.979Z","repository":{"id":15473229,"uuid":"78220302","full_name":"thingsboard/performance-tests","owner":"thingsboard","description":"Thingsboard performance tests","archived":false,"fork":false,"pushed_at":"2025-06-23T14:55:43.000Z","size":5575,"stargazers_count":45,"open_issues_count":4,"forks_count":56,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-06-23T15:29:29.843Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://thingsboard.io","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thingsboard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-01-06T16:21:36.000Z","updated_at":"2025-06-23T14:55:46.000Z","dependencies_parsed_at":"2025-06-23T15:37:25.291Z","dependency_job_id":null,"html_url":"https://github.com/thingsboard/performance-tests","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/thingsboard/performance-tests","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thingsboard%2Fperformance-tests","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thingsboard%2Fperformance-tests/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thingsboard%2Fperformance-tests/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thingsboard%2Fperformance-tests/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thingsboard","download_url":"https://codeload.github.com/thingsboard/performance-tests/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thingsboard%2Fperformance-tests/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273937287,"owners_count":25194388,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T17:25:54.788Z","updated_at":"2025-09-06T17:37:21.963Z","avatar_url":"https://github.com/thingsboard.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![ThingsBoard Builds Server Status](https://img.shields.io/teamcity/build/e/ThingsBoard_Build?label=TB%20builds%20server\u0026server=https%3A%2F%2Fbuilds.thingsboard.io\u0026logo=data:image/png;base64,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\u0026labelColor=305680)](https://builds.thingsboard.io/viewType.html?buildTypeId=PerformanceTests_Build\u0026guest=1)\n\n# performance-tests\nThingsBoard performance tests\n\nProject that is able to stress test ThingsBoard server with a huge number of MQTT messages published simultaneously from different devices.\n\n## Prerequisites\n\n- [Install Docker CE](https://docs.docker.com/engine/installation/)\n\n## Running\n\nTo run test against ThingsBoard first create plain text file to set up test configuration (in our example configuration file name is *.env*):\n```bash\ntouch .env\n```\n\nEdit this *.env* file:\n```bash\nnano .env\n```\n\nand put next content into the text file (modify it according to your test goals):\n```bash\nREST_URL=http://IP_ADDRESS_OF_TB_INSTANCE:8080\n# IP_ADDRESS_OF_TB_INSTANCE is your local IP address if you run ThingsBoard on your dev machine in docker\n# Port should be modified as well if needed \nREST_USERNAME=tenant@thingsboard.org\nREST_PASSWORD=tenant\nREST_POOL_SIZE=4\n\nMQTT_HOST=IP_ADDRESS_OF_TB_INSTANCE\n# IP_ADDRESS_OF_TB_INSTANCE is your local IP address if you run ThingsBoard on your dev machine in docker\nMQTT_PORT=1883\n\nMQTT_SSL_ENABLED=false\nMQTT_SSL_KEY_STORE=mqttclient.jks\nMQTT_SSL_KEY_STORE_PASSWORD=\n\n# Test API to use - device or gateway. In case device data is send directly to devices, in case gateway - over MQTT gateway API\nTEST_API=gateway\n\n# Device API to use - MQTT or HTTP. HTTP applicable only in case TEST_API=device\nDEVICE_API=MQTT\n\nDEVICE_START_IDX=0\nDEVICE_END_IDX=10\nDEVICE_CREATE_ON_START=true\nDEVICE_DELETE_ON_COMPLETE=true\n\nGATEWAY_START_IDX=0\nGATEWAY_END_IDX=3\nGATEWAY_CREATE_ON_START=true\nGATEWAY_DELETE_ON_COMPLETE=true\n\nWARMUP_ENABLED=true\n\n# Type of the payload to send: DEFAULT, SMART_TRACKER, SMART_METER\n# RANDOM - TODO: add description\n# SMART_TRACKER - sample payload: {\"latitude\": 42.222222, \"longitude\": 73.333333, \"speed\": 55.5, \"fuel\": 92, \"batteryLevel\": 81}\n# SMART_METER - sample payload: {\"pulseCounter\": 1234567, \"leakage\": false, \"batteryLevel\": 81}\n# INDUSTRIAL_PLC - sample payload (60 lines by default) {\"line001\": 1.0023, \"line002\": 95.440321}\nTEST_PAYLOAD_TYPE=SMART_METER\n# datapoints per single message (used for INDUSTRIAL_PLC)\nTEST_PAYLOAD_DATAPOINTS=60\n\nTEST_ENABLED=true\n\n# true - send data to devices by device ids, false - select random devices from the list  \nTEST_SEQUENTIAL=false\n\nMESSAGES_PER_SECOND=1000\nDURATION_IN_SECONDS=300\n\nUPDATE_ROOT_RULE_CHAIN=false\nREVERT_ROOT_RULE_CHAIN=false\nRULE_CHAIN_NAME=root_rule_chain_ce.json\n\n```\n\nWhere: \n    \n- `REST_URL`                     - Rest URL of the TB instance. Default: http://localhost:8080\n- `REST_USERNAME`                - Login of the user. Default: tenant@thingsboard.org  \n- `REST_PASSWORD`                - Password of the user. Default: tenant\n- `MQTT_HOST`                    - URL of the ThingsBoard MQTT broker. Default: localhost\n- `MQTT_PORT`                    - Port of the ThingsBoard MQTT broker. Default: 1883\n- `DEVICE_API`                   - Use MQTT, HTTP or LWM2M Device API for send messages. Default: MQTT\n- `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\n- `DEVICE_END_IDX`               - Last index of the device that is going to be used in  the test\n- `DEVICE_CREATE_ON_START`       - Create devices before test \n- `DEVICE_DELETE_ON_COMPLETE`    - Delete devices after test, there were created on start of the test\n- `MESSAGES_PER_SECOND`          - Number of the messages to be published per second to ThingsBoard\n- `DURATION_IN_SECONDS`          - Number of seconds run of the test\n- `MQTT_SSL_ENABLED`             - Enable/disable ssl for MQTT. Default: false\n- `MQTT_SSL_KEY_STORE`           - MQTT key store file location\n- `MQTT_SSL_KEY_STORE_PASSWORD`  - MQTT key store file password\n\nOnce params are configured to run test simple type from the folder where configuration file is located:\n```bash\ndocker run -it --env-file .env --name tb-perf-test thingsboard/tb-ce-performance-test:latest\n```\n\nSimply run test on the same machine (service, IDE, Docker)\n```bash\ndocker run -it --rm --network host --pull always --log-driver none --name tb-perf-test thingsboard/tb-ce-performance-test:latest\n```\n\nSimply run test somewhere else\n```bash\ndocker run -it --rm --network host --name tb-perf-test \\\n           --pull always --log-driver none \\\n           --env REST_URL=http://127.0.0.1:8080 \\\n           --env MQTT_HOST=127.0.0.1 \\\n           --env REST_USERNAME=tenant@thingsboard.org \\\n           --env REST_PASSWORD=tenant \\\n           --env DEVICE_END_IDX=1000 \\\n           --env MESSAGES_PER_SECOND=50 \\\n           --env DURATION_IN_SECONDS=86400 \\\n           --env ALARMS_PER_SECOND=1 \\\n           --env DEVICE_CREATE_ON_START=true \\\n           --env TEST_PAYLOAD_TYPE=SMART_METER \\\n           thingsboard/tb-ce-performance-test:latest\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthingsboard%2Fperformance-tests","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthingsboard%2Fperformance-tests","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthingsboard%2Fperformance-tests/lists"}