Skip to content
Test Station Setup

What Is an Operator Interface

An operator interface lets production floor workers run tests without writing code. Learn what it includes, how it compares across frameworks, and how to.

JJulien Buteau
beginner9 min readMarch 14, 2026

What Is an Operator Interface for Manufacturing Test

An operator interface is the screen a production floor worker sees when running a test. It handles serial number entry, displays pass/fail results, shows prompts for manual steps, and logs everything without the operator touching code. This guide covers what an operator interface should include, how the major test frameworks handle it, and how to set one up with OpenHTF and TofuPilot.

Why Operators Need a Dedicated Interface

Test engineers write Python scripts. Operators run them. These are different jobs with different needs.

Test EngineerOperator
Writes and debugs test codeRuns tests hundreds of times per shift
Reads terminal outputNeeds large pass/fail indicators
Knows what each phase doesNeeds step-by-step instructions
Has Python installedMay not know what Python is
Works on one stationMay rotate between stations

Running a test from a terminal works during development. In production, the operator needs a purpose-built screen that removes complexity and prevents mistakes.

What an Operator Interface Should Include

FeatureWhy
Serial number inputBarcode scanner or manual entry to identify each DUT
Start/stop controlsOne button to begin, one to abort
Pass/fail displayLarge, color-coded result visible from a distance
Phase progressShows which step is running and how many remain
Operator promptsAsks for manual actions (flip board, connect cable, visual check)
Input fieldsCaptures operator observations (dropdown, checkbox, text, numeric)
Measurement displayShows live readings during the test
Error messagesClear instructions when something goes wrong
Test historyLast few results for the current station

How Test Frameworks Handle Operator Interfaces

NI TestStand

TestStand ships with pre-built operator interfaces in LabVIEW, C#, and VB.NET. The source code is provided so you can customize it. It supports user roles (operator, developer, admin), concurrent test executions, and report generation.

Strengths: Mature, full-featured, customizable. Weaknesses: Requires a TestStand license ($3-5K per seat), Windows only, tied to the NI ecosystem.

OpenTAP

OpenTAP offers an operator panel plugin that provides a simplified view for running test plans. It includes a "focus mode" that minimizes interactions to start/stop and pass/fail.

Strengths: Open source core, cross-platform. Weaknesses: .NET ecosystem, sparse documentation, basic operator UI.

OpenHTF

OpenHTF includes a built-in Station Server that serves a web interface at localhost:12000. It shows test status, phase progress, and handles operator prompts through the browser.

Strengths: Web-based (works on any device with a browser), no installation needed on the operator's machine. Weaknesses: The built-in UI is minimal. For production use, most teams pair OpenHTF with a dedicated frontend.

pytest with HardPy

HardPy adds a browser-based operator panel to pytest. It shows test hierarchy, dialog boxes for operator input, and real-time charts.

Strengths: pytest-native, modern web UI. Weaknesses: New project, limited adoption, basic feature set.

Comparison Table

FeatureTestStandOpenTAPOpenHTF + TofuPilotHardPy
Serial number inputYesYesYesYes
Pass/fail displayYesYesYes (streaming)Yes
Operator promptsYesLimitedYes (15+ input types)Yes (dialogs)
Image-based inputsNoNoYesNo
Real-time streamingYesLimitedYes (MQTT)Yes
Role managementYesNoYesNo
Web-basedNo (desktop)No (desktop)YesYes
Kiosk modeManual setupNoYesNo
Cost$3-5K/seatFree (core)Free (Lab tier)Free
PlatformWindowsWindows/LinuxAny browserAny browser

Prerequisites

  • Python 3.10+
  • OpenHTF installed (pip install openhtf)
  • TofuPilot Python SDK installed (pip install tofupilot)

Step 1: Add Operator Prompts to Your Test

OpenHTF handles operator interaction through prompts. The operator sees a message and optionally provides input before the test continues.

operator_test.py
import openhtf as htf
from openhtf.plugs import user_input


@htf.plug(prompts=user_input.UserInput)
def phase_visual_inspection(test, prompts):
    """Ask the operator to perform a visual check."""
    prompts.prompt(
        "Inspect the board for solder bridges or missing components. "
        "Press Enter when done."
    )


@htf.plug(prompts=user_input.UserInput)
@htf.measures(
    htf.Measurement("operator_serial").with_args(docstring="Scanned serial number"),
)
def phase_scan_serial(test, prompts):
    """Prompt the operator to scan the DUT serial number."""
    serial = prompts.prompt(
        "Scan the barcode on the DUT label.",
        text_input=True,
    )
    test.measurements.operator_serial = serial

Step 2: Stream to TofuPilot Operator UI

TofuPilot provides a web-based operator interface that streams test progress in real time. The operator sees prompts, measurements, and pass/fail results in a browser. No terminal, no code.

operator_test.py
from tofupilot.openhtf import TofuPilot

test = htf.Test(
    phase_scan_serial,
    phase_visual_inspection,
)

with TofuPilot(test):
    test.execute(test_start=lambda: input("Scan serial: "))

When the test runs, TofuPilot streams the interface to a URL the operator can open on any device. The console prints the URL automatically.

Step 3: Deploy for Production

For production use, set up the operator station so the browser opens automatically in full-screen mode:

SettingRecommendation
BrowserChrome or Edge in kiosk mode (full screen, no address bar)
DisplayLarge monitor or touchscreen at the test station
InputBarcode scanner configured as keyboard input
Font sizeBrowser zoom to 125-150% for readability at arm's length
Auto-startLaunch browser on boot, navigate to the TofuPilot streaming URL

The operator's workflow becomes: scan barcode, follow prompts, see pass/fail. No terminal, no file system, no Python knowledge required.

Choosing the Right Approach

SituationRecommendation
Already using TestStandUse the built-in OI unless you're migrating away
Python-based tests, need a quick UIOpenHTF + TofuPilot streaming (no frontend code to write)
pytest-based testsHardPy for basic prompts, or TofuPilot for full operator UI
Custom requirements (branded, multi-station dashboard)Build a custom frontend against the TofuPilot API
Budget is zero, needs to work todayOpenHTF Station Server at localhost:12000

More Guides

Put this guide into practice