DEV Community

Cover image for Apidog vs Schemathesis : Tests fonctionnels et contractuels face au fuzzing basé sur les propriétés
Antoine Laurent
Antoine Laurent

Posted on • Originally published at apidog.com

Apidog vs Schemathesis : Tests fonctionnels et contractuels face au fuzzing basé sur les propriétés

Si vous comparez Apidog et Schemathesis, votre objectif est probablement de décider quoi intégrer dans votre pipeline CI. La réponse pratique : ne les mettez pas en concurrence directe. Schemathesis sert au fuzzing basé sur les propriétés à partir d’un schéma. Apidog sert à concevoir, documenter, simuler et exécuter des tests fonctionnels et de contrat maintenus par l’équipe. Pour situer ces outils dans une stratégie plus large, consultez le guide ultime des tests d'API et la documentation open-source de Schemathesis sur GitHub.

Essayez Apidog aujourd’hui

En bref

Schemathesis est un fuzzer basé sur les propriétés. Vous lui donnez un schéma OpenAPI ou GraphQL, puis il génère des requêtes pour vérifier que votre API respecte ce contrat. Il s’appuie sur Hypothesis, la bibliothèque Python de tests basés sur les propriétés.

Apidog est une plateforme API tout-en-un. Vous pouvez concevoir une API, écrire des tests fonctionnels et de contrat, exécuter des scénarios pilotés par des données CSV ou JSON, simuler des endpoints et lancer ces tests en CI/CD avec apidog run. Apidog couvre REST, gRPC, WebSocket, SSE, SOAP et GraphQL dans un même espace de travail.

En pratique :

  • utilisez Schemathesis pour découvrir des cas limites inconnus à partir du schéma ;
  • utilisez Apidog pour maintenir une suite de tests explicite, reproductible et lisible par l’équipe.

Ce que Schemathesis fait bien

Schemathesis lit votre schéma et l’utilise comme contrat. Il génère ensuite des entrées pour essayer de casser ce contrat.

Il détecte notamment :

  • des erreurs 500 déclenchées par des entrées inattendues ;
  • des réponses qui ne respectent pas le schéma documenté ;
  • des champs manquants, types incorrects ou propriétés non documentées ;
  • des validations trop permissives, par exemple une donnée invalide acceptée avec un 2xx.

Contrairement à un test fonctionnel classique, vous n’écrivez pas chaque cas de test à la main. Vous définissez des propriétés ou utilisez les vérifications intégrées, puis Schemathesis explore automatiquement l’espace d’entrée.

Exemple d’usage typique en CI :

schemathesis run openapi.yaml --base-url https://api.example.com
Enter fullscreen mode Exit fullscreen mode

Lorsqu’une erreur est trouvée, Schemathesis réduit l’entrée à un exemple minimal reproductible. C’est utile pour le débogage : au lieu d’analyser un payload énorme, vous obtenez la plus petite requête qui reproduit encore le bug.

Schemathesis peut aussi enchaîner des opérations, en utilisant les données d’une réponse pour alimenter une requête suivante. Cela permet de tester des séquences plus réalistes que des appels isolés.

Il peut s’exécuter via :

  • CLI ;
  • Docker ;
  • GitHub Action ;
  • pytest.

Il prend en charge OpenAPI 2.0, 3.0, 3.1 et GraphQL.

Sa limite principale : Schemathesis est un moteur de test, pas une plateforme de conception ou de collaboration. Il suppose que vous avez déjà un schéma fiable. Il ne remplace pas une interface visuelle, un outil de documentation, un mock server ou une suite de tests métier écrite explicitement.

Ce qu’Apidog fait bien

Apidog couvre les étapes autour du fuzzing : conception, tests fonctionnels, tests de contrat, simulation, documentation et CI/CD.

Avec Apidog, vous pouvez :

  • concevoir une API visuellement avec un éditeur basé sur OpenAPI ;
  • utiliser la spécification comme source de vérité ;
  • construire des tests fonctionnels avec assertions visuelles ;
  • organiser les tests en scénarios de test ;
  • transmettre des données entre étapes d’un scénario ;
  • exécuter des tests de contrat pour vérifier que l’API réelle respecte la spécification ;
  • lancer des tests pilotés par CSV ou JSON avec apidog run -d ;
  • simuler des endpoints avant que le backend soit disponible ;
  • intégrer les tests dans un pipeline via la commande apidog run ;
  • tester REST, gRPC, WebSocket, SSE, SOAP et GraphQL depuis le même outil.

