{"library":"pytest-embedded-serial","title":"pytest-embedded-serial: Serial Port Testing for Pytest Embedded","description":"pytest-embedded-serial is a pytest plugin that extends the core pytest-embedded framework, enabling robust testing of embedded devices over serial communication. It provides fixtures and functionalities to interact with serial ports, facilitating automated tests for embedded systems. Currently at version 2.7.0, it is part of the pytest-embedded ecosystem maintained by Espressif Systems, which typically follows a regular release cadence with semantic versioning.","language":"python","status":"active","last_verified":"Mon May 18","install":{"commands":["pip install pytest-embedded-serial"],"cli":null},"imports":["from pytest_embedded import Dut","from pytest_embedded_serial.dut import SerialDut"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import pytest\nfrom pytest_embedded import Dut\nimport os\n\n# Assuming a device is connected via serial port\n# You can specify the port via CLI: pytest --port /dev/ttyUSB0 (or COMx on Windows)\n# Or set it via an environment variable or pytest.ini\n\ndef test_serial_communication(dut: Dut):\n    # Ensure the 'serial' service is enabled, e.g., via CLI: pytest --embedded-services serial\n    # or by default if pytest-embedded-serial is installed.\n\n    # Example: Write data to the serial port and expect a response\n    # Replace with actual device interaction logic\n    dut.write('hello device')\n    dut.expect_exact('echo: hello device', timeout=5)\n    print(\"Device responded to 'hello device'.\")\n\n    # Accessing underlying serial object (for advanced use cases)\n    # The dut.serial object is an instance of Serial from pytest_embedded_serial.serial\n    # It's generally preferred to use dut.write and dut.expect for standard interactions.\n    # serial_port = dut.serial\n    # print(f\"Connected to serial port: {serial_port.port} at baudrate: {serial_port.baud}\")\n\n    dut.write('get status')\n    dut.expect(r'Status: (\\w+)', timeout=5)\n    status = dut.match.group(1).decode('utf-8')\n    print(f\"Device status: {status}\")\n\n    assert status == 'OK'\n","lang":"python","description":"This quickstart demonstrates how to write a basic pytest-embedded test that utilizes serial communication. It uses the `dut` fixture, which is automatically enhanced by `pytest-embedded-serial` when installed. The example shows writing commands to the device under test (DUT) and expecting specific responses using `dut.write()` and `dut.expect_exact()`. The `serial` service is often automatically enabled when the package is installed, or can be explicitly enabled via `pytest --embedded-services serial` CLI option.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-18","installed_version":"1.18.2","pypi_latest":"2.8.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.1,"avg_import_s":0.36,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pytest-embedded-serial","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.35,"mem_mb":8.2,"disk_size":"32.5M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pytest-embedded-serial","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.1,"import_time_s":0.24,"mem_mb":8.2,"disk_size":"33M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pytest-embedded-serial","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.44,"mem_mb":9.3,"disk_size":"35.8M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pytest-embedded-serial","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3,"import_time_s":0.4,"mem_mb":9.3,"disk_size":"36M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pytest-embedded-serial","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.41,"mem_mb":9,"disk_size":"27.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pytest-embedded-serial","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":0.4,"mem_mb":9,"disk_size":"28M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pytest-embedded-serial","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.45,"mem_mb":9.6,"disk_size":"27.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pytest-embedded-serial","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":2.9,"import_time_s":0.4,"mem_mb":9.6,"disk_size":"28M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pytest-embedded-serial","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.27,"mem_mb":7.4,"disk_size":"31.7M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pytest-embedded-serial","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.5,"import_time_s":0.26,"mem_mb":7.4,"disk_size":"32M"}]}}