Pytest plugin that runs library functional tests on connected CircuitPython and MicroPython boards.
Project description
chumicro-pytest-device
Pytest plugin that runs your tests on a real CircuitPython or MicroPython board.
Drop tests under any functional_tests/ directory and the plugin intercepts collection: stages your library + test source onto the connected board via chumicro-deploy, executes the test in the device runtime, parses the result back, and fails / passes the host-side pytest with the on-device outcome. Reads device targets from your devices.yml; respects the same workspace conventions the rest of the ChuMicro tooling uses.
Part of the ChuMicro family — small, focused Python libraries for microcontrollers and laptops. Browse all workbench tools. This is a workbench tool — runs on your laptop, drives the boards over serial.
Install
pip install chumicro-pytest-device-experimental
chumicro-deploy (and its pyserial / mpremote deps) come along. Auto-registers via the pytest11 entry point — no pytest_plugins = [...] line in conftest.py needed. Native Windows isn't currently supported (the underlying chumicro-deploy raises WindowsNotSupportedError); WSL2 works.
Quick example
A functional test reads like a normal unit test — it just runs on the board:
# libraries/timing/functional_tests/test_heartbeat.py
import time
from chumicro_timing import Heartbeat
from chumicro_timing.ticks import ticks_ms
def test_heartbeat_fires_on_real_clock() -> None:
heartbeat = Heartbeat(period_ms=10)
deadline = time.monotonic() + 1.0
fires = 0
while time.monotonic() < deadline:
if heartbeat.poll(ticks_ms()):
fires += 1
assert fires > 50
Run on every device targeted by your devices.yml defaults:
pytest libraries/timing/functional_tests --runtime both
The plugin discovers the board, stages chumicro_timing/src/ + the test, executes on-device, parses the on-device pytest result back, and reports PASS / FAIL through host-side pytest.
What's included
Plugin modules
| Module | Purpose |
|---|---|
chumicro_pytest_device.plugin |
The pytest plugin entry-point module — collection interception, deploy orchestration, result reporting |
chumicro_pytest_device.result_parser |
Parses on-device test output back into TestResult objects |
chumicro_pytest_device.pr_summary |
Renders a markdown PR-summary block from captured run results — drop into a CI step |
Pytest options
| Option | Effect |
|---|---|
--runtime {micropython,circuitpython,both} |
Override defaults.ide_runtime |
--micropython-device <id> |
Override defaults.micropython |
--circuitpython-device <id> |
Override defaults.circuitpython |
--deploy-mode {ram,flash} |
Override the per-device deploy mode |
--pr-summary |
Append a markdown summary block to stdout at end of session |
--pr-summary-command <text> |
The command that re-runs the failed tests, included in the summary |
Where this fits
Depends on chumicro-deploy for staging tests on a board. Auto-registers via pytest11; reads devices.yml written by chumicro-workspace.
Companions
| Workbench tool | Why you'd use it alongside |
|---|---|
chumicro-deploy |
The transport layer the plugin uses for staging. Useful directly when you want to drive a board outside of pytest |
chumicro-repl |
Tail a board's REPL after a deploy — handy for follow-up debugging when a functional test surprises you |
chumicro-workspace |
The host CLI for project workspaces. Reads the same devices.yml schema |
Contributing
Working on chumicro-pytest-device itself? Clone the mono-repo if you haven't already — the rest of the workflow assumes you're inside that workspace.
pip install -e .[test]
pytest tests/ # host-side tests
No hardware-side functional tests for this package itself — its job is to drive consumer libraries' functional tests via pytest libraries/<name>/functional_tests/ against a board registered in devices.yml.
Find this library
- PyPI: chumicro-pytest-device
- Source: workbench/pytest-device
License
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 chumicro_pytest_device_experimental-0.17.6.tar.gz.
File metadata
- Download URL: chumicro_pytest_device_experimental-0.17.6.tar.gz
- Upload date:
- Size: 55.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96621ad97f6247b2532bb4641b29fb89b12f1ef8345f15b77d970b84a7d4cc08
|
|
| MD5 |
a75cfa70fb0688c6fd045e4f5f99ab4a
|
|
| BLAKE2b-256 |
0a58e9d6f3a3c63ff5d4d370233d0e11981f04e24524a6b4f9e15637a5881ebc
|
File details
Details for the file chumicro_pytest_device_experimental-0.17.6-py3-none-any.whl.
File metadata
- Download URL: chumicro_pytest_device_experimental-0.17.6-py3-none-any.whl
- Upload date:
- Size: 67.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69d6effabec1d694c74ef3e381e955718bde6ef6ff0930b341886aca24b47688
|
|
| MD5 |
f4950c8b07eb2346c2f8e252cb30ca26
|
|
| BLAKE2b-256 |
cc31cdd0ff0039e594134be9c790674dfb0036d2fb5febcf1487eee9ad8fe7ca
|