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 :
| Fonction | Ce qu'elle fait |
|---|---|
| Séquencement | Exécute les étapes de test dans l'ordre avec branchements et boucles |
| Collecte des mesures | Enregistre les valeurs avec unités et limites |
| Décisions pass/fail | Compare les mesures aux limites, détermine le résultat |
| Interaction opérateur | Demande des saisies, affiche l'état |
| Journalisation des données | Stocke les résultats pour la traçabilité et l'analyse |
| Gestion des plugins/pilotes | Initialise 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 TestStand | OpenHTF | OpenTAP | pytest + plugins | HardPy |
|---|---|---|---|---|---|
| Langage | LabVIEW/C#/VB | Python | C#/.NET | Python | Python |
| Licence | Propriétaire (3-5 K$) | Apache 2.0 | MPL 2.0 | MIT | Apache 2.0 |
| Plateforme | Windows uniquement | Windows/Linux/macOS | Windows/Linux | Windows/Linux/macOS | Windows/Linux/macOS |
| Origine | National Instruments | Keysight | Communauté | EverPin | |
| Mesures avec limites | Oui | Oui | Oui | Via plugins | Oui |
| Séquencement des phases/étapes | Éditeur visuel | Décorateurs Python | Classes C# | Fonctions de test | Fonctions de test |
| Interface opérateur | OIs intégrées | Station Server | Operator Panel | Aucune intégrée | Panneau navigateur |
| Plugins instruments | Pilotes NI | Système de Plugs | Plugins DUT/Instrument | Fixtures | Fixtures |
| Export des données | ATML, personnalisé | JSON, protobuf | CSV, personnalisé | JUnit XML | JSON |
| Contrôle de version | Difficile (binaire) | Natif Git | Natif Git | Natif Git | Natif 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
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
[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
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
| Situation | Recommandation |
|---|---|
| Nouveau système de test en production en Python | OpenHTF + TofuPilot |
| Utilisation existante de pytest pour les tests matériels | Ajouter le SDK TofuPilot pour la journalisation et l'interface opérateur |
| Environnement .NET avec instruments Keysight | OpenTAP |
| Besoin du panneau opérateur le plus simple possible | HardPy |
| 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édiatement | OpenHTF avec Station Server intégré |
| Besoin d'analyses, traçabilité et interface opérateur | N'importe quel framework + TofuPilot |
Comparaison des coûts
| Solution | Licence logicielle | Coût par station | Interface opérateur | Analyses de données |
|---|---|---|---|---|
| NI TestStand | 3-5 K$/poste | 3-5 K$ | Incluse | NI InsightCM (en supplément) |
| OpenHTF + TofuPilot | Gratuit | 0 $ | Incluse (tous les niveaux) | Incluses |
| OpenTAP | Gratuit (noyau) | 0 $ | Plugin (licence potentiellement nécessaire) | Personnalisées |
| pytest + TofuPilot | Gratuit | 0 $ | Via TofuPilot | Incluses |
| HardPy | Gratuit | 0 $ | Incluse | Basiques |
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.