The Printed Circuit Board Assembly (PCBA) process has multiple testing stages, each with its specific implementations and goals. Functional Testing (FCT) powers the device and validates expected operations.

This is part 2 in a series that covers PCBA functional testing. Part 1 covered general PCBA testing procedures. Part 2 will dive into the details of Functional Test Systems which implement Functional Testing.

PCBA Functional Testing series

  • PCBA Testing Overview
  • Functional Test System Overview
  • Writing a Functional Test Specification
  • Test Software Development

This guide goes over each component in a turn-key functional test system. This includes the mechanical test fixture, test instrumentation, and test software. Then we’ll go over the design process and FixturFab’s approach.

Functional Test System Components

There are various methods for implementing a functional test system, but they all consist of the same basic components.


Bed-of-Nails Test Fixture

A functional test system starts with a mechanical fixture to hold the Device Under Test (DUT). This is commonly referenced as a Bed-of-Nails test fixture, which just means it uses pogo-pins. There are many different manufacturers for these fixtures, with varying costs and durability.

FixturFab has found that Ingun test fixtures have a great balance between cost and reliability. They have many fixture base options for various DUT dimensions and expected production volumes. We also like their interchangeable cartridge system. The cartridge is machined to fit each DUT and is designed to be quickly interchanged in each base.


Lower volume products can get away with much cheaper options though. It is common to see Bakelite test fixtures that are available from various vendors overseas. Typically, the whole fixture is specific to each DUT because the probe plate is not interchangeable.


After choosing a test fixture, it will need to be customized for the DUT. This typically consists of using CAD to design a model that matches test points on the DUT to holes for pogo-pins on the fixture. You’ll also need a way to mount the DUT, typically done by matching mounting holes on the PCBA to guide pins on the fixture.


Test Instrumentation

Test Instrumentation refers to the various instruments and devices that will be used to interact with the DUT and make measurements. A common method is to use a PXI chassis from National Instruments, which can be configured with various modules depending on what needs to be tested.


To connect the instrumentation to a test fixture, a mass interconnect is used. Using a PXI system is great, however, it can be very expensive to implement.

A lower-cost industrial system is available from Acroname called Manufacturing Test Modules or MTM.


The various MTM modules interface using a PCI-E connector, which enables you to design a test point carrier board (TPCB) which interfaces the Acroname instrumentation with the Test Probes that connect to the test points on the DUT.


Arduino, Raspberry Pi, and similar devices can also be used to implement functional tests. If this method is chosen, extra care should be taken to add over/under voltage and over current protection.

Test Software

The most common software for developing and running Functional Tests is National Instruments LabVIEW and TestStand.


LabVIEW is a programming language that developers use to write functional tests. It is fairly easy to use when PXI Instrumentation is being used to interact with the DUT, but is harder to configure with other test instrumentation. TestStand is a test runner that controls test execution, log results, and such. LabVIEW + TestStand is a good choice if the test developer isn’t familiar with programming languages like Python and prefers a graphical approach. However, licenses are fairly expensive for both LabVIEW and TestStand and charged per seat.

Acroname uses its BrainStem ecosystem to program their MTM devices. At a high level, this was designed to allow consistent programming in C/C++, Python, and LabVIEW across Windows, OSX, and Linux.


C/C++ and Python are very common programming languages that can interact with practically any test instrumentation. MTM + BrainStem is a good choice if your developers are familiar with languages like C/C++ and Python. These are both free and Acroname devices are much more affordable than NationalInstruments.

There are also several open-source test frameworks for implementing functional tests, including OpenHTF, and exclave.

Design Process

Developing a Functional Test System is a multidisciplinary engineering project and has many parallels with the product development process. A simplified development process is shown below.


A Test Specification is first written for the system. This specification is developed by referencing the DUT’s schematic and PCB layout. The various test cases can then be defined for the device.

While writing the test specification select a mechanical test fixture and the instrumentation that will be used to perform the testing. The choice of instrumentation also requires an idea of what programming language or tools will be used to execute the test cases.

A complete test specification contains

  • A list of test cases and their expected results or limits.
  • Test points used for each test case.
  • Instrumentation connections (device input/output) for each test case.

After completing the test specification, the fixture design process can begin.

  • Design the mechanical fixture to have test probes in the correct locations to interface with the test points on the DUT. The mechanical fixture will also have guide pins to locate the DUT within the fixture and pressure pins to push the DUT against the test probes when the fixture is closed.
  • The Test Point Carrier Board (TPCB) is designed to interface the test probes in the fixture with the test instrumentation.

Once the mechanical and electrical design of the system is complete, fabricate both the mechanical fixture and TPCB.

After all of the components for the fixture have been received, the fixture can be assembled. This process involves assembling the fixture cartridge, inserting all of the receptacles and test probes, and attaching the TPCB. Once the fixture is completely assembled, then the test software can be developed.

FixturFab’s Approach

Our approach has been standardized to use the following components in most of our turn-key fixtures.


FixturFab uses Ingun for our mechanical test fixtures. Our automated PCBA test fixture design service generates the CAD files to customize the cartridge for the DUT. This significantly reduces the design time.

To speed up the fixture assembly process, we use the Acroname MTM system because they are cheaper and interchangeable. Special cases are handled as they come up when Acroname instrumentation isn’t available.

FixturFab developed a modified version of the Python unit test framework that we use to write all of the functional tests. This is then shown using a GUI that was built using pyside2.


In the next part of this series, we write a complete Functional Test Specification. This will be a deep dive into the schematic and board layout files and how to use them to identify the required nets for your test cases and selecting instrumentation to execute one.