Gherkin Generator
Publié le · Mis à jour le · 16 min
Le problème des specs manuelles
Gherkin est un standard puissant pour le BDD (Behavior-Driven Development). Les fichiers .feature décrivent le comportement attendu en langage naturel : Given, When, Then. Lisibles par tous — product owners, QA, développeurs.
Mais écrire ces specs à la main devient vite pénible :
Répétitif — Les mêmes structures, encore et encore
Error-prone — Une faute de frappe et le test ne matche plus
Pas de validation — Rien ne vérifie la cohérence avant l'exécution
Maintenance lourde — Synchroniser specs et code, c'est du boulot
Génération de masse impossible — Comment créer 500 scénarios de tests de charge ?
Pas d'import — Vos tests existent en CSV ou Excel, mais impossible de les convertir
Et si on pouvait tout faire programmatiquement ?
La solution : swift-gherkin-generator
Gherkin Generator est une bibliothèque Swift complète pour le cycle de vie des fichiers .feature. Au lieu d'écrire du Gherkin à la main, vous le construisez en code — avec validation, autocomplétion, et toute la puissance de Swift.
Résultat : un objet Feature immutable, validé, prêt à être exporté en .feature, JSON ou Markdown.
Ce n'est plus juste un générateur. C'est un toolkit complet : builder, parser, validateur, formateur, exporteur, importeur, streaming, batch processing, et CLI.
API fluide et expressive
L'API est conçue pour refléter la structure naturelle de Gherkin. Chaque méthode retourne une nouvelle copie — tout est immutable et Sendable.
Scénarios avec continuations
Chaînez les steps And et But après n'importe quel step primaire :
Backgrounds partagés
Définissez des préconditions communes exécutées avant chaque scénario. Le closure reçoit un BackgroundBuilder :
Scenario Outlines avec Examples
Utilisez addOutline pour les scénarios paramétrés. Les placeholders entre chevrons (<email>) sont substitués depuis la table d'exemples :
Les blocs d'exemples nommés et taggés sont aussi supportés via .examples(_:name:tags:).
Data Tables
Attachez une table de données à n'importe quel step. La première ligne est le header :
Doc Strings
Attachez du texte multi-ligne avec un type de média optionnel :
Tags et organisation
Appliquez des tags au niveau feature avec .tags() et au niveau scénario avec .scenarioTags(). Les tags servent au filtrage, à la catégorisation et au ciblage des hooks :
Rules (Gherkin 6+)
Groupez des scénarios sous des règles métier nommées pour structurer les features complexes :
Génération de masse
Le vrai pouvoir : générer des centaines de scénarios programmatiquement. L'API immutable s'utilise avec var et réassignation :
Pour une approche mutating, utilisez appendScenario(_:) ou appendOutline(_:).
Validation intégrée
Avant l'export, validez vos features contre 5 règles built-in. Le validateur remonte toutes les erreurs trouvées, pas seulement la première :
Les 5 règles built-in
| Règle | Vérifie |
|---|---|
StructureRule | Chaque scénario a au moins un Given et un Then |
CoherenceRule | Pas de steps dupliqués consécutifs |
TagFormatRule | Tags non-vides et sans espaces |
TableConsistencyRule | Colonnes cohérentes, pas de cellules vides |
OutlinePlaceholderRule | Chaque |
Règles personnalisées
Conformez-vous au protocole ValidationRule pour ajouter vos propres vérifications. Les règles sont composables :
Validation par lot
BatchValidator est un actor qui parse et valide tous les fichiers .feature d'un répertoire en parallèle :
streamValidation(at:) fournit un AsyncStream pour le reporting progressif.
Multi-format : import et export
Parsing de fichiers .feature
GherkinParser utilise un recursive descent parser. Il détecte automatiquement la langue depuis un header # language: ou se rabat sur l'anglais :
Parse aussi directement depuis une chaîne Gherkin :
Import CSV
Mappez les colonnes CSV vers les types de steps Gherkin via CSVImportConfiguration. Chaque ligne devient un scénario :
Délimiteur personnalisé et colonne de tags optionnelle supportés.
Import JSON (round-trip)
JSONFeatureParser décode le JSON produit par GherkinExporter, garantissant un aller-retour parfait — exporter en JSON puis réimporter produit un Feature identique :
Import plain text
Parsez du texte informel en scénarios. Les lignes commençant par Given/When/Then deviennent des steps, --- sépare les scénarios :
Tous les préfixes et le séparateur sont configurables via PlainTextImportConfiguration.
Import Excel (.xlsx)
ExcelParser lit les fichiers .xlsx nativement grâce à un lecteur ZIP/OOXML intégré — aucune dépendance tierce. Cross-platform : macOS, iOS, Linux via la librairie système zlib.
Le paramètre tagColumn mappe une colonne vers des tags par scénario (séparés par espaces ou virgules). Le paramètre sheetIndex sélectionne le worksheet à lire.
Import par lot
BatchImporter est un actor qui scanne un répertoire de fichiers .feature et les parse en parallèle :
streamDirectory(at:) fournit un AsyncStream pour le traitement progressif.
Export multi-format
GherkinExporter écrit une feature au format de votre choix — .feature, JSON ou Markdown :
Render en mémoire sans écrire sur disque :
Formatage
GherkinFormatter convertit un Feature en Gherkin proprement indenté avec des tables alignées. Trois presets disponibles :
| Preset | Description |
|---|---|
.default | Indentation 2 espaces, espacement standard |
.compact | Whitespace minimal |
.tabs | Indentation par tabulations |
Streaming et batch processing
Pour les gros volumes, la lib fournit des actors dédiés avec des patterns AsyncStream.
Streaming export
StreamingExporter est un actor qui écrit les features ligne par ligne, sans charger tout en mémoire. Adapté aux features avec des centaines de scénarios :
Obtenez un AsyncStream<String> de lignes formatées pour un traitement custom :
Suivez la progression de l'export :
Batch export
BatchExporter est un actor qui exporte plusieurs features vers des fichiers individuels dans un répertoire cible. Les fichiers sont écrits en parallèle via TaskGroup. Les titres sont automatiquement slugifiés en noms de fichiers, et les doublons reçoivent des suffixes numériques (login.feature, login-1.feature, login-2.feature) :
Suivez la progression avec exportAllWithProgress :
Multi-langue natif
Gherkin supporte plus de 70 langues. Gherkin Generator aussi — avec les keywords officiels du gherkin-languages.json de Cucumber.
15 langues courantes ont des raccourcis statiques : .english, .french, .german, .spanish, .italian, .portuguese, .japanese, .chinese, .russian, .arabic, .korean, .dutch, .polish, .turkish, .swedish.
Accédez à n'importe quelle langue par code ISO ou listez toutes les langues disponibles :
Le parser détecte automatiquement les directives # language: et le formateur produit la sortie avec les bons mots-clés localisés.
CLI inclus
gherkin-gen est un outil en ligne de commande avec 7 sous-commandes pour composer, valider et convertir des fichiers .feature directement depuis le terminal.
Installation
generate — Générer un .feature
Les options --given, --when, --then, et --tag sont répétables. --language pour les features non-anglaises (défaut : en).
validate — Valider des fichiers
--strict active toutes les règles par défaut. --quiet supprime les messages de succès.
parse — Analyser la structure
export — Convertir le format
batch-export — Export par lot
convert — Importer depuis CSV/JSON/TXT/Excel
Colonnes personnalisables avec --scenario-column, --given-column, --when-column, --then-column, --tag-column. Délimiteur CSV avec --delimiter.
languages — Explorer les langues
Installation
Swift Package Manager
Prérequis
Swift 6.2+ avec strict concurrency
Xcode 26+ ou toolchain Swift compatible
Plateformes : iOS 17+ · macOS 14+ · tvOS 17+ · watchOS 10+ · visionOS 1+ · Mac Catalyst 17+ · Linux
Intégrations
Les fichiers .feature générés sont compatibles avec tous les outils Gherkin :
| Outil | Langage | Compatibilité |
|---|---|---|
Cucumber | Ruby, Java, JS | Natif |
SpecFlow | .NET | Natif |
Behave | Python | Natif |
XCTest-Gherkin | Swift | Natif |
Gherkin Testing | Swift | Écosystème Atelier Socle |
Écosystème Gherkin Atelier Socle
Gherkin Generator fait partie d'un ensemble d'outils complémentaires pour un workflow BDD complet en Swift :
Gherkin Generator (cette lib) — Composer, valider, importer et exporter des
.featureGherkin Testing — Exécuter des tests BDD natifs avec Swift Macros (
@Feature,@Given,@When,@Then)
Deux outils complémentaires : l'un génère les specs, l'autre les exécute.
Sous le capot
Swift 6.2 strict concurrency — Tous les types publics sont
Sendable, actors pour l'état partagé,async/awaitpartoutZero dependencies — Que du Swift standard (seul swift-argument-parser pour le CLI)
Cross-platform — macOS, iOS, tvOS, watchOS, visionOS, Mac Catalyst, Linux
Recursive descent parser — Parse complet des fichiers
.featureavec détection de langue automatiqueZIP/OOXML reader intégré — Import Excel natif via
zlib, sans dépendance tierceAsyncStream patterns — Streaming export, batch import et validation pour les gros volumes
467 tests — 96%+ de couverture, 6 suites de tests end-to-end showcase
DocC catalog — Documentation complète avec 8 articles et 6 extensions de symboles
CI/CD — GitHub Actions (lint, build, test, coverage, 5 plateformes), release automatisée avec binaires macOS et Linux
Liens
GitHub - atelier-socle/swift-gherkin-generator: A Swift library for composing, validating, importing, and exporting Gherkin .feature files programmatically.
A Swift library for composing, validating, importing, and exporting Gherkin .feature files programmatically. - atelier-socle/swift-gherkin-generator