Skip to main content

Hardware-in-the-Loop testing framework

Project description

Py-Micro-HIL

Py-Micro-HIL is a modular, lightweight Hardware-in-the-Loop (HIL) testing framework for Python.
It provides a unified interface for testing embedded systems, sensors, and communication buses
(Modbus RTU, SPI, I2C, UART, GPIO) both on Raspberry Pi hardware and in PC simulation mode.


🚀 Overview

Py-Micro-HIL enables automated functional and integration testing of embedded systems.
It supports both real hardware execution on Raspberry Pi and simulated environments on any PC.

With this framework you can:

  • Write and organize test suites for hardware peripherals.
  • Interface with GPIO, SPI, I2C, UART, or Modbus RTU devices.
  • Use mocks for offline or CI/CD testing.
  • Generate structured HTML and console reports.
  • Integrate easily with pipelines or GitHub Actions.

🔗 Documentation

📚 Full developer and user documentation is available here:
➡️ https://niwciu.github.io/PY_MICRO_HIL


⚙️ Installation

Before installing, it is recommended to use a virtual environment:

python -m venv .venv
source .venv/bin/activate   # or on Windows: .venv\Scripts\activate

🧰 Option 1 – From PyPI (recommended for most users)

pip install py-micro-hil

🧪 Option 2 – From source (for contributors)

git clone https://github.com/niwciu/PY_MICRO_HIL.git
cd PY_MICRO_HIL
pip install -e .

💡 On Raspberry Pi systems, you can use the flag --break-system-packages to simplify installation in CI/CD environments:

pip install py-micro-hil --break-system-packages

Optional dependencies

pymodbus, pytest, smbus2, spidev, pyserial

Developer setup

For development and contribution:

pip install -e .[dev]

🧩 Example usage

1️⃣ Create a configuration file

In the project root, create a file peripherals_config.yaml, for example:

framework:
  log_level: INFO
  report_dir: ./reports
  parallel_execution: false

peripherals:
  gpio:
    pins:
      17:
        mode: OUT

Full configuration reference:
📖 Configuration and YAML guide →


2️⃣ Create test files

Create a directory named hil_tests/ and add your test modules there.
Each file represents a test group.

Example: hil_tests/test_gpio_led.py

from py_micro_hil.peripherals.rpi_peripherals import RPiGPIO

config = {17: {"mode": "OUT"}}
gpio = RPiGPIO(config)

def setup_group():
    gpio.initialize()

def teardown_group():
    gpio.release()

def test_led_toggle():
    gpio.write(17, 1)
    assert gpio.read(17) == 1

3️⃣ Run the tests

Before running tests check available options by typing:

hilltest --help

Use the built-in CLI runner:

hiltests --config ./peripherals_config.yaml --tests ./hil_tests

You can display all options with:

hiltests --help

If both the YAML configuration and the hil_tests directory are in the current directory,
simply run:

hiltests

4️⃣ Generate reports

Py-Micro-HIL can generate both console log files and HTML reports.

Example:

hiltests --log ./reports/log.txt

or

hiltests --html ./reports/report.html

Reports can be customized with name, path, or format.
See: Reports and Logging →


💡 Features

  • ✅ Unified test structure (TestFramework, TestGroup, Test)
  • ✅ Automatic setup/teardown with context isolation
  • ✅ YAML-driven configuration system
  • ✅ Dynamic test discovery (tests_group_factory)
  • ✅ Mock peripherals for PC and CI/CD environments
  • ✅ Full logging and HTML report generation
  • ✅ Native CLI interface (hiltests)
  • ✅ Compatible with Raspberry Pi and Linux hosts

🧰 Supported peripherals

Peripheral Class Description
GPIO RPiGPIO Digital I/O control
PWM RPiPWM, RPiHardwarePWM Software and hardware PWM
UART RPiUART Serial communication via pyserial
I²C RPiI2C SMBus-compatible interface
SPI RPiSPI SPI interface via spidev
Modbus RTU ModbusRTU RS-485 communication via pymodbus

🧩 These are the currently implemented peripherals.
You can easily extend the framework by adding your own peripherals in the
src/py_micro_hil/peripherals/ directory and implementing the required abstract interfaces.
The developer documentation includes full guidance on this process.


🤝 Contributing

We welcome contributions from the community!
Please ensure your code follows PEP-8 style and includes tests.

  1. Fork this repository
  2. Clone and install in development mode:
    git clone <link to your fork>.git
    cd PY_MICRO_HIL
    pip install -e .[dev]
    
  3. Create a new branch:
    git checkout -b feature/my-feature
    
  4. Make your changes and test:
    pytest -v
    
  5. Submit a pull request with a clear description and test coverage.

Full contribution guide:
📘 Developer Guide →


📄 License

MIT License © 2025 – @niwciu


Project details


Download files

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

Source Distribution

py_micro_hil-0.1.3.tar.gz (50.7 kB view details)

Uploaded Source

Built Distribution

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

py_micro_hil-0.1.3-py3-none-any.whl (41.7 kB view details)

Uploaded Python 3

File details

Details for the file py_micro_hil-0.1.3.tar.gz.

File metadata

  • Download URL: py_micro_hil-0.1.3.tar.gz
  • Upload date:
  • Size: 50.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for py_micro_hil-0.1.3.tar.gz
Algorithm Hash digest
SHA256 41cdc73b10ae1d75c6815255916f0693c27b432f191949441f04f8ce219b27e4
MD5 69c89f1b953225f4a16669ef13ffb1ee
BLAKE2b-256 84c6e3546f3449c60d85c1d70a6ee81dba986fa09c1d5ab150a1998afde10f6b

See more details on using hashes here.

File details

Details for the file py_micro_hil-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: py_micro_hil-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 41.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for py_micro_hil-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9ee2270d278a6cc282cce50fd3f765b5e95013e55e746facdedfbe5c05729a0f
MD5 40bd7469a0ffed0ab70d8dc083a726cd
BLAKE2b-256 c0c8267f45600a7906ce5fb163a7c17b230f74e9e7d6567198e5717e71d746ff

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