Photo by Gabriel Heinzer / Unsplash

Configuration de Robot Framework en mode headless sur Ubuntu pour CI/CD

2 févr. 2026
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.

Romain GEORGES

Open Source evangelist & Ruby enthousiast