Skip to content

Repository files navigation

🐳 QA Docker Parallel Execution

Suite de tests E2E Cypress conteneurisée sous Docker et exécutée en parallèle (4 groupes), avec pipeline CI/CD via GitHub Actions.

Ce projet illustre une démarche d'industrialisation de tests : passer d'une exécution séquentielle longue à une exécution parallèle rapide, reproductible et portable via conteneur.

Cible de test : Sauce Demo — site de démonstration public dédié à la pratique de l'automatisation QA (e-commerce fictif : login, catalogue, panier, checkout).


🎯 Objectifs

  • Conteneuriser une suite de tests Cypress dans une image Docker autonome et reproductible.
  • Paralléliser l'exécution en répartissant les scénarios sur plusieurs groupes indépendants.
  • Réduire le temps de run global tout en gardant une suite maintenable.
  • Intégrer l'exécution dans un pipeline CI/CD (GitHub Actions), avec publication des rapports.

🧱 Stack technique

Domaine Technologie
Framework de test Cypress
Langage TypeScript
Conteneurisation Docker
Orchestration locale Docker Compose
CI/CD GitHub Actions (matrix strategy)
Reporting Mochawesome

📂 Structure du projet

qa-docker-parallel-execution/
├── cypress/
│   ├── e2e/
│   │   ├── group-g0/       # Authentification
│   │   ├── group-g1/       # Catalogue produits
│   │   ├── group-g2/       # Panier
│   │   └── group-g3/       # Checkout
│   └── support/
├── .github/workflows/
│   └── parallel-tests.yml  # Pipeline CI en 4 groupes parallèles
├── Dockerfile
├── docker-compose.yml
├── cypress.config.ts
└── package.json

Le découpage en 4 groupes (group-g0 à group-g3) reproduit une logique déjà utilisée sur un projet professionnel de 77 features, où cette répartition avait permis de réduire le temps de run total d'environ 59 % (~95 min → ~39 min). Ici, à l'échelle d'un projet de démonstration, le principe reste identique : indépendance des groupes, exécution simultanée, agrégation des rapports.


🐳 Conteneurisation

L'image Docker embarque Cypress et toutes ses dépendances, avec deux ajustements essentiels pour un mode headless stable :

  • Taille du /dev/shm : Chrome headless peut planter si la mémoire partagée est trop petite. Le docker-compose.yml alloue explicitement plus de mémoire partagée.
  • Fuseau horaire fixe : garantit des timestamps cohérents entre l'environnement local et le CI.
# Build de l'image
docker build -t qa-docker-parallel-execution .

# Run d'un groupe spécifique
docker run --shm-size=1g -e TZ=Europe/Paris qa-docker-parallel-execution \
  npx cypress run --spec "cypress/e2e/group-g0/**/*.cy.ts"

⚡ Exécution en parallèle (local, via Docker Compose)

docker compose up --abort-on-container-exit

Chaque service du docker-compose.yml lance un groupe de tests en parallèle, dans un conteneur isolé.

🚀 CI/CD — GitHub Actions

Le pipeline .github/workflows/parallel-tests.yml utilise une matrix strategy pour lancer les 4 groupes en parallèle sur des runners distincts, puis publie les rapports Mochawesome en artefacts.


📊 Résultat attendu

Mode Temps approximatif
Exécution séquentielle (1 groupe, tout le E2E) Référence
Exécution en 4 groupes parallèles ~-50 à -60 % selon la taille de la suite

📸 Preuve d'exécution réelle

parallelExecutionG0-G1 parallelExecutionG2-G3

👤 Auteur

Mohamed Touaoua — QA Automaticien Ce projet fait partie de mon portfolio d'automatisation QA.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages