Robot Framework on TofuPilot

Last updated on May 21, 2026

Robot Framework is a keyword-driven test framework that organizes execution as .robot suites of test cases composed from reusable keywords.

With TofuPilot, you can deploy Robot Framework suites to your stations via Git push and stream live test data to both the kiosk and the dashboard, with zero configuration.

Getting started

To get started with Robot Framework on TofuPilot:

  • Clone our Robot Framework starter template to your favorite Git provider and deploy it on TofuPilot.
  • If you have a Robot Framework suite, push it to your Git provider and import it from the New Procedure wizard.

Integration

The TofuPilot CLI runs your Robot Framework suite natively via the Listener API v3 and streams test cases, measurements, and logs to the dashboard. A bundled keyword library (tofupilot_robot) ships embedded in the CLI and exposes measurement keywords that preserve limits across the listener boundary, which is the one piece you cannot get from Robot's built-in BuiltIn library.

suite.robot
*** Settings ***
Library    tofupilot_robot

*** Test Cases ***
Supply Voltage Is Stable
    ${voltage}=    Read Voltage
    Measure Numeric    voltage    ${voltage}    min=4.8    max=5.2    unit=V

Test cases

In Robot Framework, every *** Test Cases *** entry is one unit of execution. TofuPilot maps each test case to a phase row.

Robot FrameworkTofuPilotNotes
test case namenameCapped at 200 chars.
test statusoutcomePASS / FAIL / SKIP. Errors collapse to ERROR.
test documentationdocstringFrom the [Documentation] setting. Capped at 50000 chars.
start / end timestartedAt / endedAtISO 8601 timestamps.
template / data-drivenretryCountEach iteration becomes a separate phase row, not a retry.

Measurements

The bundled tofupilot_robot library exposes three keywords that validate a runtime value, fail the test on violation, and emit a structured measurement payload.

KeywordUse for
Measure NumericNumeric value with optional min / max / unit.
Measure StringString with expected= or matches= (regex).
Measure BooleanBoolean with optional expected=.
suite.robot
*** Test Cases ***
Firmware Version
    ${version}=    Get Firmware
    Measure String    firmware_version    ${version}    expected=1.4.2
Robot keyword argumentTofuPilotNotes
namenameCapped at 200 chars.
valuevalueRouted to numeric_measurement, string_measurement, or boolean_measurement.
min / maxvalidator entriesEach emitted as >= / <= on the measurement.
expected (string / boolean)validator entryEquality check.
matches (string)validator entryRegex match.
unitunitsCapped at 60 chars.
descriptiondocstringCapped at 50000 chars.

Robot's BuiltIn library expands variables before the listener sees keyword calls, so Should Be Within Range loses the literal limits before they reach TofuPilot. Use the Measure * keywords for any value you want to land on the dashboard with limits intact.

Logs

Robot's Log keyword and Python logging records flow through the listener.

suite.robot
*** Test Cases ***
Calibration
    Log    Calibration started
Robot logTofuPilotNotes
levellevelDEBUG, INFO, WARNING, ERROR, CRITICAL.
timestamptimestampISO 8601 timestamp.
messagemessageCapped at 50000 chars.
source filesourceFileCapped at 200 chars.
source linelineNumber

Logs are stored at the run level; per-test association is not preserved.

Run metadata

Robot Framework has no built-in concept of a unit under test. TofuPilot reads defaults from pyproject.toml to identify the run:

pyproject.toml
[tool.tofupilot]
serial_number = "SN-0001"
part_number = "PCB01"
revision_number = "A"
batch_number = "2024-001"
auto_identify = false

When auto_identify is false (default), the CLI prompts the operator for the serial number on stdin before collection. When true, the defaults are used directly — the right choice for stations where a barcode scanner fills the serial in advance.

Offline upload

When the bench can lose connectivity, the CLI queues runs locally and uploads them when the network comes back. Each queued run keeps its original timestamp, so analytics stay accurate even when uploads land hours later. See tofupilot queue.

Unsupported features

The following Robot Framework features run as-is, but TofuPilot does not surface them on the dashboard.

FeatureStatus
Should Be ... keywords from BuiltInRun as assertions; the literal limits are lost before reaching TofuPilot.
Test tagsHonored by Robot for selection; not persisted on the phase.
Setup / Teardown keywordsHonored by Robot at runtime; not surfaced as separate phases.
External listenersRun alongside the TofuPilot listener; their output is not consumed.
Robot test selection (-t / --test)The connector runs the whole directory.
Operator promptsNot supported. Use OpenHTF or the TofuPilot Framework for live operator UI.
Multi-dim measurements with per-axis validatorsTofuPilot Framework only.
AttachmentsNot supported. Use the SDK directly to attach files.

How is this guide?

On this page