Migrating from Legacy Systems

Alternatives open source aux exécutifs de test

Comparaison des exécutifs de test open source pour la production : OpenHTF, OpenTAP, pytest et HardPy. Fonctionnalités, interface opérateur, coût et cas.

JJulien Buteau
intermediate10 min de lecture14 mars 2026

Alternatives open source aux exécutifs de test

NI TestStand coûte 3 000 à 5 000 $ par poste et fonctionne uniquement sous Windows. Les ingénieurs recherchent des alternatives open source qui fonctionnent sous Linux, s'intègrent avec Git et ne nécessitent pas de licences propriétaires. Ce guide compare les principaux exécutifs de test open source pour la production : OpenHTF, OpenTAP, pytest (avec des plugins matériels) et HardPy.

Ce que fait un exécutif de test

Un exécutif de test gère l'exécution des séquences de test. Il prend en charge :

FonctionCe qu'elle fait
SéquencementExécute les étapes de test dans l'ordre avec branchements et boucles
Collecte des mesuresEnregistre les valeurs avec unités et limites
Décisions pass/failCompare les mesures aux limites, détermine le résultat
Interaction opérateurDemande des saisies, affiche l'état
Journalisation des donnéesStocke les résultats pour la traçabilité et l'analyse
Gestion des plugins/pilotesInitialise et ferme les connexions aux instruments

TestStand fait tout cela dans une application Windows propriétaire. Les alternatives open source le font dans du code.

Tableau comparatif

FonctionnalitéNI TestStandOpenHTFOpenTAPpytest + pluginsHardPy
LangageLabVIEW/C#/VBPythonC#/.NETPythonPython
LicencePropriétaire (3-5 K$)Apache 2.0MPL 2.0MITApache 2.0
PlateformeWindows uniquementWindows/Linux/macOSWindows/LinuxWindows/Linux/macOSWindows/Linux/macOS
OrigineNational InstrumentsGoogleKeysightCommunautéEverPin
Mesures avec limitesOuiOuiOuiVia pluginsOui
Séquencement des phases/étapesÉditeur visuelDécorateurs PythonClasses C#Fonctions de testFonctions de test
Interface opérateurOIs intégréesStation ServerOperator PanelAucune intégréePanneau navigateur
Plugins instrumentsPilotes NISystème de PlugsPlugins DUT/InstrumentFixturesFixtures
Export des donnéesATML, personnaliséJSON, protobufCSV, personnaliséJUnit XMLJSON
Contrôle de versionDifficile (binaire)Natif GitNatif GitNatif GitNatif Git
CommunautéGrande (forums NI)Petite (GitHub)Petite (forum)Grande (pytest général)Très petite

OpenHTF

OpenHTF est le framework de test open source de Google pour la production. Il a été conçu pour tester l'électronique grand public à grande échelle.

Points forts

  • Natif Python. Les tests sont des fonctions Python décorées avec des mesures. Pas d'éditeur visuel, pas de XML, pas de fichiers binaires.
  • Système de Plugs. Les instruments sont injectés automatiquement dans les phases de test. Les Plugs gèrent l'initialisation et la fermeture.
  • Validateurs de mesures. Support intégré des plages, tolérances, regex et correspondance exacte.
  • Station Server. Interface opérateur web à localhost:12000.
  • Intégration TofuPilot. Interface opérateur complète, journalisation des données et analyses via le SDK TofuPilot.

Points faibles

  • Documentation. La documentation officielle de Google n'existe pas. La communauté (via openhtf.org) comble le manque.
  • Taille de la communauté. ~640 étoiles GitHub, faible présence sur Stack Overflow.
  • Interface intégrée. Le Station Server est fonctionnel mais basique. La plupart des déploiements en production utilisent TofuPilot pour l'interface opérateur.

Exemple

openhtf_example.py
import openhtf as htf
from openhtf.util import units


@htf.measures(
    htf.Measurement("voltage_V")
    .in_range(minimum=4.9, maximum=5.1)
    .with_units(units.VOLT),
)
def phase_voltage_check(test):
    """Mesurer et valider la tension d'alimentation."""
    test.measurements.voltage_V = 5.01


test = htf.Test(phase_voltage_check)
test.execute(test_start=lambda: input("Scanner le numéro de série : "))

OpenTAP

OpenTAP est le framework d'automatisation de test open source de Keysight. Il est écrit en C# et fonctionne sur .NET.

Points forts

  • Soutien de Keysight. Développement actif, support commercial disponible.
  • Écosystème de plugins. Plugins DUT, instrument et écouteurs de résultats.
  • Éditeur de plans de test. Interface graphique pour créer des séquences de test sans code.
  • Multi-plateforme. Fonctionne sous Windows et Linux via .NET.

