Aller au contenu principal

Guide QA

Guide complet pour l'assurance qualite (QA) de l'API MyTelevision.


Vue d'ensemble

Philosophie QA

  • Shift-left testing -- Trouver les bugs tot dans le developpement
  • Automatisation d'abord -- Automatiser les tests repetitifs
  • Base sur le risque -- Se concentrer sur les chemins critiques
  • Continu -- Tester a chaque changement

Quality Gates

GateExigenceBloquant
Tests unitaires80% de couvertureOui
LintAucune erreurOui
BuildReussiOui
Tests E2EPasses sur les PRs mainOui
SecuriteAucune vuln. high/criticalOui
Code Review1 approbationOui

Environnements de Test

Matrice des Environnements

EnvironnementURLObjectifDonnees
Localhttp://localhost:3000DeveloppementFraiches/seeded
Staginghttps://staging-api.mytelevision.comQA et UATProduction-like
Productionhttps://api.mytelevision.comLiveDonnees reelles

Configuration Locale

# Cloner et installer
git clone <repo>
cd mytelevision-api
npm install

# Demarrer les dependances
docker-compose up -d postgres redis

# Migrations et seed
npm run prisma:migrate:dev
npm run prisma:seed

# Demarrer l'API
npm run start:dev

Acces Staging

# Importer l'environnement Postman
postman/environments/staging.json

# Ou configurer manuellement
BASE_URL=https://staging-api.mytelevision.com
API_VERSION=v2

Categories de Tests

Tests Fonctionnels

CategorieDescriptionPriorite
AuthentificationLogin, logout, token refreshCritique
AutorisationRBAC, permissionsCritique
Operations CRUDCreate, Read, Update, DeleteHaute
Logique metierAbonnements, paiementsHaute
Cas limitesValeurs limites, etats videsMoyenne
Gestion d'erreursEntrees invalides, not foundMoyenne

Tests Non-Fonctionnels

CategorieDescriptionOutils
PerformanceTemps de reponse, debitK6, Postman
ChargeUtilisateurs concurrentsK6
SecuriteBypass auth, injectionOWASP ZAP
UtilisabiliteErgonomie APIRevue manuelle
DocumentationPrecision SwaggerSwagger UI

Tests API avec Postman

Collections

postman/
├── MyTelevision_API_Collection.json # API Publique (179 endpoints)
├── MyTelevision_Admin_Collection.json # API Admin (150+ endpoints)
├── MyTelevision_Account_Profile_Collection.json # Systeme de comptes
└── environments/
├── local.json
├── staging.json
└── production.json

Import et Configuration

  1. Importer les Collections -- Ouvrir Postman, cliquer "Import", selectionner les fichiers JSON
  2. Importer l'Environnement -- Aller dans Environments, importer local.json ou staging.json
  3. Configurer les Variables :
baseUrl: http://localhost:3000
apiUrl: {{baseUrl}}/api/v2
adminUrl: {{baseUrl}}/api/v2/admin

Flux d'Authentification

1. POST /api/v2/auth/login
Body: { "email": "[email protected]", "password": "TestPassword123!" }

2. Sauvegarder accessToken depuis la reponse
pm.environment.set("accessToken", pm.response.json().accessToken);

3. Utiliser dans les requetes suivantes
Authorization: Bearer {{accessToken}}

Scenarios de Test Courants

Test : Creer et Recuperer un Film

// Test 1 : Creer un Film (Admin)
pm.test('Create movie returns 201', () => {
pm.response.to.have.status(201);
});

pm.test('Movie has ID', () => {
const movie = pm.response.json();
pm.expect(movie.id).to.be.a('string');
pm.environment.set('movieId', movie.id);
});

// Test 2 : Recuperer le Film
pm.test('Get movie returns created movie', () => {
pm.response.to.have.status(200);
const movie = pm.response.json();
pm.expect(movie.id).to.eql(pm.environment.get('movieId'));
});

Test : Pagination

pm.test('Pagination metadata present', () => {
const response = pm.response.json();
pm.expect(response.meta).to.have.property('page');
pm.expect(response.meta).to.have.property('limit');
pm.expect(response.meta).to.have.property('total');
pm.expect(response.meta).to.have.property('totalPages');
});

pm.test('Data is array', () => {
pm.expect(pm.response.json().data).to.be.an('array');
});

Test : Gestion d'Erreurs

pm.test('Invalid ID returns 404', () => {
pm.response.to.have.status(404);
});

pm.test('Error response format', () => {
const error = pm.response.json();
pm.expect(error).to.have.property('statusCode');
pm.expect(error).to.have.property('message');
});

Execution des Collections

# Via Newman (CLI)
newman run postman/MyTelevision_API_Collection.json \
-e postman/environments/staging.json \
--reporters cli,htmlextra \
--reporter-htmlextra-export ./reports/api-test-report.html

Checklist de Test Manuel

Module Authentification

  • Inscription -- Format email valide, mot de passe 8 caracteres minimum, rejet des emails dupliques
  • Connexion -- Credentials valides retournent tokens, credentials invalides retournent 401, rate limiting apres 5 echecs
  • Social Login -- Google, Apple, Facebook fonctionnels, creation de nouveaux utilisateurs, liaison correcte des comptes existants
  • Refresh Token -- Token valide retourne nouveau access token, token expire retourne 401, rotation des tokens
  • Deconnexion -- Session terminee, tokens invalides, logout-all termine toutes les sessions

Modules de Contenu

  • Films -- Liste paginee, filtres par statut/genre, recherche par titre, details complets, films lies, token streaming (premium)
  • Series -- Liste avec nombre de saisons, saisons avec episodes, streaming d'episodes
  • TV en Direct -- Liste par categorie, URL de stream, donnees EPG
  • Podcasts -- Liste des collections, episodes dans collection, streaming audio

