Continuous Integration for Embedded Hardware
Project description
BenchCI
Run hardware-in-the-loop tests on real embedded devices — locally or in CI.
BenchCI is a lightweight test runner for embedded systems that lets you define hardware tests declaratively and execute them against real devices using UART, Modbus, and GPIO.
⚡ Why BenchCI?
Testing embedded firmware usually looks like this:
- Flash firmware manually
- Open serial terminal
- Send commands
- Watch logs
- Write ad-hoc scripts
- Repeat for every release
👉 This does not scale.
BenchCI turns this into a repeatable, automated, CI-ready workflow.
🧠 What BenchCI Does
BenchCI connects your CI pipeline directly to real hardware and allows you to:
- Flash firmware automatically
- Interact with devices over UART, Modbus RTU/TCP
- Control and monitor GPIO lines
- Validate behavior with structured test steps
- Generate reproducible test artifacts
🏗️ How It Works
CI Pipeline / Developer
│
▼
benchci run
│
▼
BenchCI Agent
│
▼
Hardware Device
🧰 CLI Workflow
BenchCI provides built-in tools to help you validate your setup:
benchci doctor— check system dependenciesbenchci validate— validate configuration filesbenchci login— authenticate with BenchCI services
These commands help ensure reliable execution before running tests.
🚀 Example (30 seconds)
Define your test suite:
name: firmware_tests
tests:
- name: boot_ok
steps:
- expect_uart:
contains: "[BOOT] OK"
within_ms: 3000
- name: ping
steps:
- send_uart: "PING\n"
- expect_uart:
contains: "PONG"
within_ms: 1000
Run it:
benchci run -b board.yaml -s suite.yaml -a build/fw.elf
BenchCI will:
- flash firmware
- reset the device
- execute tests
- validate responses
- store logs and results
🔌 Supported Interfaces
BenchCI is designed for real hardware interaction:
- UART communication
- Modbus RTU
- Modbus TCP
- Linux GPIO (input, output, edge detection)
📦 Output Artifacts
Each run produces structured results:
benchci-results/
├── transport.log
├── flash.log
├── gpio.log
└── results.json
Perfect for CI pipelines and debugging.
🔄 CI Integration
BenchCI is built for automation:
- GitLab CI support (example included)
- Works with any CI runner connected to hardware
- Agent-based execution for remote benches
See: examples/ci/gitlab
📚 Documentation
Full documentation:
Key topics:
- Quickstart
- Installation
- Board configuration
- Test suite definition
- CI integration
- Architecture
📌 Repository Contents
This repository contains:
- documentation
- configuration examples
- CI integration examples
- helper tools
BenchCI source code is maintained in a private repository.
💼 License
BenchCI is a commercial product.
To request access:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file benchci-0.1.0.tar.gz.
File metadata
- Download URL: benchci-0.1.0.tar.gz
- Upload date:
- Size: 56.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38ac1d4fa5d985060f246b0bd43d3e8f4a4cac3bfebbc40361f3c397b4e561c8
|
|
| MD5 |
95b9f409edcbbf834602f3390c09ede3
|
|
| BLAKE2b-256 |
e0a6a254f4391d74d9112e96376051e2f543bb9a119111edae842e782cb295fc
|
File details
Details for the file benchci-0.1.0-py3-none-any.whl.
File metadata
- Download URL: benchci-0.1.0-py3-none-any.whl
- Upload date:
- Size: 66.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3618fac6392a39352699f488de49e9332afd89cb71ad50319489565822ed5015
|
|
| MD5 |
f34560f251857c256f23d465589bc810
|
|
| BLAKE2b-256 |
967a6a0d72e3b6246de27c098f8eb79787f840fd536fb0b6b13ef1b794e7ef54
|