diff --git a/README.md b/README.md new file mode 100644 index 0000000..9d536d5 --- /dev/null +++ b/README.md @@ -0,0 +1,250 @@ +# Robot Framework + Jenkins + Chrome headless (LXC) + +Ce projet contient des tests Robot Framework (FrontOffice, BackOffice, End-to-End) +exécutés en **mode headless dans un conteneur LXC Jenkins**. + +L’objectif : +✅ Lancer les tests depuis Jenkins +✅ Utiliser Google Chrome en headless, compatible LXC +✅ Générer les rapports Robot (log.html, report.html) +✅ Pouvoir les visualiser dans Jenkins + +--- + +## 1. Contexte d’exécution + +- **Machine** : LXC `jenkins` sur Proxmox +- **OS** : Debian 13 +- **Jenkins** : installé dans le LXC +- **Chrome** : + + ```bash + google-chrome --version + # Google Chrome 142.0.7444.162 + ``` + +- **Chromedriver** (installé manuellement et/ou via Selenium Manager) : + + ```bash + CD_VERSION="142.0.7444.162" + + cd /tmp + curl -LO "https://storage.googleapis.com/chrome-for-testing-public/${CD_VERSION}/linux64/chromedriver-linux64.zip" + unzip -o chromedriver-linux64.zip + + install -m 755 chromedriver-linux64/chromedriver /usr/local/bin/chromedriver-142 + ln -sf /usr/local/bin/chromedriver-142 /usr/local/bin/chromedriver + + chromedriver --version + # ChromeDriver 142.0.7444.162 ... + ``` + +--- + +## 2. Structure du projet + +Dans le repo `end-to-end` : + +```text +. +├── Data +│ └── InputData.robot +├── Resources +│ ├── BackOffice +│ │ ├── BackOfficeApp.robot +│ │ └── PO +│ │ ├── BackOffice.Landing.robot +│ │ └── BackOffice.TopNav.robot +│ ├── Common +│ │ └── CommonWeb.robot <-- config Selenium / Chrome headless +│ └── FrontOffice +│ ├── FrontOfficeApp.robot +│ └── PO +│ ├── About.robot +│ ├── Contact.robot +│ ├── FrontOffice.Landing.robot +│ ├── Portofolio.robot +│ ├── Services.robot +│ └── Team.robot +├── results +│ ├── log.html +│ ├── output.xml +│ └── report.html +└── Tests + ├── BackOffice + │ └── Back_Office.robot + ├── EndToEnd + │ └── End_to_End.robot + └── FrontOffice + └── Front_Office.robot +``` + +--- + +## 3. Configuration Selenium – `Resources/Common/CommonWeb.robot` + +C’est ici que tout se joue pour l’exécution dans Jenkins + LXC. + +```robot +*** Settings *** +Library SeleniumLibrary +Resource ../BackOffice/BackOfficeApp.robot +Resource ../FrontOffice/FrontOfficeApp.robot + +*** Variables *** +${BROWSER} chrome +${CHROME OPTIONS} add_argument("--headless=new");add_argument("--disable-dev-shm-usage");add_argument("--no-sandbox");add_argument("--window-size=1920,1080") + +*** Keywords *** +Begin Web Test + Open Browser about:blank ${BROWSER} options=${CHROME OPTIONS} + Set Selenium Speed 0.3s + Set Selenium Timeout 7s + +End Web Test + Close All Browsers +``` + +Les fichiers de test appellent ce `Begin Web Test` en `Test Setup` : + +### Exemple – `Tests/FrontOffice/Front_Office.robot` + +```robot +*** Settings *** +Documentation Test the Studio Web Page +Resource ../../Resources/FrontOffice/FrontOfficeApp.robot +Resource ../../Resources/Common/CommonWeb.robot +Resource ../../Data/InputData.robot +Test Setup Begin Web Test +Test Teardown End Web Test +``` + +Idem pour : + +- `Tests/BackOffice/Back_Office.robot` +- `Tests/EndToEnd/End_to_End.robot` + +--- + +## 4. Job Jenkins – configuration + +Dans Jenkins, le job `end-to-end` : + +### 4.1. Source Code Management + +- **Git repo** : `https://github.com/Ssyleric/end-to-end.git` +- **Branch** : `master` +- Credentials : token GitHub (déjà configuré). + +### 4.2. Build Step – `Execute shell` + +Script utilisé : + +```bash +#!/bin/bash +cd "$WORKSPACE" + +# Active le venv Robot (déjà créé à l’avance) +# /var/lib/jenkins/venv-robot contient robotframework + SeleniumLibrary +/var/lib/jenkins/venv-robot/bin/python -m robot --outputdir results Tests +``` + +Résultat en sortie : + +```text +Tests | PASS | +Tests.BackOffice | PASS | +Tests.EndToEnd | PASS | +Tests.FrontOffice | PASS | +8 tests, 8 passed, 0 failed +``` + +Les fichiers générés : + +- `${WORKSPACE}/results/output.xml` +- `${WORKSPACE}/results/log.html` +- `${WORKSPACE}/results/report.html` + +--- + +## 5. Plugin Robot Framework dans Jenkins + +Le plugin Robot Framework est configuré pour : + +- **Directory** : `results` +- **Output XML** : `output.xml` + +À la fin du build, Jenkins affiche : + +- L’onglet **Robot** sur la page du job +- Les statistiques de tests (nombre de tests, tags, suites…) +- Des liens vers `log.html` et `report.html` + +--- + +## 6. Déblocage de l’affichage `log.html` dans Jenkins (CSP) + +Par défaut, Jenkins applique une politique **CSP** stricte → `log.html` de Robot peut donner : + +> Opening Robot Framework log failed... + +Solution appliquée (via **Manage Jenkins → Script Console**) : + +```groovy +import jenkins.model.Jenkins + +System.setProperty( + "hudson.model.DirectoryBrowserSupport.CSP", + "sandbox allow-scripts; default-src 'self' 'unsafe-inline' 'unsafe-eval'; " + + "style-src 'self' 'unsafe-inline'; " + + "script-src 'self' 'unsafe-inline' 'unsafe-eval'; " + + "img-src 'self' data:; connect-src 'self';" +) + +println("CSP définitivement assouplie. Rechargez le Log Robot.") +``` + +Après ça : + +- La page `log.html` de Robot s’ouvre correctement. +- Plus de page noire / erreur "Opening Robot Framework log failed". + +--- + +## 7. Workflow Git – mise à jour des résultats + +Depuis la machine de dev : + +```bash +cd ~/development/robot-scripts/end-to-end + +# Lancer les tests en local si besoin +# robot -d results Tests + +# Vérifier les fichiers modifiés +git status + +# Ajouter les fichiers de résultats (si tu veux les versionner) +git add results/log.html results/output.xml results/report.html + +# Commit +git commit -m "Update Robot Framework test results" + +# Push vers GitHub +git push +``` + +Jenkins récupère ensuite le commit et relance le job automatiquement +(si configuré avec webhook ou polling). + +--- + +## 8. Résumé + +- Chrome 142 + Chromedriver 142 installés dans le LXC Jenkins +- Config Selenium unifiée via `CommonWeb.robot` avec `options=${CHROME OPTIONS}` +- Jenkins exécute `robot --outputdir results Tests` via un venv dédié +- Plugin Robot Framework consomme `results/output.xml` +- CSP Jenkins assouplie pour permettre l’affichage de `log.html` + +Tout est maintenant vert 🟢 pour le projet `end-to-end` dans Jenkins.