Live demo — data resets daily at 03:00 UTC. Nothing you enter is saved. Server UI →

product: maestro audience: test-developer authority: normative

What is Accordion Maestro?

Accordion Maestro is a modern test orchestration platform for production hardware testing — a replacement for NI TestStand. It coordinates test execution across physical instruments and devices, records structured measurement data, provides a web-based operator UI, and integrates with MES systems for factory traceability.

Maestro does not replace your test code. It replaces the glue around it — the sequencer, the operator interface, the result storage, and the station configuration layer. Your .NET or Python test functions stay exactly as they are; Maestro calls them via gRPC and records their results.

How Maestro compares to other tools

Capability Accordion Maestro NI TestStand pytest / MSTest / xUnit Robot Framework
Primary purpose Production hardware test orchestration Production hardware test orchestration Software unit / integration testing Software acceptance / RPA testing
Test definitions YAML (version-controlled in Git) Proprietary .seq files (binary) Code (Python / C#) Keyword-driven .robot files
Test code language .NET and Python (plain functions) LabVIEW, C, .NET, Python Native to framework Python / Java / .NET keywords
Measurement limits Built-in: numeric ranges, boolean, string, log Built-in (NI limits model) Manual Assert calls — no standard limits model No built-in measurement concept
Step-level verdict Automatic per-step PASS / FAIL / SKIPPED / ABORTED Automatic per-step Per-test pass/fail only Per-keyword pass/fail
Retry / repeat / abort Declarative YAML fields (retry:, repeat:, run_on_abort:) Sequence editor flow control Manual code loops or plugins Retry via libraries
Operator UI Web-based (Blazor) — any device, any OS Windows desktop application Terminal / IDE Terminal / browser (RF reports)
Operator prompts Built-in prompt step with images, buttons, value input Dialogue steps in sequence Not applicable Not applicable
Station configuration Database-backed (cfg.* per station) Station globals / config files Environment variables or fixtures Variable files
Result storage PostgreSQL — every measurement as a queryable row Database or ATML/XML export JUnit XML or terminal output XML / HTML reports
MES integration Built-in routing, result reporting, serial gating Built-in (NI InSight, custom) Not applicable Not applicable
Traceability Git commit hash + package version on every execution File-based traceability Not designed for production traceability Not designed for production traceability
Licensing No per-seat runtime fees Per-seat runtime license Open source / free Open source / free
Platform Docker — Linux or Windows Windows only Cross-platform Cross-platform
Real-time monitoring SignalR live step progress TestStand operator interface Not applicable Not applicable

When to use what

  • Use Maestro when you are building a production test system that involves physical hardware, instruments, measurement limits, operator interaction, station-specific configuration, and/or MES traceability.

  • Use pytest / MSTest / xUnit for software unit tests, integration tests, and CI pipelines. You can (and should) use MSTest alongside Maestro to debug your .NET test functions locally before deploying — see sdk/mstest-debugging.md.

  • Use Robot Framework for software acceptance testing, browser automation, or RPA workflows. It is keyword-driven and designed for a different problem domain.

Concept mapping from other ecosystems

Your background You are used to Maestro equivalent
NI TestStand Sequence file → steps → substeps YAML test:steps:type: sequence
Step types (Action, NumericLimit, Pass/Fail) runner: dotnet/python + measurement: block
Station globals cfg.* station configuration variables
RunState.Root.Parameters variables: block + {{var}} templates
Sequence editor GUI VS Code + YAML schema autocomplete
Operator Interface Test Monitor web page
TestStand Result Collection PostgreSQL measurement rows
pytest test_*.py functions Python functions in python_modules/ — no test_ prefix needed
conftest.py fixtures YAML setup: / teardown: steps
@pytest.mark.parametrize YAML repeat: with {{__iteration__}}
assert value > limit YAML measurement: with low_limit: / high_limit:
pytest.ini / pyproject.toml package.json
MSTest / xUnit [TestMethod] / [Fact] One YAML step per method
[ClassInitialize] / constructor YAML setup: steps
[ClassCleanup] / Dispose YAML teardown: steps with run_on_abort: true
Assert.IsTrue(v >= low && v <= high) YAML measurement: with limits — auto-evaluated
.runsettings Station config (cfg.*) + execution metadata (exec.*)

Step verdicts

Verdict Meaning
PASS Step succeeded; all measurements within limits
FAIL Measurement out of limits or runner returned failure
SKIPPED Not executed (disabled, precondition false, or force: skip)
ABORTED Could not complete (timeout, exception, or precondition error)

Test verdict

Verdict Condition
PASS Every executed step is PASS or SKIPPED
FAIL One or more steps FAIL, none ABORTED
ABORTED One or more steps ABORTED (overrides FAIL)
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.