Aller au contenu principal

Tests d'API avec Postman

Theorie 45 min

Qu'est-ce que Postman ?

Postman est une plateforme collaborative de developpement d'API qui permet de concevoir, tester et documenter des API via une interface visuelle. Pour les ingenieurs IA/ML, c'est le moyen le plus rapide de tester l'API de votre modele sans ecrire de code.

L'analogie de la salle de controle

Imaginez Postman comme une salle de controle de mission pour votre API :

  • Vous pouvez envoyer tout type de signal (GET, POST, PUT, DELETE) a votre API
  • Vous pouvez surveiller la reponse en temps reel (code de statut, corps, en-tetes, duree)
  • Vous pouvez automatiser des sequences de signaux (collection runner)
  • Vous pouvez partager votre tableau de bord avec votre equipe (export de collections)

Postman vs autres outils de test

FonctionnalitePostmancurlhttpx (Python)Thunder Client (VS Code)
Interface visuelle✅ GUI complete❌ CLI uniquement❌ Code uniquement✅ Dans VS Code
Scripts de test✅ JavaScript❌ Verification manuelle✅ Assertions Python⚠️ Limite
Environnements✅ Multiples❌ Manuel✅ Gere par code✅ Basique
Collections✅ Dossiers organises❌ Scripts shell✅ Classes de test⚠️ Basique
Collaboration✅ Espaces de travail equipe❌ Aucune✅ Via Git❌ Aucune
Integration CI/CD✅ Newman CLI✅ Natif✅ pytest❌ Aucune
Courbe d'apprentissage🟢 Faible🟡 Moyenne🟡 Moyenne🟢 Faible
Ideal pourTests manuels + automatisesTests rapides ponctuelsTests programmatiquesTests rapides dans VS Code
Quand utiliser quoi
  • Postman : Exploration interactive, partage en equipe, tests manuels avec capacites d'automatisation
  • curl : Tests rapides en une ligne dans le terminal, scripts CI
  • httpx/TestClient : Tests programmatiques dans pytest, pipelines CI/CD
  • Thunder Client : Verifications rapides sans quitter VS Code

Demarrer avec Postman

Installation

  1. Telechargez sur postman.com/downloads
  2. Installez et creez un compte gratuit
  3. Ouvrez Postman — vous verrez l'espace de travail principal

Apercu de l'interface Postman


Creation de requetes

Requete de verification de sante (GET)

  1. Cliquez sur NewHTTP Request
  2. Definissez la methode sur GET
  3. Saisissez l'URL : http://localhost:8000/health
  4. Cliquez sur Send

Reponse attendue :

{
"status": "healthy",
"model_loaded": true,
"model_version": "1.0.0",
"timestamp": "2025-01-15T10:30:00Z"
}

Requete de prediction (POST)

  1. Definissez la methode sur POST
  2. Saisissez l'URL : http://localhost:8000/api/v1/predict
  3. Allez dans l'onglet Body → selectionnez raw → definissez le type sur JSON
  4. Saisissez le corps :
{
"features": [5.1, 3.5, 1.4, 0.2, 2.3]
}
  1. Cliquez sur Send

Reponse attendue :

{
"prediction": 1,
"confidence": 0.87,
"model_version": "1.0.0"
}

Requete de prediction par lot (POST)

{
"instances": [
{"features": [5.1, 3.5, 1.4, 0.2, 2.3]},
{"features": [6.7, 3.0, 5.2, 2.3, 1.1]},
{"features": [4.9, 2.4, 3.3, 1.0, 0.5]}
]
}

Environnements et variables

Les environnements permettent de basculer entre local, staging et production sans modifier vos requetes.

Configuration des environnements

  1. Cliquez sur l'onglet Environments dans la barre laterale
  2. Creez un nouvel environnement nomme Local
  3. Ajoutez les variables :
