🧪 Tests

testing-api-testing-expert

Tests d'API REST et GraphQL avec les outils majeurs du marché, incluant le contract testing, l'automatisation CI/CD et les tests de performance.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- testing-api-testing-expert --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } testing-api-testing-expert -Launch"

🚀 Déjà installé ?

claude "/testing-api-testing-expert"

Ou tapez /testing-api-testing-expert dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

test APIPostmanNewmanREST Assuredcontract testing

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/testing-api-testing-expert ~/.claude/skills/

Payload du plugin : skills/testing-api-testing-expert · source éditable : testing-skills/api-testing-expert

📖 Manuel

API Testing Expert

Workflow

1. Analyser la spécification

2. Choisir l'outil selon le contexte

ContexteOutil recommandé
Exploration rapide / équipe non-devPostman + Newman
Backend Java/KotlinREST Assured
Backend Node.jsSuperTest ou Axios + Jest
Backend Pythonpytest + httpx
Contract testing microservicesPact (consumer-driven)
Performance / chargek6 ou Artillery
Fuzzing / sécuritéOWASP ZAP API Scan ou Schemathesis

3. Configurer les environnements

# Newman — run collection avec env staging
newman run collection.json \
  -e staging.env.json \
  --reporters cli,htmlextra,junit \
  --reporter-junit-export results/junit.xml \
  --bail

Variables d'environnement Postman — JAMAIS de valeur en dur :

{ "BASE_URL": "https://api.staging.example.com", "API_KEY": "{{$env.API_KEY}}" }

4. Concevoir les cas de test

Matrice minimale par endpoint :

# pytest + httpx — exemple endpoint POST /users
import httpx, pytest

BASE = "https://api.staging.example.com"

def test_create_user_happy_path(auth_headers):
    r = httpx.post(f"{BASE}/users", json={"email": "x@test.com", "role": "viewer"}, headers=auth_headers)
    assert r.status_code == 201
    body = r.json()
    assert "id" in body and isinstance(body["id"], str)
    assert body["email"] == "x@test.com"

def test_create_user_missing_email(auth_headers):
    r = httpx.post(f"{BASE}/users", json={"role": "viewer"}, headers=auth_headers)
    assert r.status_code == 422
    assert "email" in r.json()["detail"][0]["loc"]

def test_create_user_unauthorized():
    r = httpx.post(f"{BASE}/users", json={"email": "x@test.com", "role": "viewer"})
    assert r.status_code == 401

5. Valider les schémas de réponse

# Validation JSON Schema avec jsonschema
from jsonschema import validate

USER_SCHEMA = {
    "type": "object",
    "required": ["id", "email", "createdAt"],
    "properties": {
        "id":        {"type": "string", "format": "uuid"},
        "email":     {"type": "string", "format": "email"},
        "createdAt": {"type": "string", "format": "date-time"},
    },
    "additionalProperties": False,
}

def test_user_schema(auth_headers):
    r = httpx.get(f"{BASE}/users/some-uuid", headers=auth_headers)
    validate(instance=r.json(), schema=USER_SCHEMA)

6. Contract testing avec Pact

# Consumer side — Python pact-python
from pact import Consumer, Provider

pact = Consumer("frontend").has_pact_with(Provider("users-api"))

pact.given("user abc123 exists").upon_receiving("a request for user").with_request(
    method="GET", path="/users/abc123"
).will_respond_with(200, body={"id": "abc123", "email": like("user@example.com")})
# Vérification côté Provider
pact-verifier \
  --provider-base-url http://localhost:8080 \
  --pact-broker-url https://pact-broker.internal \
  --provider users-api \
  --publish-verification-results \
  --provider-app-version $(git rev-parse --short HEAD)

7. Tests de performance

// k6 — SLO : P95 < 500ms, error rate < 1%
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '30s', target: 50 },
    { duration: '1m',  target: 50 },
    { duration: '15s', target: 0  },
  ],
  thresholds: {
    http_req_duration: ['p(95)<500'],
    http_req_failed:   ['rate<0.01'],
  },
};

export default function () {
  const r = http.get('https://api.staging.example.com/users', {
    headers: { Authorization: `Bearer ${__ENV.TOKEN}` },
  });
  check(r, { 'status 200': (r) => r.status === 200 });
  sleep(1);
}
k6 run --env TOKEN=$API_TOKEN perf/users.js

8. Intégration CI/CD

# GitHub Actions
- name: Run API tests
  run: |
    newman run tests/collection.json \
      -e tests/env/${{ env.STAGE }}.json \
      --reporters junit \
      --reporter-junit-export results/junit.xml
  env:
    API_KEY: ${{ secrets.API_KEY }}

- name: Upload test results
  uses: actions/upload-artifact@v4
  if: always()
  with:
    name: api-test-results
    path: results/

Critères de décision — quel outil choisir


Garde-fous / anti-patterns

Anti-patternRisqueCorrection
Token en dur dans le codeFuite dans GitToujours os.environ["TOKEN"] ou vault
Test non idempotent (données non nettoyées)Flaky en CIsetup crée, teardown supprime via API ou DB
Tester uniquement le status codeRégression silencieuse sur le bodyValider le schéma JSON et les valeurs métier
Pas de test 4xx/5xxFaux sentiment de couvertureMatrice erreurs obligatoire par endpoint
Collection Postman hors GitDérive entre devsCommitter collection.json + env.*.json (sans secrets)
Pact consumer publié sans vérification providerContrat jamais vérifiéBloquer le merge si can-i-deploy échoue
Test de perfs pointant sur prodIncident en productionToujours utiliser staging ou un environment dédié

Bonnes pratiques 2026