Skip to main content

pytest-mqtt supports testing systems based on MQTT

Project description


Project status (alpha, beta, stable) Project license PyPI downloads per month Package version on PyPI

CI outcome Code coverage Supported Python versions

About

pytest-mqtt supports testing systems based on MQTT by providing test fixtures for pytest. It has been conceived for the fine terkin-datalogger and mqttwarn programs.

capmqtt fixture

Capture MQTT messages, using the Paho MQTT Python Client, in the spirit of caplog and capsys. It can also be used to publish MQTT messages.

MQTT server host and port are configurable via pytest cli arguments: --mqtt-host and --mqtt-port. Default values are localhost/1883.

You may additionally specify a username and password for connecting to the broker with: --mqtt-username and --mqtt-password. Default values are guest/guest.

By default, the test fixture subscribes to all topics, listening on #. This can be disabled with the --no-subscribe-all option. You can then subscribe to the topics you are interested in within each test using capmqtt.mqtt_client.client.subscribe(cpe.info).

mosquitto fixture

Provide the Mosquitto MQTT broker as a session-scoped fixture to your test cases.

Usage

import pytest
from pytest_mqtt.model import MqttMessage

@pytest.mark.capmqtt_decode_utf8
def test_mqtt_send_receive(mosquitto, capmqtt):
    """
    Basic send/receive roundtrip, using text payload (`str`).

    By using the `capmqtt_decode_utf8` marker, the message payloads
    will be recorded as `str`, after decoding them from `utf-8`.
    Otherwise, message payloads would be recorded as `bytes`.
    """

    # Submit a basic MQTT message.
    capmqtt.publish(topic="foo", payload="bar")

    # Demonstrate the "messages" property.
    # It returns a list of "MqttMessage" objects.
    assert capmqtt.messages == [
        MqttMessage(topic="foo", payload="bar", userdata=None),
    ]

    # Demonstrate the "records" property.
    # It returns tuples of "(topic, payload, userdata)".
    assert capmqtt.records == [
        ("foo", "bar", None),
    ]

The capmqtt_decode_utf8 setting can be enabled in three ways.

  1. Session-wide, per pytestconfig option, for example within conftest.py:

    @pytest.fixture(scope="session", autouse=True)
    def configure_capmqtt_decode_utf8(pytestconfig):
        pytestconfig.option.capmqtt_decode_utf8 = True
  2. On the module level, just say capmqtt_decode_utf8 = True on top of your file.

  3. On individual test cases as a test case marker, using @pytest.mark.capmqtt_decode_utf8.

Issues

  • The mosquitto fixture currently does not support either authentication or encryption.

  • capmqtt should be able to capture messages only from specified topics.

Development

git clone https://github.com/mqtt-tools/pytest-mqtt
cd pytest-mqtt
python3 -m venv .venv
source .venv/bin/activate
pip install --editable=.[test,develop]
poe test

Project information

Contributions

Every kind of contribution, feedback, or patch, is much welcome. Create an issue or submit a patch if you think we should include a new feature, or to report or fix a bug.

Resources

License

The project is licensed under the terms of the MIT license, see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest_mqtt-0.7.0.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_mqtt-0.7.0-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file pytest_mqtt-0.7.0.tar.gz.

File metadata

  • Download URL: pytest_mqtt-0.7.0.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for pytest_mqtt-0.7.0.tar.gz
Algorithm Hash digest
SHA256 fb8a74dcfc87ac8b397f8792913a4ed7c749d7fa22f8371de9d6d1d4ea71eb97
MD5 8f89b5af1344a7833a57569578863043
BLAKE2b-256 e9a0ca8890b82e99bc928e7c71e96848cdff45d8e5f6f4c5f42980168d837973

See more details on using hashes here.

File details

Details for the file pytest_mqtt-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: pytest_mqtt-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 10.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for pytest_mqtt-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d3c003da758e6e5f8261c500d5bee8e11e3b419b5d789ce917ea9264fbb6638d
MD5 98d4a071286b4d9b85f41f596387b8c8
BLAKE2b-256 1170dbd8468c7c74649b07230ce2252f678c325b48bb6f7e7e7e2ec27c8bf5a7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page