VariableValeur initialeValeur actuelle
base_urlhttp://localhost:8000http://localhost:8000
api_versionv1v1
auth_tokentest-token-123test-token-123
  1. Creez un autre environnement nomme Staging :
VariableValeur initialeValeur actuelle
base_urlhttps://staging-api.example.comhttps://staging-api.example.com
api_versionv1v1
auth_tokenstaging-token-456staging-token-456

Utilisation des variables dans les requetes

Remplacez les URL en dur par des variables en utilisant des accolades doubles :

GET {{base_url}}/health
POST {{base_url}}/api/{{api_version}}/predict

En-tetes avec variables :

Authorization: Bearer {{auth_token}}
Portee des variables

Postman dispose de 5 portees de variables (de la plus large a la plus etroite) :

  1. Global — disponible partout
  2. Collection — disponible dans une collection
  3. Environment — disponible lorsque l'environnement est selectionne
  4. Data — depuis des fichiers CSV/JSON lors des executions de collection
  5. Local — definie dans les scripts, disponible uniquement pendant l'execution

ecriture de scripts de test

Postman utilise JavaScript pour les scripts de test. Les tests s'executent apres la reception de la reponse.

Assertions de test de base

Allez dans l'onglet ScriptsPost-response et ecrivez :

// Test 1: Status code is 200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});

