Import NI TestStand Reports
Last updated on May 27, 2026
NI TestStand writes test reports in two XML schemas: its native TestStand XML schema and the ATML standard. This page covers the native TestStand XML report. Both are structured formats, so importing one needs no column mapping. Each report becomes a Run.
TestStand 2012 and later generate ATML reports by default. If your station uses the default, import them as ATML instead. Use this page when TestStand is configured for its native XML report.
| Encoding | XML |
|---|---|
| Extension | .xml |
| Detection | Auto-detected (<Reports> root + PropertyObject structure) |
| Origin | NI TestStand, native Report.xsd (PropertyObject.GetXML) |
| Maps to | Run, phases, measurements, limits, unit, part, batch |
| Runs per file | One or many |
| API import | POST /v2/import (importer: TESTSTAND) |
History
The native TestStand XML report is NI's own report format, generated by the TestStand process-model report engine. TestStand serializes its runtime ResultList through the API's PropertyObject.GetXML method, governed by a Report.xsd shipped in the TestStand installation and rendered for humans by an XSL stylesheet. It is distinct from ATML, which NI supports separately through its ATML Toolkit.
File structure vs the TofuPilot model
A TestStand XML report is a PropertyObject dump: a <Reports> root wraps one or more <Report> elements, and everything inside is generic <Prop> nodes (with Name, Type, and a <Value> child) rather than named test elements. The step tree lives under a ResultList array that nests recursively for sequence calls. TofuPilot walks that tree onto the run model.
| TestStand XML | TofuPilot |
|---|---|
<Report Type='UUT' UUTResult=...> | One Run, with UUTResult as its outcome. |
Prop Name='UUT' → SerialNumber | Unit serial number. |
PartNumber / BatchSerialNumber | Part and Batch. |
ResultList entries (SequenceCall steps) | Phases. |
| Numeric / pass-fail limit steps | Measurements with limits. |
Step Status (Passed/Failed) | Phase and measurement outcomes. |
Prerequisites
- A NI TestStand XML report (
.xml) that validates against the TestStand Report schema. - A Procedure to attach the runs to, created in the dashboard.
Auto-detection
TofuPilot detects TestStand XML by its <Reports> root and PropertyObject structure, not by file name. On the import page the row shows Auto-detected as TestStand; override the format from the row's detail sidebar if needed. A TestStand XML report and an ATML report are different schemas, so TofuPilot routes each to its own parser.
Import from the dashboard
- Open the target procedure's import page.
- Drag your
.xmlreport onto the dropzone. The row shows Auto-detected as TestStand and a Ready status. - Click Import. The run appears under the procedure.
Drop multiple reports at once to import a batch; each is parsed independently.
Import through the API
Upload the file, then import it by upload_id with the TESTSTAND importer.
# Import a NI TestStand XML report (upload_id comes from the upload finalize step)
curl -X POST https://tofupilot.app/api/v2/import \
-H "Authorization: Bearer $TOFUPILOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "upload_id": "550e8400-e29b-41d4-a716-446655440000", "importer": "TESTSTAND" }
]
}'The endpoint returns a { results: [...] } array with one entry per item; a multi-report document reports its run ids in the item's ids array. Pass several files in the items array (up to 100) to import them in one call; each is parsed independently and reported per-item. See the REST API reference for the upload flow and response schema.
TofuPilot flags duplicate files by content hash, so re-importing the same report links to the existing run instead of creating a copy.
How is this guide?
ATML
Learn how to import ATML XML test reports into TofuPilot with automatic detection, the IEEE standard for mil/aero and ATE unit-under-test results.
OpenHTF
Learn how to import OpenHTF JSON logs into TofuPilot with automatic format detection, turning existing test records into runs with no column mapping.