Gherkin Generator

Publié le · Mis à jour le · 16 min

Wlad
Wlad
Fondateur & Tech Lead Swift

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ègleVé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 <placeholder> correspond à une colonne Examples

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 :

PresetDescription

.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 :

OutilLangageCompatibilité

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 .feature

  • Gherkin 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/await partout

  • Zero 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 .feature avec détection de langue automatique

  • ZIP/OOXML reader intégré — Import Excel natif via zlib, sans dépendance tierce

  • AsyncStream 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.

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

GitHub