Migrating from Legacy Systems

Test Engineer Job Description for Python Hires

Learn how to write a test engineer job description around the work instead of NI tools, with a full template, a rewrite table and 2026 salary ranges.

JJulien Buteau
beginner8 min readSeptember 23, 2026

A test engineer job description that lists NI tools instead of the work filters out most of the people who could do the job. Written around the work (instruments, fixtures, limits, yield, operators, data), the same posting pulls from the whole Python pool, which is many times larger than the LabVIEW pool and skews younger. This guide gives you a full template, a line-by-line rewrite of the usual posting, and the salary ranges to attach.

Why the Usual Posting Fails

The typical posting reads like a licence inventory: LabVIEW, TestStand, CLD preferred, 5+ years NI ecosystem. It describes the tool the last engineer used, not the problem the next one has to solve.

That framing has two costs. It shrinks the candidate pool to people who already hold a shrinking credential, and it tells a strong Python engineer with instrument experience that they aren't wanted. Fewer universities teach LabVIEW in a core curriculum now and most teach Python, so the pool you're excluding is the one that's growing.

The fix is to describe the work. Every line under "must have" should be a task the person will do in their first quarter, not the name of a product they have to have used.

What the Job Actually Is

Strip the tools away and a manufacturing test engineer does six things.

AreaWhat the work looks like
InstrumentsTalk to a DMM, a power supply, a scope or a DAQ over SCPI, serial or USB. Read a datasheet, send a command, parse the reply.
FixturesUnderstand pogo pins, relay matrices, bed-of-nails and the mechanical side of getting a DUT connected. Debug an intermittent contact.
LimitsTurn a spec into a measurement with an upper and lower bound. Argue with design about what the bound should be.
YieldWatch FPY per station and per phase. Find the phase that's failing good boards and the phase that's passing bad ones.
OperatorsWrite the sequence so an operator can run it with a barcode scanner and a screen, and so the failure message says what to do next.
DataMake every run land somewhere the team can see it, with serial number, measurements and outcome, so a customer question about one unit takes a minute to answer.

None of these say LabVIEW. All of them can be done in Python with PyVISA for the instruments, the TofuPilot Framework for the sequencer and operator UI, and TofuPilot for results. That's the stack the template below describes.

The Template

Copy this into your careers page and edit the bracketed parts. It's written for a mid-level hire; the levelling section further down says what to change for junior or senior.

job-description.md
72 lines
# Test Engineer, Manufacturing (Python)[Company] builds [product] for [market]. Every unit we ship goes throughfunctional and end-of-line test on stations we design and run ourselves.You'll own those stations.## What you'll do- Build and maintain the test stations for [product line]: the sequence,  the instrument drivers, the operator screens and the limits.- Talk to instruments over SCPI, serial and USB from Python (PyVISA), and  write the plug that wraps each one so the rest of the team can reuse it.- Turn product specs into measurements with limits, and review limit  changes with design and quality in a pull request.- Watch first pass yield per station and per phase in TofuPilot, find the  phases that fail good units or pass bad ones, and fix them.- Work with the fixture designer on pogo pin maps, relay matrices and  the mechanical side of connecting a DUT.- Write operator instructions into the sequence so a new operator can run  a station on their first day.- Keep every station in Git as text, so anyone on the team can read,  review and rebuild it.## Must haveYou should be able to do these on day one, in any language:- Read an instrument datasheet and get a measurement out of it over SCPI  or serial.- Write Python that handles a hardware timeout without crashing the run.- Explain what a control limit is, what Cpk means, and why a limit that's  too tight costs yield.- Use Git for day-to-day work: branch, commit, open a pull request,  review someone else's.- Debug on the floor with an operator watching.## Nice to have- Experience with any test sequencer (TestStand, OpenHTF, pytest-based,  in-house). We use the TofuPilot Framework and we'll teach it.- LabVIEW experience. Our older stations are LabVIEW and we're moving  them to Python; you'd help.- Fixture design, PCB bring-up, or firmware experience.- A regulated environment ([ISO 13485 / AS9100 / IATF 16949]).## The stack- Python 3, PyVISA for instruments- TofuPilot Framework: stations are a procedure.yaml plus phases and  plugs in Python, all in Git- TofuPilot for results: per-unit run history, FPY, Cpk, control charts- [Instrument list: Keysight DMMs, Rigol supplies, NI DAQ, ...]- [Fixture vendor], [ERP / MES if any]## Your first 90 days- Week 1: run every station as an operator, read every procedure.yaml,  ship one small limit change through a pull request.- Month 1: own one station end to end, including its operator screens  and its yield.- Month 2: build a new plug for an instrument we don't have a driver for,  and use it on a station.- Month 3: rebuild one LabVIEW station in Python and run it side by side  with the original for two weeks.## Practical- [Location / hybrid / on-site days], on the production floor [n] days a week- Reports to [test lead / engineering manager]- [Salary range], [benefits]- Interview: a 30-minute call, a short Python take-home with a mock  instrument, a 45-minute conversation about it

