OpenTAP is an open-source test sequencer for .NET, developed and maintained by Keysight under the MPL 2.0 license. Its commercial edition is Keysight PathWave Test Automation. The TofuPilot Framework is an open-source Python test framework with a Rust execution engine, under the MIT license, connected to the TofuPilot dashboard. This guide compares them for production test.
Facts about OpenTAP were checked against its repository, opentap.io and Keysight's product pages in November 2026 (OpenTAP 9.35).
Overview
| OpenTAP | TofuPilot Framework | |
|---|---|---|
| Maintainer | Keysight | TofuPilot |
| License | MPL 2.0 (plugins may stay proprietary) | MIT |
| Language | C# / .NET (Python through a Python.NET plugin) | Python (Rust engine) |
| Test definition | Test plan built from TestStep plugins in an editor | YAML procedure, Python phases and plugs |
| CLI | tap | tofupilot |
| Editors | Keysight GUI editor, open-source TUI editor | Any text editor, Git |
| Commercial edition | PathWave Test Automation (KS8400B developer, KS8000B deployment) | TofuPilot plans (Lab, Pro, Enterprise) |
| Platforms | Windows x86, Linux x86, macOS Apple silicon, Docker | Windows, Linux, macOS |
Licensing
OpenTAP's core is free. Since version 9.29, Keysight's GUI editor is also available under a no-cost Community License, which requires an OpenTAP account, an internet connection and opt-in telemetry on system info, plugins, execution statistics, DUTs and instruments, with no support or warranty. Commercial support, the developer tools (Results Viewer, Timing Analyzer) and deployment licenses come with PathWave Test Automation, priced on quote, node-locked, transportable or floating.
The TofuPilot Framework and CLI are free and run without an account. The dashboard, fleet deployment and analytics come with a TofuPilot plan, hosted or self-hosted.
The Same Test in Both
A 3.3 V rail check judged against 3.2 V to 3.4 V.
OpenTAP Version
A test step is a C# class. The step publishes its result and sets its verdict.
// OpenTAP test step: read the rail, publish it, set the verdict.[Display("Rail 3V3", Description = "Measure the 3.3 V rail")]public class RailCheck : TestStep{ public Multimeter Dmm { get; set; } public override void Run() { double volts = Dmm.ReadVoltage(); Results.Publish("Rail", new List<string> { "Volts" }, volts); UpgradeVerdict(volts >= 3.2 && volts <= 3.4 ? Verdict.Pass : Verdict.Fail); }}The step is compiled into a plugin, then added to a test plan (.TapPlan) in the editor.
TofuPilot Framework Version
procedure.yaml19 lines
name: Power Checkversion: 1.0.0plugs: - name: Multimeter key: dmm python: plugs.dmm:Multimetermain: - name: Rail 3V3 key: rail_3v3 python: phases.rail_3v3 measurements: - name: Rail 3V3 key: rail_3v3 unit: V validators: - {operator: ">=", expected_value: 3.2} - {operator: "<=", expected_value: 3.4}def rail_3v3(measurements, dmm): measurements.rail_3v3 = dmm.read_voltage()The limits are data in the procedure, not branches in code, so the dashboard stores them with each value and plots margins over time.
Feature Comparison
| Feature | OpenTAP | TofuPilot Framework |
|---|---|---|
| Limits as data | No, verdict set in step code | Yes, YAML validators |
| Parallel execution | Yes (parallel step) | Yes (parallel phases) |
| Multi-slot fixtures | Through test plan design | Yes, built in |
| Instrument plugins | Package repository, SCPI plugin, Keysight drivers | Plugs wrapping PyVISA or any Python driver |
| Operator UI | Editor or custom panel (deployment system) | Browser kiosk declared in the procedure |
| Result storage | ResultListener plugins: CSV, text log, SQLite, PostgreSQL | Station queue, uploaded to the dashboard |
| Analytics | Desktop tools in the paid developer edition | Yield, control charts and Cpk in the dashboard |
| Fleet deployment | Deployment license per station, central push not documented | Git push to every linked station, instant rollback |
| Version control | Test plans are XML files | YAML and Python, diff friendly |
When to Use OpenTAP
- The team writes C# and runs on .NET.
- Most instruments are Keysight, with plugins already available.
- Commercial support from the instrument vendor is a requirement.
- Engineers prefer building test plans in a GUI editor.
When to Use the TofuPilot Framework
- The team writes Python and wants the test plan as reviewable text in Git.
- Limits must be stored with every value for traceability and SPC.
- Several stations run the same procedure, deployed and rolled back centrally.
- Operators need guided forms without building a custom panel.
- Analytics must cover every station without desktop tools.
Using OpenTAP with TofuPilot
OpenTAP results reach other systems through ResultListener plugins. A listener built on the TofuPilot C# SDK can upload each run to the dashboard, which keeps existing test plans and adds fleet analytics. See the SDK documentation.
For a wider comparison including TestStand, OpenHTF and pytest, see Manufacturing Test Frameworks Compared.
