The Printed Circuit Board Assembly (PCBA) process has multiple types of testing such as AOI, AOX, ICT, Smoke Testing, Black Box Testing, and Regression Testing. Functional Testing (FCT) powers the device and validates expected operations.

This article 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

This guide goes over each component in a turnkey functional test system. Automated test systems include a mechanical test fixture, test instrumentation, and test software. At the end of this post, 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 essential components.


Bed-of-Nails Test Fixture

A Functional Test System starts with a mechanical fixture (also known as a test jig) to hold the Device Under Test (DUT). They are also known as Bed of Nails test fixtures because of the pogo pins (also known as spring pins or test probes). There are many different manufacturers for these testers, with varying costs, durability, and even functionality.

FixturFab has found that Ingun test fixtures have an outstanding balance between cost and reliability. They have many base options for various DUT dimensions and expected production volumes. We also like their interchangeable cartridge system that makes it much easier for QA teams to test multiple board designs at scale. Cartridges are machined to fit each DUT and designed to be interchangeable.


Lower volume products can get away with much cheaper options. 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 needs to be customized to fit the DUT. Use CAD software, like Fusion360, 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 aligning mounting holes on the PCBA to guide pins on the fixture.


Test Instrumentation

Unlike software testing, hardware testing needs a set of Test Instrumentation and other various tools to control and measure the DUT. One popular method is to use a PXI chassis from National Instruments. They contain different modules specifically selected to execute the test plan.


They use a mass interconnect to connect the instrumentation to a test fixture. PXI systems work well, but they can be costly.

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


You can test the functionality of the application with cheaper devices like Arduinos and Raspberry Pis. However, using these lower-end tools requires extra care, such as adding over/under voltage and current protection. For a quick example, the quality of these hobby-level devices is lower and typically not rugged enough to satisfy mass production best practices.


These devices connect with a PCI-E connector, making it easy to implement a Test Point Carrier Board (TPCB) that interfaces the test instrumentation to the Test Probes that read nets on the DUT.

You can test the functionality of the application with cheaper devices like Arduinos and Raspberry Pis. However, using these lower-end tools requires extra care, such as adding over/under voltage and current protection. For a quick example, the quality of these hobby-level devices is lower and typically not rugged enough to satisfy mass production best practices.

Test Software

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


LabVIEW is a programming language that development teams use to write functional tests. National Instruments applications are relatively easy for users to use when working with PXI Instrumentation but are then harder to configure with other non-NI test instrumentation.

TestStand is the test runner application that controls test execution, log results, and other related features. 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 pretty expensive for both LabVIEW and TestStand and charged per seat. We find this to be incredibly expensive for users on a development team.

Acroname uses its BrainStem ecosystem to program MTM devices. This ecosystem enables consistent programming in C/C++, Python, and LabVIEW across Windows, OSX, and Linux. Having a consistent environment helps users a lot with applications across many different contexts.


C/C++ and Python are popular alternatives and can interact with practically any test instrumentation. MTM + BrainStem is a good choice if the 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. The following diagram shows a simplified development process.


First, write a Test Specification for the test jig to implement. It should include test coverage for all the functional requirements. Develop the specification by referencing the DUT's schematic and PCB layout. Remember, this type of testing is not Black Box testing! Next, define the various test cases to test the device.

While writing the test specification, select a mechanical test fixture and the instrumentation required to perform the tests. You should also know which programming language you'll use when selecting instrumentation for this tester.

A complete test specification contains

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

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

  1. 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.
  2. Design a Test Point Carrier Board (TPCB) 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.

Assemble the fixture after receiving all of the components. This process involves fabricating/machining the fixture cartridge, inserting all of the receptacles and test probes, and mounting the TPCB. After the fixture is assembled, develop the test software so you can test the application.

FixturFab's Approach

Most of FixturFab's turnkey test systems use the following components.


We prefer stock parts from Ingun for mechanical test fixtures. They ensure incredibly reliable testers. Our design platform generates the CAD files to customize the cartridge for the DUT, which significantly reduces the design time.

To speed up the fixture assembly process, we use the Acroname MTM system because they are cheaper and interchangeable. We occasionally add other off-the-shelf instrumentation to help test edge cases and different types of non-functional testing.

At a high level, hardware test cases are not that much different from software unit testing! To implement and run test specifications, we've developed a modified version of the Python unit test framework. Our framework includes a GUI built with pyside2. At FixturFab, we believe hardware unit testing should be as accessible as software unit testing.


In the next part of this series, we write a complete Functional Test Specification. It includes 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.