The "must have" section is the part to protect when someone edits this later. Each line is a task with a visible result. If a candidate can do all five, they can learn your sequencer in a week.

Typical Posting Line vs Rewrite

The left column is what most postings say. The right column says the same thing as work.

Typical LabVIEW posting lineRewrite
5+ years of LabVIEW developmentHas built and maintained production test stations, in any language
CLD or CLA certification preferredCan explain a station they built to someone who has never seen it
Expert in NI TestStand sequence developmentHas written a test sequence with phases, limits and pass/fail logic
Experience with NI DAQ and PXI hardwareHas taken measurements from instruments over SCPI, serial or a DAQ API
Proficient in TDMS data loggingMakes every run land somewhere the team can query it by serial number
Develops custom reports in LabVIEWReads FPY and Cpk per phase and acts on them
Familiar with NI Vision or NI MotionHas integrated a camera or a motion stage into a test, any vendor
Strong knowledge of the NI ecosystemReads a datasheet and gets the instrument talking in an afternoon

Notice that the right column is harder to fake. "5+ years of LabVIEW" is a line on a CV; "has built a station" is something the take-home in test engineer interview: a Python take-home checks in an hour.

Where to Post and What to Say About LabVIEW Candidates

Post where Python engineers read. Your own careers page first, then the general engineering boards, the Python and hardware community boards, and the career centres of the engineering schools nearest your plant.

Local hardware and maker meetups reach people who already like instruments. A referral bonus for anyone who has done PCB bring-up pulls better than a recruiter for this role.

Say explicitly that LabVIEW candidates are welcome. Add a line like: "If your experience is in LabVIEW or TestStand, apply. You know the work, and Python is the easier half of the move."

They do reskill fast. The domain knowledge (limits, fixtures, yield, operators) is the hard part and they already have it, and reskill a LabVIEW developer to Python is the plan for their first month.

Don't post the LabVIEW version of the job "just in case" alongside this one. It signals that the Python posting is the second choice. Run one posting.

For the skills to screen against, use Python skills checklist for test engineers, and for what happens after the offer, onboard a test engineer in one week.

Levelling and Salary Ranges

Typical 2026 ranges for the US and Western Europe, fully loaded costs excluded. They're wide because the role is priced very differently across industries and regions.

LevelWhat they ownUS, baseWestern Europe, base
Junior (0 to 2 years)One station, with review$70,000 to $95,000EUR 50,000 to 68,000
Mid (2 to 6 years)A line, including limits and yield$90,000 to $130,000EUR 65,000 to 92,000
Senior (6+ years)All stations, the fixture roadmap, the migration$120,000 to $165,000EUR 85,000 to 125,000

What moves a candidate within a range: regulated industry (medical, aerospace, automotive pay at the top), region (major US metros and Switzerland at the top), on-call or shift coverage, and fixture or firmware experience on top of the test work.

Two things to know when you set the number. A LabVIEW or TestStand developer of equal seniority typically costs well above these ranges, because the pool is small and skews senior. And the Python range buys you someone the rest of your engineering team can review and be reviewed by, which the LabVIEW premium doesn't.

For a junior hire, cut the "must have" list to the first three items and move Git to "we'll teach". For a senior hire, add "has migrated a line from one sequencer to another" and "has hired or mentored a test engineer" to the responsibilities.

Start With One Station

The posting is stronger when the first 90 days point at a real station. Before you publish, pick the one with the highest volume or the one only one person can open, rebuild it in Python with the TofuPilot Framework, and run it side by side with the LabVIEW version on the same units for two weeks. Then the new hire's month-3 milestone is a repeat of something your team has already done once.

install-and-run.sh
# Install the CLI, then run the station locally (no account needed) or with upload.curl -fsSL https://www.tofupilot.app/install | shtofupilot run ./procedure.yamltofupilot run ./procedure.yaml --upload

The rebuild is in how to migrate from LabVIEW to Python for manufacturing tests with TofuPilot, and the framework is at tofupilot.com/products/framework. The Lab tier is free, and tofupilot run works without an account.

More Guides

Put this guide into practice