Exemple de commande CI :

apidog run --access-token "$APIDOG_ACCESS_TOKEN" --project-id "$APIDOG_PROJECT_ID"
Enter fullscreen mode Exit fullscreen mode

Exemple avec données externes :

apidog run --access-token "$APIDOG_ACCESS_TOKEN" --project-id "$APIDOG_PROJECT_ID" -d ./test-data.csv
Enter fullscreen mode Exit fullscreen mode

L’intérêt d’Apidog n’est pas de faire du fuzzing basé sur les propriétés. Ce n’est pas son rôle. Son intérêt est de rendre les tests métier explicites, maintenables et partageables entre développeurs, QA, frontend et équipes produit.

Un point important : Apidog prend en charge le monkey testing, qui envoie des entrées aléatoires à une interface. Ce n’est pas équivalent au test basé sur les propriétés. Le monkey testing est aléatoire et moins structuré. Schemathesis génère ses entrées à partir des types et contraintes du schéma, puis vérifie des propriétés attendues.

Comparaison directe

Capacité Apidog Schemathesis
Rôle principal Tests fonctionnels et de contrat, conception, simulation, documentation Fuzzing basé sur les propriétés à partir d’un schéma
Création de tests Interface visuelle, assertions sans code, scénarios Tests générés automatiquement à partir du schéma, propriétés dans le code
Stratégie d’entrée Cas définis par l’équipe + données CSV/JSON Entrées générées sur l’espace défini par le schéma
Découverte de cas limites inconnus Limitée au monkey testing aléatoire Oui, c’est son objectif principal
Vérifications de contrat Oui, via tests de contrat Oui, via validation des réponses contre la spécification
Protocoles REST, gRPC, WebSocket, SSE, SOAP, GraphQL OpenAPI REST + GraphQL
Simulation Oui Non
Conception et documentation API Oui Non
CI/CD apidog run CLI, Docker, GitHub Action, pytest
Interface Application de bureau + CLI CLI / bibliothèque Python
Public cible Développeurs, QA, frontend, chefs de projet techniques, rédacteurs API Ingénieurs à l’aise avec Python et la ligne de commande

La séparation est simple : Apidog est large et orienté workflow API. Schemathesis est spécialisé et orienté fuzzing génératif.

Utiliser les deux dans un pipeline CI

Vous pouvez obtenir une meilleure couverture en combinant les deux outils autour du même schéma OpenAPI ou GraphQL.

1. Garder le schéma comme source de vérité

Le schéma doit rester le contrat partagé.

Dans Apidog :

  • concevez ou importez la spécification ;
  • documentez les endpoints ;
  • générez des scénarios fonctionnels ;
  • vérifiez que l’implémentation respecte le contrat.

Dans Schemathesis :

  • consommez la même spécification ;
  • générez des cas d’entrée ;
  • vérifiez les réponses ;
  • détectez les erreurs inattendues.

Si le schéma dérive de l’implémentation réelle, les deux outils perdent en précision. La qualité de la spécification est donc l’investissement commun.

2. Utiliser Apidog pour les tests déterministes

Placez les tests Apidog dans une étape bloquante du pipeline. Ce sont des tests que vous contrôlez et qui doivent rester stables.

Exemples de cas adaptés à Apidog :

  • création d’une commande valide ;
  • refus d’un token expiré ;
  • calcul correct d’un total ;
  • transfert d’un cart_id d’une étape à l’autre ;
  • vérification d’un code HTTP attendu ;
  • validation d’un champ obligatoire dans la réponse.

Exemple GitHub Actions simplifié :

name: API tests

on:
  pull_request:
  push:
    branches:
      - main

jobs:
  apidog-tests:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run Apidog tests
        run: |
          apidog run \
            --access-token "${{ secrets.APIDOG_ACCESS_TOKEN }}" \
            --project-id "${{ secrets.APIDOG_PROJECT_ID }}"
Enter fullscreen mode Exit fullscreen mode

3. Utiliser Schemathesis pour le fuzzing génératif

Placez Schemathesis dans une étape séparée. Selon votre tolérance au bruit et au temps d’exécution, vous pouvez l’exécuter :

  • à chaque pull request ;
  • seulement sur main ;
  • toutes les nuits ;
  • avant une release.

Exemple GitHub Actions :

name: Schemathesis fuzzing

on:
  schedule:
    - cron: "0 2 * * *"
  workflow_dispatch:

jobs:
  schemathesis:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run Schemathesis
        run: |
          pip install schemathesis
          schemathesis run openapi.yaml \
            --base-url https://api.example.com
Enter fullscreen mode Exit fullscreen mode

Cette séparation évite qu’une campagne de fuzzing plus longue ou plus bruyante bloque systématiquement les tests fonctionnels essentiels.

Répartition recommandée

Utilisez Apidog pour les tests que l’équipe doit lire, modifier et maintenir.

Exemples :

  • workflows métier ;
  • tests de régression ;
  • tests de contrat ;
  • scénarios multi-étapes ;
  • jeux de données CSV/JSON ;
  • mocks pour frontend ;
  • documentation API ;
  • tests multi-protocoles.

Utilisez Schemathesis pour les tests que la machine doit explorer.

Exemples :

  • valeurs limites ;
  • payloads inattendus ;
  • combinaisons difficiles à écrire à la main ;
  • erreurs 500 non anticipées ;
  • divergences entre réponse réelle et schéma ;
  • validation de robustesse.

En résumé :

Apidog       = suite délibérée + conception + contrat + simulation + CI
Schemathesis = fuzzing génératif + découverte de cas limites
Schéma       = contrat partagé entre les deux
Enter fullscreen mode Exit fullscreen mode

Foire aux questions

Apidog est-il une alternative à Schemathesis ?

Seulement en partie. Si vous voulez spécifiquement du fuzzing basé sur les propriétés à partir d’un schéma, Apidog ne remplace pas Schemathesis. Si vous voulez une plateforme pour concevoir, documenter, simuler et tester vos API, Apidog couvre une partie beaucoup plus large du cycle de vie.

L’approche la plus réaliste est de les utiliser ensemble. Pour le volet fonctionnel et contrat, consultez les tests de contrat dans Apidog.

Quelle est la différence entre tests fonctionnels et tests basés sur les propriétés ?

Un test fonctionnel vérifie un cas précis :

Étant donné un payload valide,
quand je crée une commande,
alors l’API renvoie 201 et un order_id.
Enter fullscreen mode Exit fullscreen mode

Un test basé sur les propriétés vérifie une règle générale sur de nombreuses entrées générées :

L’API ne doit jamais renvoyer 500.
Chaque réponse doit respecter le schéma déclaré.
Une donnée invalide ne doit pas produire un 2xx.
Enter fullscreen mode Exit fullscreen mode

Les tests fonctionnels valident les comportements attendus. Les tests basés sur les propriétés cherchent les comportements inattendus.

Apidog fait-il du fuzzing ?

Apidog propose du monkey testing, mais pas du fuzzing basé sur les propriétés. Le monkey testing envoie des entrées aléatoires. Schemathesis génère des entrées en fonction du schéma, vérifie des propriétés et réduit les échecs à des cas minimaux reproductibles.

Pour du fuzzing basé sur les propriétés, utilisez Schemathesis. Pour les tests fonctionnels, de contrat, pilotés par les données et multi-protocoles, utilisez Apidog.

Puis-je exécuter Apidog et Schemathesis dans le même pipeline ?

Oui. C’est même une bonne architecture.

Configuration recommandée :

  1. exécuter Apidog comme étape bloquante ;
  2. exécuter Schemathesis comme étape séparée ou nocturne ;
  3. utiliser le même schéma OpenAPI ou GraphQL pour les deux ;
  4. corriger en priorité les erreurs de contrat et les 500 découverts par Schemathesis ;
  5. transformer les bugs critiques trouvés par Schemathesis en tests de régression maintenus dans Apidog.

En résumé

Schemathesis est un fuzzer basé sur les propriétés. Il explore automatiquement votre schéma pour trouver des cas limites, des erreurs 500 et des divergences de contrat.

Apidog est la plateforme autour du cycle de vie API : conception visuelle, tests fonctionnels, tests de contrat, exécutions pilotées par les données, simulation, documentation, CI/CD et prise en charge de REST, gRPC, WebSocket, SSE, SOAP et GraphQL.

Ne choisissez pas l’un contre l’autre. Utilisez Apidog pour la suite maintenue par l’équipe et Schemathesis pour l’exploration générative.

Téléchargez Apidog pour construire votre couche de conception et de tests fonctionnels, gardez Schemathesis pour le fuzzing, et laissez le schéma partagé relier les deux. Vous pouvez aussi essayer Apidog gratuitement ; une fois vos tests prêts, l’intégration CI se résume à une commande apidog run.

Top comments (0)