En bref
Un cas de test est un scénario de test unique qui vérifie un comportement ou une exigence spécifique, tandis qu'une suite de tests est une collection de cas de test liés regroupés pour une exécution organisée. Les cas de test définissent quoi tester et comment le tester. Les suites de tests organisent plusieurs cas de test en groupes logiques pour des flux de travail de test efficaces.
Introduction
Vous construisez une API. Vous écrivez votre premier test. Puis un autre. Bientôt, vous avez 50 tests dispersés dans différents fichiers. Lesquels testent l'authentification ? Lesquels s'exécutent avant le déploiement ? Comment n'exécuter que les tests critiques ?
Cette confusion survient lorsque les développeurs ne comprennent pas la différence entre les cas de test et les suites de tests. Une enquête de 2023 menée auprès de 1 200 développeurs a révélé que 67 % d'entre eux rencontrent des difficultés avec l'organisation des tests, ce qui entraîne des pipelines CI/CD plus lents et un débogage plus difficile. Ces deux concepts constituent le fondement d'une organisation de tests, mais ils sont souvent utilisés de manière interchangeable ou mal compris.
Comprendre la distinction vous aide à organiser les tests de manière logique, à les exécuter efficacement et à les maintenir à mesure que votre API évolue. Que vous testiez avec Apidog ou un autre outil, savoir quand créer un nouveau cas de test et quand regrouper des cas dans des suites rend votre flux de travail de test plus rapide et plus fiable.
Dans ce guide, vous apprendrez les différences exactes entre les cas de test et les suites de tests, verrez des exemples réels de tests d'API et découvrirez comment organiser les deux pour une efficacité maximale. À la fin, vous saurez exactement comment structurer vos tests d'API pour n'importe quelle taille de projet.
Qu'est-ce qu'un cas de test ?
Un cas de test est un scénario de test unique et spécifique qui vérifie un comportement ou une exigence de votre logiciel. Considérez-le comme une seule question que vous posez à votre code : "Est-ce que cela fonctionne correctement ?"

Chaque cas de test contient :
- ID du test : Identifiant unique (ex: TC_001)
- Description du test : Ce que vous testez
- Préconditions : Configuration requise avant le test
- Étapes du test : Actions à effectuer
- Résultat attendu : Ce qui devrait se passer
- Résultat réel : Ce qui s'est réellement passé
- Statut : Réussi ou Échoué
Anatomie d'un cas de test
Voici un cas de test simple pour un point de terminaison d'API :
Test Case ID: TC_AUTH_001
Titre : Vérifier la connexion utilisateur avec des identifiants valides
Préconditions : Le compte utilisateur existe dans la base de données
Étapes du test :
1. Envoyer une requête POST à /api/auth/login
2. Inclure un e-mail et un mot de passe valides dans le corps de la requête
3. Vérifier le code de statut de la réponse
4. Vérifier que le jeton JWT est renvoyé
Résultat attendu :
- Code de statut : 200
- La réponse contient un jeton JWT valide
- Le jeton expire en 24 heures
Résultat réel : [À remplir pendant l'exécution]
Statut : [Réussi/Échoué]
Les cas de test sont atomiques. Ils testent une chose et une seule. Si votre cas de test vérifie la connexion ET la mise à jour du profil, divisez-le en deux cas de test.
Exemple de cas de test dans le code
Voici à quoi ressemble le même cas de test en JavaScript utilisant Jest :
describe('Authentication API', () => {
test('TC_AUTH_001: should login user with valid credentials', async () => {
const response = await fetch('https://api.example.com/auth/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'user@example.com',
password: 'SecurePass123'
})
});
expect(response.status).toBe(200);
const data = await response.json();
expect(data.token).toBeDefined();
expect(data.expiresIn).toBe(86400); // 24 heures en secondes
});
});
Notez comment ce cas de test se concentre sur un seul scénario : la connexion réussie. Il ne teste pas la connexion échouée, la réinitialisation du mot de passe ou la déconnexion. Ceux-ci seraient des cas de test distincts.
Pourquoi les cas de test sont importants
Les cas de test vous offrent :
- Traçabilité : Mapper chaque test à une exigence spécifique
- Répétabilité : Exécuter le même test de manière cohérente
- Documentation : Les tests servent de documentation vivante
- Débogage : Identifier précisément ce qui a échoué lorsqu'un test échoue
Sans cas de test clairs, vous vous retrouvez avec des tests vagues qui vérifient plusieurs choses à la fois. Lorsqu'ils échouent, vous perdez du temps à déterminer quelle partie a échoué.
Qu'est-ce qu'une suite de tests ?
Une suite de tests est une collection de cas de test regroupés pour une exécution organisée. Si les cas de test sont des questions individuelles, une suite de tests est l'examen qui contient des questions liées.

Les suites de tests organisent les cas de test par :
- Fonctionnalité : Tous les tests pour l'authentification utilisateur
- Priorité : Tests critiques qui doivent passer avant le déploiement
- Type : Tests de fumée, tests de régression, tests d'intégration
- Environnement : Tests pour la mise en scène (staging) vs la production
- Temps d'exécution : Tests rapides vs tests lents
Structure d'une suite de tests
Voici comment les suites de tests organisent les cas de test :
Suite de tests : Module d'authentification
├── Cas de test 1 : Connexion avec des identifiants valides
├── Cas de test 2 : Connexion avec un mot de passe invalide
├── Cas de test 3 : Connexion avec un e-mail inexistant
├── Cas de test 4 : Connexion avec un jeton expiré
├── Cas de test 5 : Déconnexion réussie
└── Cas de test 6 : Actualiser le jeton d'accès
Suite de tests : Module de profil utilisateur
├── Cas de test 1 : Obtenir le profil utilisateur
├── Cas de test 2 : Mettre à jour les informations du profil
├── Cas de test 3 : Télécharger une photo de profil
└── Cas de test 4 : Supprimer le compte utilisateur
Chaque suite de tests contient plusieurs cas de test liés. Vous pouvez exécuter une suite entière à la fois ou choisir des cas de test individuels à exécuter.
Exemple de suite de tests dans le code
Voici à quoi ressemblent les suites de tests en JavaScript :
// Suite de tests d'authentification
describe('Authentication API Test Suite', () => {
test('TC_AUTH_001: Login with valid credentials', async () => {
// Implémentation du test
});
test('TC_AUTH_002: Login with invalid password', async () => {
// Implémentation du test
});
test('TC_AUTH_003: Login with non-existent email', async () => {
// Implémentation du test
});
test('TC_AUTH_004: Logout successfully', async () => {
// Implémentation du test
});
});
// Suite de tests de profil utilisateur
describe('User Profile API Test Suite', () => {
test('TC_PROFILE_001: Get user profile', async () => {
// Implémentation du test
});
test('TC_PROFILE_002: Update profile information', async () => {
// Implémentation du test
});
});
Les blocs describe() créent des suites de tests. Chaque test() à l'intérieur est un cas de test. Vous pouvez exécuter tous les tests d'authentification avec une seule commande ou exécuter le fichier de test entier.
Suites de tests imbriquées
Les suites de tests peuvent contenir d'autres suites de tests pour les projets complexes :
describe('API Test Suite', () => {
describe('Authentication', () => {
describe('Login', () => {
test('avec des identifiants valides', () => {});
test('avec un mot de passe invalide', () => {});
});
describe('Registration', () => {
test('avec des données valides', () => {});
test('avec un e-mail en double', () => {});
});
});
describe('User Management', () => {
test('obtenir la liste des utilisateurs', () => {});
test('mettre à jour le rôle de l'utilisateur', () => {});
});
});
Ceci crée une hiérarchie : Suite principale → Sous-suites → Cas de test. Cette structure reflète l'architecture de votre API.
Différences clés entre les suites de tests et les cas de test
Voici une comparaison claire :
| Aspect | Cas de test | Suite de tests |
|---|---|---|
| Définition | Scénario de test unique | Collection de cas de test |
| Portée | Teste un comportement spécifique | Teste plusieurs comportements liés |
| Granularité | Atomique (ne peut être décomposé) | Composite (contient plusieurs éléments) |
| Exécution | Exécute un seul test | Exécute plusieurs tests |
| Objectif | Vérifier une exigence | Organiser et regrouper les tests |
| Résultat | Réussi ou Échoué | Résumé de tous les résultats de test |
| Exemple | "Connexion avec des identifiants valides" | "Tests du module d'authentification" |
| Code | Une fonction test() ou it() |
Un bloc describe() ou suite() |
| Réutilisabilité | Peut être ajouté à plusieurs suites | Peut contenir des cas de test partagés |
| Maintenance | Mettre à jour un test | Mettre à jour plusieurs tests à la fois |
L'analogie du conteneur
Considérez les choses de cette façon :
- Cas de test = Un seul fichier sur votre ordinateur
- Suite de tests = Un dossier contenant des fichiers liés
Vous pouvez avoir des fichiers sans dossiers (cas de test sans suites), mais les dossiers aident à organiser les fichiers (les suites aident à organiser les cas de test). Vous pouvez également avoir des dossiers dans des dossiers (suites de tests imbriquées).
Différences d'exécution
Lorsque vous exécutez un cas de test :
# Exécuter un test spécifique
npm test -- --testNamePattern="Login with valid credentials"
Lorsque vous exécutez une suite de tests :
# Exécuter tous les tests de la suite d'authentification
npm test -- --testPathPattern="authentication"
Les suites de tests vous permettent d'exécuter des groupes de tests liés sans exécuter toute votre collection de tests.
Comment les suites de tests et les cas de test fonctionnent ensemble
Les cas de test et les suites de tests ne sont pas des concepts concurrents. Ils travaillent ensemble pour créer un code de test organisé et maintenable.
La relation
Projet
└── Suites de tests (Dossiers)
└── Cas de test (Fichiers)
└── Étapes de test (Code)
Chaque cas de test appartient à au moins une suite de tests. Un cas de test peut appartenir à plusieurs suites :
// smoke-tests.suite.js
describe('Smoke Tests', () => {
test('TC_SMOKE_001: API health check', () => {});
test('TC_SMOKE_002: Database connection', () => {});
test('TC_AUTH_001: Login with valid credentials', () => {}); // Partagé
});
// authentication.suite.js
describe('Authentication Tests', () => {
test('TC_AUTH_001: Login with valid credentials', () => {}); // Partagé
test('TC_AUTH_002: Login with invalid password', () => {});
test('TC_AUTH_003: Password reset flow', () => {});
});
Le cas de test TC_AUTH_001 apparaît à la fois dans la suite de tests de fumée et dans la suite de tests d'authentification. Cette réutilisabilité vous permet d'exécuter le même test dans différents contextes sans duplication.
Intégration au flux de travail
Voici comment ils fonctionnent dans un flux de travail de développement typique :
- Écrire des cas de test pour les nouvelles fonctionnalités
- Regrouper les cas de test en suites de tests logiques
- Exécuter des suites spécifiques pendant le développement (retour rapide)
- Exécuter toutes les suites avant le déploiement (vérification complète)
- Analyser les résultats des suites pour identifier les zones à problèmes
Stratégie d'exécution
Différentes situations nécessitent différentes stratégies d'exécution :
# Pendant le développement : Exécuter un cas de test
npm test -- --testNamePattern="TC_AUTH_001"
# Avant de commiter : Exécuter la suite de tests liée
npm test -- authentication.test.js
# En CI/CD : Exécuter toutes les suites de tests critiques
npm test -- --testPathPattern="(smoke|critical)"
# Avant la publication : Tout exécuter
npm test
Cette approche en couches permet de gagner du temps. Exécutez 5 tests de fumée en 10 secondes au lieu de 200 tests en 5 minutes pendant le développement. Gardez la suite complète pour la CI/CD.
Suite de tests vs cas de test dans les tests d'API
Les tests d'API ont des caractéristiques uniques qui affectent la façon dont vous organisez les cas de test et les suites de tests.
Structure d'un cas de test d'API
Les cas de test d'API vérifient généralement :
- Validation de la requête : Point de terminaison, méthode, en-têtes, corps corrects
- Validation de la réponse : Code de statut, corps de la réponse, en-têtes
- Validation des données : Format, valeurs, types de données corrects
- Gestion des erreurs : Messages et codes d'erreur appropriés
- Performance : Temps de réponse dans des limites acceptables
Voici un cas de test d'API complet :
test('TC_USER_001: Create new user via POST /api/users', async () => {
// Organiser
const newUser = {
name: 'John Doe',
email: 'john@example.com',
role: 'user'
};
// Agir
const response = await fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer test-token'
},
body: JSON.stringify(newUser)
});
const data = await response.json();
// Affirmer
expect(response.status).toBe(201);
expect(data.id).toBeDefined();
expect(data.name).toBe(newUser.name);
expect(data.email).toBe(newUser.email);
expect(data.createdAt).toBeDefined();
});
Ce cas de test vérifie une opération d'API : la création d'un utilisateur. Il ne teste pas la mise à jour, la suppression ou la liste des utilisateurs.
Organisation de la suite de tests d'API
Pour les API, organisez les suites de tests par :
1. Par point de terminaison
Suite de tests : /api/users
├── GET /api/users (lister les utilisateurs)
├── POST /api/users (créer un utilisateur)
├── GET /api/users/:id (obtenir un utilisateur)
├── PUT /api/users/:id (mettre à jour l'utilisateur)
└── DELETE /api/users/:id (supprimer l'utilisateur)
2. Par fonctionnalité
Suite de tests : Gestion des utilisateurs
├── Enregistrement de l'utilisateur
├── Authentification de l'utilisateur
├── Gestion du profil
└── Suppression du compte
3. Par type de test
Suite de tests : Tests de fumée
├── Vérification de l'état de l'API
├── Connectivité de la base de données
└── Les points de terminaison critiques répondent
Suite de tests : Tests d'intégration
├── Flux d'enregistrement utilisateur
├── Flux de traitement des commandes
└── Flux de traitement des paiements
Gestion des suites de tests Apidog
Apidog rend l'organisation des suites de tests d'API visuelle et intuitive. Au lieu d'écrire du code, vous construisez des cas de test dans une interface graphique et les regroupez en suites de tests par glisser-déposer. Cela réduit le temps de création des tests de 60 % par rapport aux approches basées sur le code.
Voici comment Apidog gère l'organisation des tests :
Cas de test dans Apidog :
Vous pouvez créer des cas de test de plusieurs manières :
Dans l'onglet Test Cases de la page des détails du point de terminaison, cliquez sur + Add Case pour en créer un manuellement.
Lorsque vous ajoutez un cas de test, vous pouvez choisir
- Import from Debug Cases pour copier ou déplacer les cas de débogage existants vers des cas de test.
- Copy : Utilisez ceci lorsque vous avez encore besoin du cas de débogage pour une validation rapide mais que vous le souhaitez également comme cas de test
- Move : Utilisez ceci lorsque le cas de débogage n'est plus fréquemment utilisé pour le débogage et qu'il a été principalement écrit pour tester les exceptions. Cela le convertit directement en cas de test, ce qui accélère la migration si les cas de test ont été initialement créés comme des cas de débogage.
Un cas de test contient les informations suivantes :
- Groupe : Organisé par objectif du test (positif, négatif, limite, etc.).
- Nom du cas : Le nom du cas de test.
- Paramètres de requête : Paramètres de chemin, de requête, d'en-tête et de corps de formulaire.
- Corps de la requête : Prend en charge RAW, JSON, XML, etc.
- Processeurs avant/après
- Validation de la réponse : Activer/désactiver la validation et spécifier les composants de réponse à valider.
Suites de tests dans Apidog :
- Lors de l'ouverture d'Apidog, naviguez vers le module
Tests, puis trouvezTest Suite.
- Cliquez sur le bouton
+ New(ou cliquez sur le menu...à côté du dossier et sélectionnezCreate Test Suite). - Remplissez le nom de la suite de tests dans la fenêtre contextuelle et définissez les informations de base, telles que la priorité.
- Cliquez sur
Continuepour créer avec succès et accéder à la page de conception de la suite de tests.
Avantages :
- Pas de codage requis pour les tests de base
- Organisation visuelle des tests
- Assertions et validations intégrées
- Génération automatique de rapports de test
- Intégration CI/CD pour des exécutions automatisées
Vous pouvez exporter les suites de tests Apidog vers du code si nécessaire, vous offrant une flexibilité entre les tests basés sur l'interface graphique et ceux basés sur le code.
Quand utiliser les cas de test vs les suites de tests
Savoir quand créer un nouveau cas de test et quand regrouper des cas dans des suites est crucial pour des tests maintenables.
Créez un nouveau cas de test lorsque :
- Vous testez une nouvelle exigence : Chaque exigence doit avoir au moins un cas de test
- Vous testez un scénario différent : Connexion valide vs connexion invalide = deux cas de test
- Vous testez des cas limites : Entrée vide, entrée maximale, caractères spéciaux
- Vous testez des conditions d'erreur : Erreurs 400, erreurs 500, scénarios de timeout
- Vous testez des données différentes : Différents rôles utilisateur, différentes autorisations
Créez une nouvelle suite de tests lorsque :
- Vous avez plus de 5 cas de test liés : Regroupez-les pour l'organisation
- Vous testez une fonctionnalité complète : Tous les tests d'authentification ensemble
- Vous créez une catégorie de test : Tests de fumée, tests de régression, tests de performance
- Vous organisez par priorité : Tests critiques, haute priorité, basse priorité
- Vous séparez par environnement : Tests de staging, tests de production
Anti-modèles à éviter
Ne faites pas ceci :
// MAUVAIS : Un cas de test géant testant tout
test('test user functionality', () => {
// Teste l'enregistrement, la connexion, la mise à jour du profil et la suppression
// Si cela échoue, quelle partie est en cause ?
});
Faites ceci à la place :
// BON : Cas de test séparés dans des suites organisées
describe('User Management Suite', () => {
test('TC_001: Register new user', () => {});
test('TC_002: Login with credentials', () => {});
test('TC_003: Update user profile', () => {});
});
describe('Content Management Suite', () => {
test('TC_004: Create new post', () => {});
test('TC_005: Delete post', () => {});
});
Ne faites pas ceci :
// MAUVAIS : Trop de suites imbriquées
describe('API', () => {
describe('V1', () => {
describe('Users', () => {
describe('Authentication', () => {
describe('Login', () => {
describe('Valid Credentials', () => {
test('with email', () => {});
});
});
});
});
});
});
Faites ceci à la place :
// BON : Imbrication raisonnable (2-3 niveaux max)
describe('API V1: User Authentication', () => {
describe('Login', () => {
test('avec des identifiants valides', () => {});
test('avec un mot de passe invalide', () => {});
});
describe('Registration', () => {
test('avec des données valides', () => {});
});
});
Bonnes pratiques pour organiser les cas de test et les suites de tests
Suivez ces stratégies éprouvées pour maintenir vos tests organisés et maintenables.
1. Utilisez des conventions de nommage claires
Cas de test :
// Bon : Descriptif et spécifique
test('should return 200 when user logs in with valid credentials', () => {});
test('should return 401 when password is incorrect', () => {});
test('should return 404 when user does not exist', () => {});
// Mauvais : Vague et peu clair
test('login test', () => {});
test('test 1', () => {});
test('check user', () => {});
Suites de tests :
// Bon : Portée et objectif clairs
describe('Authentication API - Login Endpoint', () => {});
describe('User Profile Management', () => {});
describe('Payment Processing Integration Tests', () => {});
// Mauvais : Trop générique
describe('Tests', () => {});
describe('API', () => {});
describe('Stuff', () => {});
2. Gardez les cas de test indépendants
Chaque cas de test doit s'exécuter indépendamment sans dépendre d'autres tests :
// MAUVAIS : Les tests dépendent les uns des autres
let userId;
test('create user', async () => {
const response = await createUser();
userId = response.id; // Stockage de l'état
});
test('update user', async () => {
await updateUser(userId); // Dépend du test précédent
});
// BON : Chaque test est indépendant
test('create user', async () => {
const response = await createUser();
expect(response.status).toBe(201);
await cleanup(response.id); // Nettoyage après le test
});
test('update user', async () => {
const user = await createUser(); // Créer ses propres données de test
const response = await updateUser(user.id);
expect(response.status).toBe(200);
await cleanup(user.id);
});
3. Organisez les suites par fonctionnalité ou module
Reflétez la structure de votre API dans l'organisation de vos tests :
src/
├── auth/
│ ├── login.js
│ └── register.js
├── users/
│ ├── profile.js
│ └── settings.js
└── posts/
├── create.js
└── delete.js
tests/
├── auth/
│ ├── login.test.js (Suite de tests)
│ └── register.test.js (Suite de tests)
├── users/
│ ├── profile.test.js (Suite de tests)
│ └── settings.test.js (Suite de tests)
└── posts/
├── create.test.js (Suite de tests)
└── delete.test.js (Suite de tests)
4. Utilisez des hooks de configuration et de démontage
Réduisez la duplication avec les hooks before/after :
describe('User API Test Suite', () => {
let authToken;
let testUser;
// S'exécute une fois avant tous les tests de cette suite
beforeAll(async () => {
authToken = await getAuthToken();
});
// S'exécute avant chaque cas de test
beforeEach(async () => {
testUser = await createTestUser();
});
// S'exécute après chaque cas de test
afterEach(async () => {
await deleteTestUser(testUser.id);
});
// S'exécute une fois après tous les tests de cette suite
afterAll(async () => {
await revokeAuthToken(authToken);
});
test('TC_001: Get user profile', async () => {
// testUser et authToken sont disponibles
});
test('TC_002: Update user profile', async () => {
// testUser et authToken sont disponibles
});
});
5. Étiquetez les tests pour une exécution flexible
Utilisez des balises ou des catégories pour exécuter des groupes de tests spécifiques :
describe('Authentication Suite', () => {
test('[smoke] API health check', () => {});
test('[critical] Login with valid credentials', () => {});
test('[regression] Login with expired token', () => {});
test('[edge-case] Login with special characters in password', () => {});
});
// Exécuter uniquement les tests de fumée
// npm test -- --testNamePattern="smoke"
// Exécuter les tests critiques
// npm test -- --testNamePattern="critical"
6. Maintenez une hiérarchie de suites de tests
Créez une hiérarchie claire pour les grands projets :
Niveau 1 : Type de test (Fumée, Intégration, E2E)
└── Niveau 2 : Module de fonctionnalité (Auth, Utilisateurs, Commandes)
└── Niveau 3 : Fonctionnalité spécifique (Connexion, Inscription)
└── Niveau 4 : Cas de test (Valides, Invalides, Cas limites)
Exemple :
describe('[Integration] User Management', () => {
describe('Authentication', () => {
describe('Login', () => {
test('avec des identifiants valides', () => {});
test('avec un mot de passe invalide', () => {});
test('avec un e-mail inexistant', () => {});
});
});
});
Erreurs courantes à éviter
1. Créer des cas de test trop généraux
Problème :
test('test user functionality', () => {
// Teste l'enregistrement, la connexion, la mise à jour du profil et la suppression
// Si cela échoue, quelle partie est en cause ?
});
Solution :
test('should register new user', () => {});
test('should login registered user', () => {});
test('should update user profile', () => {});
test('should delete user account', () => {});
2. Ne pas regrouper les cas de test liés
Problème :
test('login test 1', () => {});
test('profile test 1', () => {});
test('login test 2', () => {});
test('order test 1', () => {});
test('profile test 2', () => {});
Solution :
describe('Login Tests', () => {
test('test 1', () => {});
test('test 2', () => {});
});
describe('Profile Tests', () => {
test('test 1', () => {});
test('test 2', () => {});
});
3. Créer trop de suites imbriquées
Problème :
describe('API', () => {
describe('Version 1', () => {
describe('Users', () => {
describe('Profile', () => {
describe('Update', () => {
test('with valid data', () => {});
});
});
});
});
});
Solution :
describe('API V1: User Profile', () => {
test('should update profile with valid data', () => {});
});
4. Ignorer l'ordre d'exécution des tests
Problème :
describe('User Flow', () => {
test('delete user', () => {}); // S'exécute en premier
test('create user', () => {}); // S'exécute en deuxième
test('update user', () => {}); // S'exécute en troisième
});
Solution :
describe('User Flow', () => {
test('1. create user', () => {});
test('2. update user', () => {});
test('3. delete user', () => {});
});
// Ou utiliser beforeEach pour assurer une configuration correcte
5. Ne pas utiliser de noms descriptifs
Problème :
describe('Suite 1', () => {
test('test 1', () => {});
test('test 2', () => {});
});
Solution :
describe('Authentication API Tests', () => {
test('should return JWT token on successful login', () => {});
test('should return 401 on invalid credentials', () => {});
});
Exemples concrets
Exemple 1 : Organisation des tests d'API e-commerce
// Suite de tests de fumée - S'exécute à chaque commit
describe('[Smoke] Critical API Endpoints', () => {
test('TC_SMOKE_001: API health check returns 200', async () => {
const response = await fetch('https://api.shop.com/health');
expect(response.status).toBe(200);
});
test('TC_SMOKE_002: Database connection is active', async () => {
const response = await fetch('https://api.shop.com/db-status');
expect(response.json()).toHaveProperty('connected', true);
});
});
// Suite de tests d'authentification
describe('[Integration] Authentication Module', () => {
describe('User Registration', () => {
test('TC_AUTH_001: Register with valid email and password', async () => {
// Implémentation du test
});
test('TC_AUTH_002: Reject registration with duplicate email', async () => {
// Implémentation du test
});
test('TC_AUTH_003: Reject weak passwords', async () => {
// Implémentation du test
});
});
describe('User Login', () => {
test('TC_AUTH_004: Login with valid credentials', async () => {
// Implémentation du test
});
test('TC_AUTH_005: Reject invalid password', async () => {
// Implémentation du test
});
});
});
// Suite de tests de gestion des produits
describe('[Integration] Product Management', () => {
test('TC_PROD_001: Get product list', async () => {
// Implémentation du test
});
test('TC_PROD_002: Get product by ID', async () => {
// Implémentation du test
});
test('TC_PROD_003: Search products by name', async () => {
// Implémentation du test
});
test('TC_PROD_004: Filter products by category', async () => {
// Implémentation du test
});
});
// Suite de tests de traitement des commandes
describe('[Integration] Order Processing', () => {
test('TC_ORDER_001: Create order with valid items', async () => {
// Implémentation du test
});
test('TC_ORDER_002: Calculate correct order total', async () => {
// Implémentation du test
});
test('TC_ORDER_003: Apply discount code', async () => {
// Implémentation du test
});
test('TC_ORDER_004: Process payment', async () => {
// Implémentation du test
});
});
Exemple 2 : Structure de la suite de tests Apidog
Dans Apidog, vous organisez les tests visuellement :
📁 Tests d'API E-commerce
📁 Tests de fumée (Suite)
✓ Vérification de l'état de l'API (Cas de test)
✓ État de la base de données (Cas de test)
📁 Authentification (Suite)
📁 Enregistrement (Sous-suite)
✓ Enregistrement valide (Cas de test)
✓ E-mail en double (Cas de test)
✓ Mot de passe faible (Cas de test)
📁 Connexion (Sous-suite)
✓ Connexion valide (Cas de test)
✓ Mot de passe invalide (Cas de test)
📁 Produits (Suite)
✓ Lister les produits (Cas de test)
✓ Obtenir les détails du produit (Cas de test)
✓ Rechercher des produits (Cas de test)
📁 Commandes (Suite)
✓ Créer une commande (Cas de test)
✓ Calculer le total (Cas de test)
✓ Appliquer une réduction (Cas de test)
Chaque cas de test dans Apidog comprend :
- Configuration de la requête (URL, méthode, en-têtes, corps)
- Scripts de pré-requête (configuration)
- Assertions (validations)
- Scripts de post-réponse (nettoyage)
Vous pouvez exécuter des cas de test individuels, des suites entières ou créer des exécutions de tests personnalisées combinant des cas de plusieurs suites.
Conclusion
Les cas de test et les suites de tests servent des objectifs différents mais complémentaires dans les tests d'API. Les cas de test vérifient les comportements individuels avec des entrées spécifiques et des sorties attendues. Les suites de tests organisent les cas de test liés en groupes logiques pour une exécution et une maintenance efficaces.
Points clés à retenir :
- Les cas de test sont des tests atomiques pour des scénarios uniques
- Les suites de tests sont des collections de cas de test liés
- Utilisez les cas de test pour vérifier des exigences spécifiques
- Utilisez les suites de tests pour organiser et exécuter des groupes de tests
- Gardez les cas de test indépendants et ciblés
- Organisez les suites par fonctionnalité, priorité ou type de test
- Nommez les deux clairement et de manière descriptive
- Utilisez des outils comme Apidog pour gérer les hiérarchies de tests complexes visuellement
Prêt à organiser vos tests d'API ? Essayez la gestion visuelle des suites de tests d'Apidog - créez, organisez et exécutez des cas de test sans écrire de code. Réduisez votre temps de configuration de tests de 60 % et lancez votre première suite de tests en moins de 5 minutes.
FAQ
Quelle est la principale différence entre un cas de test et une suite de tests ?
Un cas de test est un test unique qui vérifie un comportement ou une exigence spécifique. Une suite de tests est une collection de plusieurs cas de test liés regroupés pour une exécution organisée. Pensez aux cas de test comme à des questions individuelles et aux suites de tests comme à l'examen contenant ces questions.
Un cas de test peut-il appartenir à plusieurs suites de tests ?
Oui. Un seul cas de test peut être inclus dans plusieurs suites de tests. Par exemple, un cas de test de connexion critique pourrait apparaître à la fois dans votre suite "Tests de fumée" et dans votre suite "Tests d'authentification". Cette réutilisabilité vous aide à exécuter différentes combinaisons de tests à des fins différentes.
Combien de cas de test devrait contenir une suite de tests ?
Il n'y a pas de règle stricte, mais 5 à 15 cas de test par suite est une bonne fourchette. Si vous avez plus de 20 cas de test dans une seule suite, envisagez de la diviser en suites plus petites et plus ciblées. Si vous en avez moins de 5, vous pourriez ne pas avoir besoin d'une suite du tout.
Dois-je écrire les cas de test ou les suites de tests en premier ?
Écrivez d'abord les cas de test. Commencez par créer des tests individuels pour des comportements spécifiques. Une fois que vous avez plusieurs cas de test liés, regroupez-les en suites de tests. Cette approche ascendante garantit que vos cas de test sont ciblés et que vos suites sont organisées logiquement.
Quelle est la différence entre une suite de tests et un scénario de test ?
Un scénario de test est une description de haut niveau de ce qu'il faut tester (par exemple, "Flux de connexion utilisateur"). Une suite de tests est la collection réelle de cas de test exécutables. Un scénario de test pourrait devenir une suite de tests contenant plusieurs cas de test qui vérifient différents aspects de ce scénario.
Comment organiser les suites de tests pour les grandes API ?
Utilisez une structure hiérarchique : organisez par fonctionnalité ou module au niveau supérieur, puis par fonctionnalité, puis par type de test. Par exemple : "Gestion des utilisateurs" (module) → "Authentification" (fonctionnalité) → "Tests de connexion" (suite de tests) → cas de test individuels. Maintenez l'imbrication à 2-3 niveaux maximum.
Les suites de tests peuvent-elles contenir d'autres suites de tests ?
Oui. Les suites de tests peuvent être imbriquées pour créer des hiérarchies. Par exemple, une suite "Tests d'API" pourrait contenir des sous-suites "Tests d'authentification" et "Tests de gestion des utilisateurs". Cependant, évitez une imbrication excessive (plus de 3 niveaux) car cela rend les tests plus difficiles à naviguer et à maintenir.
Quels outils aident à gérer les cas de test et les suites de tests ?
Les outils populaires incluent Jest et Mocha pour JavaScript, Pytest pour Python, JUnit pour Java et Postman pour les tests d'API. Apidog offre une gestion visuelle des suites de tests sans codage, ce qui facilite l'organisation et l'exécution des cas de test d'API via une interface graphique.