Points faibles

  • C#/.NET. La plupart des ingénieurs de test préfèrent Python. .NET ajoute de la complexité de déploiement sous Linux.
  • Panneau opérateur. Basique, nécessite une licence Keysight Test Automation pour les fonctionnalités complètes.
  • Courbe d'apprentissage. L'architecture de plugins est puissante mais complexe pour des tests simples.

Exemple

OpenTapExample.cs
[Display("Voltage Check", Description = "Mesurer la tension d'alimentation")]
public class VoltageCheck : TestStep
{
    [Display("Voltage")]
    [Unit("V")]
    public double Voltage { get; set; }

    public override void Run()
    {
        Voltage = 5.01;
        if (Voltage < 4.9 || Voltage > 5.1)
            UpgradeVerdict(Verdict.Fail);
        else
            UpgradeVerdict(Verdict.Pass);
    }
}

pytest avec plugins matériels

pytest est le framework de test Python standard. Avec les bons plugins, il peut fonctionner pour les tests matériels.

Points forts

  • Communauté massive. La plupart des développeurs Python connaissent déjà pytest.
  • Système de fixtures. Gère proprement l'initialisation et la fermeture des instruments.
  • Écosystème de plugins. Des milliers de plugins pour le reporting, l'exécution parallèle et l'intégration CI.
  • Courbe d'apprentissage faible. Si vous connaissez Python, vous connaissez pytest.

Points faibles

  • Non conçu pour la production. Pas de système de mesures intégré avec limites, unités ou validateurs.
  • Pas d'interface opérateur. Pas d'invites, pas de saisie de numéro de série, pas d'affichage pass/fail.
  • Pas de journalisation native des données. Nécessite du code personnalisé ou des outils tiers pour stocker les résultats.
  • Conçu pour les tests logiciels. Les concepts comme les fixtures, marks et parametrize ne correspondent pas directement aux séquences de test matériel.

Exemple

test_hardware.py
def test_voltage_check(dmm_fixture):
    """Mesurer et valider la tension d'alimentation."""
    voltage = dmm_fixture.measure_voltage()
    assert 4.9 <= voltage <= 5.1, f"Tension {voltage}V hors plage"

HardPy

HardPy ajoute un panneau opérateur en navigateur à pytest pour les tests matériels.

Points forts

  • Natif pytest. Les tests sont des fonctions pytest classiques avec des ajouts spécifiques au matériel.
  • Interface navigateur. Panneau opérateur avec hiérarchie des tests, dialogues et graphiques en temps réel.
  • Stockage des mesures. Intégration CouchDB intégrée pour les résultats de test.
  • Stack moderne. Frontend React, API propre.

Points faibles

  • Projet récent. Adoption limitée, petite communauté.
  • Fonctionnalités basiques. Pas de système de limites de mesure, pas de bandes marginales, pas d'analyses.
  • Dépendance CouchDB. Ajoute de la complexité d'infrastructure.

Quand utiliser chacun

SituationRecommandation
Nouveau système de test en production en PythonOpenHTF + TofuPilot
Utilisation existante de pytest pour les tests matérielsAjouter le SDK TofuPilot pour la journalisation et l'interface opérateur
Environnement .NET avec instruments KeysightOpenTAP
Besoin du panneau opérateur le plus simple possibleHardPy
Migration depuis TestStand, changement minimal souhaitéOpenTAP (architecture la plus proche)
Migration depuis TestStand, Python souhaitéOpenHTF + TofuPilot
Budget zéro, besoin d'un système fonctionnel immédiatementOpenHTF avec Station Server intégré
Besoin d'analyses, traçabilité et interface opérateurN'importe quel framework + TofuPilot

Comparaison des coûts

SolutionLicence logicielleCoût par stationInterface opérateurAnalyses de données
NI TestStand3-5 K$/poste3-5 K$IncluseNI InsightCM (en supplément)
OpenHTF + TofuPilotGratuit0 $Incluse (tous les niveaux)Incluses
OpenTAPGratuit (noyau)0 $Plugin (licence potentiellement nécessaire)Personnalisées
pytest + TofuPilotGratuit0 $Via TofuPilotIncluses
HardPyGratuit0 $IncluseBasiques

Les alternatives open source éliminent les licences par poste. Le coût total de possession dépend du temps d'ingénierie pour la mise en place et la maintenance du système. Les intégrations prêtes à l'emploi (comme le support OpenHTF et pytest de TofuPilot) réduisent considérablement ce coût.

Plus de guides

Mettez ce guide en pratique