product: maestro audience: test-developer authority: normative
Step Type Cookbook
delay — timed pause
- name: "Stabilisation pause"
type: delay
duration: 1.5
mock — simulated step (no hardware)
type: mock IS for development only. MUST NOT be used in production tests.
- name: "Simulated voltage"
type: mock
outputs:
vout: "5.02"
measurement:
name: "VOUT"
target: 5.02
low_limit: 4.75
high_limit: 5.25
unit: "V"
dotnet — .NET runner
- name: "Measure voltage"
runner: dotnet
runner_type: net10.0
assembly: "MyTests.dll"
class: "MyTests.PowerTests"
method: "MeasureVoltage"
parameters:
channel: "CH1"
range: "10"
outputs:
board_voltage: "{{voltage}}"
measurement:
name: "VBOARD"
value: "{{voltage}}"
low_limit: 4.75
high_limit: 5.25
unit: "V"
For the .NET method signature requirements see sdk/dotnet-sdk.md.
python — Python runner
- name: "Read temperature"
runner: python
runner_type: python3.11
module: "sensors"
function: "read_temperature"
parameters:
sensor_id: "1"
outputs:
board_temp: "{{temperature}}"
measurement:
name: "BOARD_TEMP"
value: "{{temperature}}"
low_limit: 15.0
high_limit: 45.0
unit: "degC"
For the Python function signature requirements see sdk/python-sdk.md.
prompt — operator interaction
- name: "Visual Inspection"
type: prompt
prompt:
title: "Solder Joint Check"
message: |
Inspect connector J5:
- All joints clean and shiny
- No solder bridges
image: "images/j5-reference.png"
buttons:
- name: "PASS"
action: pass
- name: "FAIL"
action: fail
post_execution_action: terminate-on-fail
Every prompt automatically receives a Cancel button (action: abort) unless the
YAML already defines at least one button with action: abort.
Pressing Enter submits using default_button (or the first non-Cancel button when not
set).
For prompts that require operator value entry, add an input: block — see
ui/prompt-input.md.
sequence — nested YAML
- name: "Init DMM (cross-package)"
type: sequence
sequence: "sample-dmm-driver/tests/init.yaml"
parameters:
dmm_address: "TCPIP::192.168.1.50::INSTR"
outputs:
instrument_serial: "{{dmm_serial}}"
The sequence: field IS a package-relative path. Cross-package sequences reference
another installed package by its folder name.