// Test 2: Response time is acceptable
pm.test("Response time is under 500ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});

// Test 3: Response has correct content type
pm.test("Content-Type is JSON", function () {
pm.response.to.have.header("Content-Type", "application/json");
});

Test du corps de la reponse

// Parse the JSON response
const response = pm.response.json();

// Test prediction format
pm.test("Prediction is an integer", function () {
pm.expect(response.prediction).to.be.a("number");
pm.expect(Number.isInteger(response.prediction)).to.be.true;
});

// Test confidence range
pm.test("Confidence is between 0 and 1", function () {
pm.expect(response.confidence).to.be.at.least(0);
pm.expect(response.confidence).to.be.at.most(1);
});

// Test model version exists
pm.test("Model version is present", function () {
pm.expect(response).to.have.property("model_version");
pm.expect(response.model_version).to.be.a("string");
});

// Test prediction class is valid
pm.test("Prediction is class 0 or 1", function () {
pm.expect(response.prediction).to.be.oneOf([0, 1]);
});

Test des reponses d'erreur

Pour les requetes avec entree invalide :

pm.test("Status code is 422 for invalid input", function () {
pm.response.to.have.status(422);
});

pm.test("Error detail is present", function () {
const response = pm.response.json();
pm.expect(response).to.have.property("detail");
});

Scripts pre-requete

Les scripts pre-requete s'executent avant l'envoi de la requete. Utilisez-les pour generer des donnees dynamiques :

// Generate a random set of features for testing
const features = [];
for (let i = 0; i < 5; i++) {
features.push(parseFloat((Math.random() * 10).toFixed(2)));
}

pm.variables.set("dynamic_features", JSON.stringify(features));
console.log("Generated features:", features);

Utilisation dans le corps de la requete :

{
"features": {{dynamic_features}}
}

Definition de variables a partir des reponses

// After a prediction request, save the result for the next request
const response = pm.response.json();
pm.collectionVariables.set("last_prediction", response.prediction);
pm.collectionVariables.set("last_confidence", response.confidence);

Creation de collections

Une collection est un groupe organise de requetes apparentees. Voyez-la comme une suite de tests pour votre API.

Structure de collection recommandee

📁 AI Prediction API
├── 📁 Health & Status
│ ├── GET Health Check
│ └── GET Model Info
├── 📁 Predictions
│ ├── POST Single Prediction
│ ├── POST Batch Prediction
│ └── POST Prediction with Metadata
├── 📁 Error Handling
│ ├── POST Empty Features
│ ├── POST Wrong Types
│ ├── POST Missing Body
│ └── POST Invalid JSON
└── 📁 Performance
├── POST Stress Test (10 requests)
└── POST Large Batch (100 instances)

Creation d'une collection

  1. Cliquez sur NewCollection
  2. Nommez-la AI Prediction API
  3. Ajoutez une description :
Test suite for the AI Prediction API built with FastAPI.
Base URL: {{base_url}}
Endpoints:
- GET /health
- POST /api/v1/predict
- POST /api/v1/predict/batch
  1. Ajoutez des dossiers et des requetes comme indique ci-dessus

Collection Runner

Le Collection Runner permet d'executer toutes les requetes d'une collection sequentiellement, avec les resultats des tests pour chacune.

Execution d'une collection

  1. Cliquez sur le bouton Run de votre collection
  2. Configurez :
    • Iterations : Nombre de fois pour executer la collection complete (utile pour les tests de charge)
    • Delay : Millisecondes entre chaque requete
    • Environment : Selectionnez Local, Staging ou Production
  3. Cliquez sur Run AI Prediction API

Utilisation de fichiers de donnees

Vous pouvez alimenter vos requetes avec differentes entrees via des fichiers CSV ou JSON :

feature_1,feature_2,feature_3,feature_4,feature_5,expected_class
5.1,3.5,1.4,0.2,2.3,1
6.7,3.0,5.2,2.3,1.1,0
4.9,2.4,3.3,1.0,0.5,1

Dans le corps de la requete, referencez les variables de donnees :

{
"features": [
{{feature_1}}, {{feature_2}}, {{feature_3}},
{{feature_4}}, {{feature_5}}
]
}

Dans le script de test :

const expectedClass = parseInt(pm.iterationData.get("expected_class"));
const response = pm.response.json();

pm.test("Prediction matches expected class", function () {
pm.expect(response.prediction).to.equal(expectedClass);
});

Chainage de requetes

Certains flux de travail necessitent des requetes sequentielles ou la sortie de l'une devient l'entree de la suivante.

Exemple : Train → Predict → Explain

Requete 1 — Script post-reponse :

pm.test("API is healthy", function () {
pm.response.to.have.status(200);
const data = pm.response.json();
pm.collectionVariables.set("model_version", data.model_version);
});

Requete 2 — Script pre-requete :

console.log("Using model version:", pm.collectionVariables.get("model_version"));

Requete 2 — Script post-reponse :

const data = pm.response.json();
pm.collectionVariables.set("prediction_result", data.prediction);
pm.collectionVariables.set("prediction_confidence", data.confidence);

Requete 3 — Corps :

{
"features": [5.1, 3.5, 1.4, 0.2, 2.3],
"prediction": {{prediction_result}},
"model_version": "{{model_version}}"
}

Partage de collections

Export / Import

Export :

  1. Clic droit sur la collection → Export
  2. Choisissez le format Collection v2.1
  3. Enregistrez sous ai-prediction-api.postman_collection.json

Import :

  1. Cliquez sur Import → glissez le fichier JSON
  2. La collection apparait dans votre espace de travail
Controle de version

Exportez vos collections Postman et fichiers d'environnement vers votre depot Git. Ainsi, vos tests d'API vivent aux cotes de votre code :

project/
├── app/
├── tests/
├── postman/
│ ├── ai-prediction-api.postman_collection.json
│ ├── local.postman_environment.json
│ └── staging.postman_environment.json
└── README.md

Newman CLI pour CI/CD

Newman est le compagnon en ligne de commande de Postman. Il execute les collections depuis le terminal — ideal pour les pipelines CI/CD.

Installation

npm install -g newman
npm install -g newman-reporter-htmlextra # optionnel : rapports HTML

Execution des collections

# Execution de base
newman run postman/ai-prediction-api.postman_collection.json

# Avec environnement
newman run postman/ai-prediction-api.postman_collection.json \
-e postman/local.postman_environment.json

# Avec iterations et fichier de donnees
newman run postman/ai-prediction-api.postman_collection.json \
-e postman/local.postman_environment.json \
-n 5 \
-d postman/test-data.csv

# Avec rapport HTML
newman run postman/ai-prediction-api.postman_collection.json \
-e postman/local.postman_environment.json \
-r htmlextra \
--reporter-htmlextra-export reports/api-test-report.html

Newman dans GitHub Actions

# .github/workflows/api-tests.yml

name: API Tests (Postman/Newman)

on:
push:
branches: [main]

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

- name: Start API server
run: |
pip install -r requirements.txt
uvicorn app.main:app --host 0.0.0.0 --port 8000 &
sleep 5

- name: Install Newman
run: npm install -g newman newman-reporter-htmlextra

- name: Run Postman tests
run: |
newman run postman/ai-prediction-api.postman_collection.json \
-e postman/local.postman_environment.json \
-r cli,htmlextra \
--reporter-htmlextra-export reports/report.html

- name: Upload test report
if: always()
uses: actions/upload-artifact@v4
with:
name: api-test-report
path: reports/report.html

Exemple de sortie Newman

AI Prediction API

→ Health Check
GET http://localhost:8000/health [200 OK, 234B, 45ms]
✓ Status code is 200
✓ Response time is under 500ms
✓ API is healthy

→ Single Prediction
POST http://localhost:8000/api/v1/predict [200 OK, 189B, 123ms]
✓ Status code is 200
✓ Prediction is an integer
✓ Confidence is between 0 and 1
✓ Prediction is class 0 or 1

→ Empty Features (Error)
POST http://localhost:8000/api/v1/predict [422 Unprocessable Entity, 312B, 12ms]
✓ Status code is 422 for invalid input
✓ Error detail is present

┌─────────────────────────┬────────────────┬───────────────┐
│ │ executed │ failed │
├─────────────────────────┼────────────────┼───────────────┤
│ iterations │ 1 │ 0 │
├─────────────────────────┼────────────────┼───────────────┤
│ requests │ 8 │ 0 │
├─────────────────────────┼────────────────┼───────────────┤
│ test-scripts │ 16 │ 0 │
├─────────────────────────┼────────────────┼───────────────┤
│ assertions │ 22 │ 0 │
└─────────────────────────┴────────────────┴───────────────┘

Techniques avancees Postman

Authentification des requetes

Pour les API avec authentification :

  1. Allez dans l'onglet Authorization
  2. Selectionnez Bearer Token
  3. Saisissez {{auth_token}}

Cela ajoute automatiquement l'en-tete : Authorization: Bearer <token>

Surveillance des API

Les Monitors Postman executent vos collections selon un planning (par ex. toutes les 5 minutes) :

  1. Selectionnez votre collection → MonitorCreate a Monitor
  2. Definissez la frequence et l'environnement
  3. Recevez des alertes lorsque les tests echouent

Documentation d'API

Generez une documentation elegante a partir de votre collection :

  1. Ouvrez votre collection → cliquez sur View Documentation
  2. Publiez-la — obtenez une URL partageable
  3. Incluez des exemples, des descriptions et des extraits de tests

Points cles a retenir

Points cles a retenir
  1. Postman est la salle de controle visuelle pour tester les API — aucun code requis pour les tests de base
  2. Utilisez les environnements pour basculer facilement entre local, staging et production
  3. Ecrivez des scripts de test (JavaScript) pour automatiser la validation des reponses
  4. Organisez vos requetes en collections avec des dossiers descriptifs
  5. Utilisez les scripts pre-requete pour generer des donnees dynamiques et chainer les requetes
  6. Exportez les collections vers Git pour le controle de version
  7. Utilisez Newman pour executer les tests Postman dans les pipelines CI/CD
  8. Choisissez le bon outil : Postman pour l'exploration, pytest pour l'automatisation, curl pour les verifications rapides

Ressources complementaires