Session 21 — Stack QA pédagogique (Squash TM + Selenium + Robot Framework + Filebrowser)
Durée : ~5h
Objectif : Déployer la Phase 9 — stack QA pédagogique complète sur le NAS Synology
Résumé exécutif
Déploiement complet de la stack QA Phase 9 :
- Squash TM v8 sur PostgreSQL 16 (abandonnement MySQL → PostgreSQL)
- Selenium Grid avec noVNC pour la visualisation en direct
- Test Runner polyglotte (Robot Framework + pytest)
- Filebrowser pour l'upload de scripts
- Squash Orchestrator avec clé SSH RSA fixe (token JWT permanent)
- Premier test Robot Framework PASS (smoke-test API)
- Premier test Selenium PASS avec Chrome visible dans VNC
Décisions architecturales
| Décision |
Raison |
| PostgreSQL 16 pour Squash TM |
Squash TM v8 ne supporte pas MySQL — uniquement MariaDB et PostgreSQL |
Variables SQTM_DB_* |
L'image v8 lit ses variables via install-script.sh avant Spring Boot |
Healthcheck wget |
curl absent de l'image Squash TM v8 |
| Token JWT permanent |
Clé SSH RSA baked dans PUBLIC_KEY → même token sur tous les déploiements |
| URL publique dans scripts Selenium |
IP 82.66.134.80 → pas de popup Chrome Private Network Access |
PERFSHOP_FRONTEND_URL |
Variable d'env pour adapter l'URL selon l'environnement (prod/local) |
| Filebrowser port 8080 interne |
Port 80 interdit pour les containers non-root sur Synology |
État final des services sur le NAS
| Container |
Image |
Statut |
| perfshop-squash-db |
postgres:16 |
✅ Healthy |
| perfshop-testmgmt |
squashtest/squash-tm:latest |
✅ Healthy — PostgreSQL confirmé |
| perfshop-selenium |
selenium/standalone-chrome:latest |
✅ Up — noVNC accessible |
| perfshop-test-runner |
python:3.11-slim |
✅ Up |
| perfshop-orchestrator |
squashtest/squash-orchestrator:latest |
✅ Up — clé SSH fixe |
| perfshop-filebrowser |
filebrowser/filebrowser:latest |
✅ Up — admin/admin |
| perfshop-squash-seed |
python:3.11-slim |
✅ Exited(0) — projet créé |
URLs opérationnelles
| Service |
URL |
Credentials |
| Squash TM |
https://perfshop-squash.perfshop.io/squash |
admin/admin |
| Selenium VNC |
https://perfshop-selenium.perfshop.io |
— |
| Filebrowser |
https://perfshop-files.perfshop.io |
admin/admin |
Tests validés
| Test |
Résultat |
Notes |
smoke-test.robot (API HTTP) |
✅ PASS |
Appelle http://perfshop-app:8080/api/products directement |
CT-002-prix-coherence.robot (Selenium) |
⚠️ Partiel |
Chrome visible dans VNC, produits chargés, assertion prix à valider |
Bugs résolus
| # |
Bug |
Sévérité |
Correction |
| 1 |
Variables DB_TYPE/DB_HOST ignorées par Squash TM v8 |
BLOQUANT |
→ SQTM_DB_TYPE/SQTM_DB_HOST |
| 2 |
MySQL non supporté par Squash TM v8 |
BLOQUANT |
→ PostgreSQL 16 |
| 3 |
Healthcheck curl absent |
MOYEN |
→ wget -q --spider |
| 4 |
SPRING_PROFILES_ACTIVE: postgresql ignoré |
BLOQUANT |
→ variables SQTM_* |
| 5 |
Ports Orchestrator supposés 8080 |
BLOQUANT |
→ 7774/7775/7776/38368 |
| 6 |
PUBLIC_KEY format PEM refusé |
BLOQUANT |
→ format SSH ssh-rsa AAAA... |
| 7 |
Chrome Private Network Access popup |
MOYEN |
→ URL publique dans scripts |
| 8 |
Filebrowser port 80 interdit Synology |
MOYEN |
→ port 8080 interne |
| 9 |
Filebrowser config ignorée |
MOYEN |
→ montage sur /config/settings.json |
| 10 |
MySQL healthcheck v8.4 auth requis |
MINEUR |
→ -u root -p${PASSWORD} |
Pending session 21
- [ ] SSH channel Orchestrator → test-runner (OpenSSH server dans le Dockerfile test-runner)
- [ ] Créer les exigences et cas de test dans Squash TM (IHM ou API REST)
- [ ] Configurer le serveur d'automatisation dans Squash TM (token JWT disponible)
- [ ] Lancer un test depuis Squash TM et observer les résultats
Erreurs Claude (pour le bilan vibe coding)
| # |
Erreur |
Sévérité |
Impact |
| 1 |
Variables DB_TYPE au lieu de SQTM_DB_TYPE |
CRITIQUE |
3 cycles de debug |
| 2 |
MySQL proposé au lieu de PostgreSQL pour Squash TM v8 |
CRITIQUE |
Refactoring complet |
| 3 |
SPRING_PROFILES_ACTIVE proposé avant lecture du script d'entrée |
MAJEUR |
2 cycles de debug |
| 4 |
Ports Orchestrator supposés 8080 |
MAJEUR |
Config IHM incorrecte |
| 5 |
PUBLIC_KEY format PEM proposé |
MAJEUR |
Container en crash loop |
| 6 |
SSH_CHANNEL_* ajouté en urgence sans SSH server |
MINEUR |
Design incomplet |
| 7 |
Plusieurs tentatives --host-resolver-rules Chrome (Chrome crash) |
MINEUR |
Perte de temps |