Configuration de Robot Framework en mode headless sur Ubuntu pour CI/CD
Un tutoriel pour mettre en place des tests Robot Framework en mode headless (Framebuffer) pour une chaine CI/CD.
Le tout su Ubuntu !
1. Installation des dépendances système
# Mise à jour du système
sudo apt update && sudo apt upgrade -y
# Installation de Python et pip
sudo apt install python3 python3-pip python3-venv -y
# Installation de Xvfb (X Virtual Framebuffer)
sudo apt install xvfb -y
# Installation des navigateurs pour les tests web
sudo apt install firefox-esr chromium-browser -y
# Installation des drivers
sudo apt install firefox-geckodriver chromium-chromedriver -y
2. Configuration de l'environnement Python
# Création d'un environnement virtuel
python3 -m venv robot_env
source robot_env/bin/activate
# Installation de Robot Framework et des librairies
pip install robotframework
pip install robotframework-seleniumlibrary
pip install robotframework-requests
pip install robotframework-databaselibrary
3. Configuration de Xvfb pour l'affichage virtuel
Script de démarrage Xvfb
Créez un fichier start_xvfb.sh :
#!/bin/bash
export DISPLAY=:99
Xvfb :99 -screen 0 1920x1080x24 -ac +extension GLX +render -noreset &
export XVFB_PID=$!
echo "Xvfb started with PID: $XVFB_PID on display :99"
Configuration permanente
# Ajout dans ~/.bashrc ou ~/.profile
echo 'export DISPLAY=:99' >> ~/.bashrc
source ~/.bashrc
4. Configuration Robot Framework pour le mode headless
Fichier de configuration robot_config.py
# Configuration des options de navigateur
CHROME_OPTIONS = [
'--headless',
'--no-sandbox',
'--disable-dev-shm-usage',
'--disable-gpu',
'--window-size=1920,1080',
'--disable-extensions',
'--disable-web-security',
'--allow-running-insecure-content'
]
FIREFOX_OPTIONS = [
'--headless',
'--width=1920',
'--height=1080'
]
Exemple de test Robot Framework
*** Settings ***
Library SeleniumLibrary
Library Collections
*** Variables ***
${BROWSER} chrome
${HEADLESS} True
${CHROME_OPTIONS} add_argument("--headless");add_argument("--no-sandbox");add_argument("--disable-dev-shm-usage")
*** Test Cases ***
Test Example Headless
[Documentation] Test en mode headless
Open Browser https://example.com ${BROWSER} options=${CHROME_OPTIONS}
Title Should Be Example Domain
Close Browser
5. Configuration GitLab CI/CD
Fichier .gitlab-ci.yml
stages:
- test
variables:
DISPLAY: ":99"
robot_tests:
stage: test
image: ubuntu:22.04
before_script:
# Installation des dépendances
- apt-get update -qq && apt-get install -y -qq
- apt-get install -y python3 python3-pip python3-venv
- apt-get install -y xvfb firefox-esr chromium-browser
- apt-get install -y firefox-geckodriver chromium-chromedriver
# Configuration de l'environnement
- python3 -m venv robot_env
- source robot_env/bin/activate
- pip install robotframework robotframework-seleniumlibrary
# Démarrage de Xvfb
- Xvfb :99 -screen 0 1920x1080x24 -ac +extension GLX +render -noreset &
- export DISPLAY=:99
script:
- source robot_env/bin/activate
- robot --outputdir results tests/
artifacts:
when: always
paths:
- results/
reports:
junit: results/xunit.xml
expire_in: 1 week
only:
- merge_requests
- main
6. Structure de projet recommandée
project/
├── .gitlab-ci.yml
├── requirements.txt
├── tests/
│ ├── keywords/
│ │ └── common_keywords.robot
│ ├── resources/
│ │ └── variables.robot
│ └── suites/
│ ├── login_tests.robot
│ └── api_tests.robot
├── results/
└── scripts/
└── start_xvfb.sh
7. Optimisations pour la CI/CD
Utilisation d'une image Docker personnalisée
FROM ubuntu:22.04
# Installation des dépendances
RUN apt-get update && apt-get install -y \
python3 python3-pip python3-venv \
xvfb firefox-esr chromium-browser \
firefox-geckodriver chromium-chromedriver \
&& rm -rf /var/lib/apt/lists/*
# Installation de Robot Framework
RUN pip3 install robotframework robotframework-seleniumlibrary
# Configuration de l'affichage
ENV DISPLAY=:99
# Script de démarrage
COPY start_xvfb.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/start_xvfb.sh
WORKDIR /tests
Configuration avancée GitLab CI
robot_tests:
stage: test
image: your-registry/robot-framework:latest
services:
- name: selenium/standalone-chrome:latest
alias: selenium-chrome
variables:
SELENIUM_HOST: selenium-chrome
SELENIUM_PORT: 4444
script:
- start_xvfb.sh
- robot --variable SELENIUM_HOST:${SELENIUM_HOST}
--variable SELENIUM_PORT:${SELENIUM_PORT}
--outputdir results
--xunit xunit.xml
tests/
8. Bonnes pratiques
Gestion des timeouts
*** Settings ***
Library SeleniumLibrary timeout=30s implicit_wait=10s
*** Variables ***
${TIMEOUT} 30s
${RETRY} 3x
Parallélisation des tests
# Exécution en parallèle avec Pabot
pip install robotframework-pabot
# Dans le CI/CD
pabot --processes 4 --outputdir results tests/
Gestion des artefacts
artifacts:
when: always
paths:
- results/log.html
- results/report.html
- results/output.xml
- results/screenshots/
reports:
junit: results/xunit.xml
9. Debugging et monitoring
Capture d'écrans en cas d'échec
*** Keywords ***
Capture Screenshot On Failure
Run Keyword If Test Failed Capture Page Screenshot
Logs détaillés
robot --loglevel DEBUG --outputdir results tests/
Cette configuration vous permettra d'exécuter vos tests Robot Framework en mode headless sur Ubuntu dans un environnement CI/CD GitLab, avec une gestion complète de l'affichage virtuel via Xvfb.