# MQTT Benchmarking Tool A simple MQTT benchmarking tool for Mainflux platform. It connects Mainflux things as subscribers over a number of channels and uses other Mainflux things to publish messages and create MQTT load. Mainflux things used must be pre-provisioned first, and Mainflux `provision` tool can be used for this purpose. ## Installation ``` cd tools/mqtt-bench make ``` ## Usage The tool supports multiple concurrent clients, publishers and subscribers configurable message size, etc: ``` ./mqtt-bench --help Tool for extensive load and benchmarking of MQTT brokers used within Mainflux platform. Complete documentation is available at https://docs.mainflux.io Usage: mqtt-bench [flags] Flags: -b, --broker string address for mqtt broker, for secure use tcps and 8883 (default "tcp://localhost:1883") --ca string CA file (default "ca.crt") -c, --config string config file for mqtt-bench (default "config.toml") -n, --count int Number of messages sent per publisher (default 100) -f, --format string Output format: text|json (default "text") -h, --help help for mqtt-bench -m, --mainflux string config file for Mainflux connections (default "connections.toml") --mtls Use mtls for connection -p, --pubs int Number of publishers (default 10) -q, --qos int QoS for published messages, values 0 1 2 --quiet Supress messages -r, --retain Retain mqtt messages -z, --size int Size of message payload bytes (default 100) -t, --skipTLSVer Skip tls verification -t, --timeout Timeout mqtt messages (default 10000) ``` Two output formats supported: human-readable plain text and JSON. Before use you need a `mfconn.toml` - a TOML file that describes Mainflux connection data (channels, thingIDs, thingKeys, certs). You can use `provision` tool (in tools/provision) to create this TOML config file. Example use and output Without mtls: ``` ./mqtt-bench --broker tcp://localhost:1883 --count 100 --size 100 --qos 0 --format text --pubs 10 --mainflux mfconn.toml ``` With mtls ./mqtt-bench --broker tcps://localhost:8883 --count 100 --size 100 --qos 0 --format text --pubs 10 --mainflux mfconn.toml --mtls -ca ca.crt ``` You can use `config.toml` to create tests with this tool: ``` ./mqtt-bench --config config.toml ``` Example of `config.toml`: ``` [mqtt] [mqtt.broker] url = "tcp://localhost:1883" [mqtt.message] size = 100 format = "text" qos = 2 retain = true [mqtt.tls] mtls = false skiptlsver = true ca = "ca.crt" [test] pubs = 3 count = 100 [log] quiet = false [mainflux] connections_file = "mfconn.toml" ``` Based on this, a test scenario is provided in `templates/reference.toml` file.