Systeme de Comptes

  • Gestion des Profils -- Creation (max 4), edition, suppression (pas le defaut), changement, protection PIN
  • Profil Enfant -- Restrictions age appliquees, categories restreintes, fenetres horaires appliquees
  • Gestion des Appareils -- Appareil enregistre a la connexion, liste recuperee, revocation correcte
  • Gestion des Sessions -- Sessions actives listees, revocation correcte, limite de sessions concurrentes appliquee

Tests de Regression

Tests du Chemin Critique

A executer avant chaque release :

IDDescriptionPriorite
REG-001Flux d'inscription utilisateurP0
REG-002Flux de connexion utilisateurP0
REG-003Refresh de tokenP0
REG-004Liste des filmsP0
REG-005Details d'un filmP0
REG-006Streaming de contenuP0
REG-007Changement de profilP1
REG-008Flux de paiementP0
REG-009Authentification adminP0
REG-010Operations CRUD adminP1

Suite de Regression

# Regression complete
npm run test:e2e

# Module specifique
npm run test:e2e -- --testPathPattern=auth

# Generer un rapport
npm run test:e2e -- --coverage --coverageReporters=html

Tests de Performance

Criteres de Performance

MetriqueCibleAcceptableCritique
p50 Reponse< 100ms< 200ms> 500ms
p95 Reponse< 300ms< 500ms> 1000ms
p99 Reponse< 500ms< 1000ms> 2000ms
Taux d'erreur< 0.1%< 1%> 5%
Debit> 500 rps> 200 rps< 100 rps

Checklist Performance

  • Endpoint health repond < 50ms
  • Endpoints de liste paginent correctement
  • Reponses en cache plus rapides que sans cache
  • Requetes DB optimisees (pas de N+1)
  • Rate limiting fonctionne sous charge
  • Pas de fuites memoire dans le temps
  • Pool de connexions non epuise

Tests de Securite

Checklist OWASP Top 10

  • A01 : Broken Access Control -- L'utilisateur ne peut pas acceder aux donnees d'autres utilisateurs, endpoints admin requirent le role admin, RBAC applique correctement
  • A02 : Cryptographic Failures -- Mots de passe correctement hashes, secrets JWT solides (32+ caracteres), TLS enforce
  • A03 : Injection -- SQL injection prevenue, NoSQL injection prevenue, injection de commande prevenue
  • A04 : Insecure Design -- Rate limiting implemente, validation des entrees sur tous les endpoints, messages d'erreur ne divulguent pas d'info
  • A05 : Security Misconfiguration -- Pas de credentials par defaut, mode debug desactive, fonctionnalites inutiles desactivees
  • A06 : Vulnerable Components -- npm audit propre, aucune vuln high/critical, dependances a jour
  • A07 : Authentication Failures -- Politique de mot de passe forte, verrouillage de compte apres echecs, timeout de session fonctionne
  • A08 : Data Integrity Failures -- Tokens signes valides, pas de serialisation non fiable, pipeline CI/CD securise
  • A09 : Logging Failures -- Echecs de connexion enregistres, donnees sensibles non enregistrees, logs inviolables
  • A10 : SSRF -- URLs externes validees, URLs internes bloquees, validation des redirections

Cas de Test Securite

// Test : Prevention SQL Injection
pm.test('SQL injection prevented', () => {
// Tentative: GET /movies?search=' OR '1'='1
pm.response.to.not.have.status(500);
});

// Test : Tentative de Bypass Auth
pm.test('Missing token returns 401', () => {
pm.response.to.have.status(401);
});

// Test : Prevention IDOR
pm.test('Cannot access other user data', () => {
// Tentative: GET /users/{other_user_id}
pm.response.to.have.status(403);
});

Rapport de Bugs

Template de Rapport

## Bug Report

**Titre :** [Description courte]

**Environnement :**

- Environnement : [Local/Staging/Production]
- Version API : [v2]
- Date/Heure : [2025-01-15 10:30 UTC]

**Etapes pour Reproduire :**

1. [Etape 1]
2. [Etape 2]
3. [Etape 3]

**Resultat Attendu :** [Ce qui devrait se passer]

**Resultat Reel :** [Ce qui se passe reellement]

**Details de la Requete :**

- Methode : [GET/POST/PUT/DELETE]
- URL : [URL complete]
- Headers : [Headers pertinents]
- Body : [Corps de la requete si applicable]

**Reponse :**

- Code statut : [ex: 500]
- Body : [Reponse d'erreur]

**Severite :**

- [ ] Critique (Systeme en panne, perte de donnees)
- [ ] Haute (Fonctionnalite majeure cassee)
- [ ] Moyenne (Fonctionnalite degradee)
- [ ] Basse (Probleme mineur)

Definitions de Severite

SeveriteDescriptionSLA
CritiqueSysteme en panne, faille securite, perte de donnees4 heures
HauteFonctionnalite majeure cassee, pas de contournement24 heures
MoyenneFonctionnalite degradee, contournement existant72 heures
BasseProbleme mineur, cosmetique1 semaine

Criteres de Release

Definition of Done

  • Tous les tests unitaires passent
  • Couverture de code >= 80%
  • Tests E2E passent
  • Aucune erreur lint
  • Scan de securite propre
  • Benchmarks de performance atteints
  • Code review approuve
  • Documentation mise a jour
  • Collection Postman mise a jour
  • Changelog mis a jour

Checklist de Release

  • Branche feature mergee vers develop
  • Develop deploye sur staging
  • Regression staging passee
  • Sign-off UAT obtenu
  • Branche release creee
  • Version incrementee
  • Changelog finalise
  • Deploiement production
  • Smoke tests passes
  • Monitoring verifie