Verticale Odoo · v0.2.0 sur PyPI · Apache 2.0

ODOOFX · Automatisation des tests Odoo pour Robot Framework

ODOOFX (paquet robotframework-odoofx) est une bibliothèque Robot Framework open source pour l'automatisation des tests Odoo Community et Enterprise : l'API RPC, l'interface web et l'ORM, avec les cinq agents et la méthode Spec-Test-Driven Development déjà éprouvés sur SAP. La version 0.2.0 est sur PyPI : ses deux canaux, l'API RPC (XML-RPC et JSON-2) et le client web (connexion, navigation, lecture des vues, saisie et enregistrement de formulaires, boutons d'action), sont éprouvés en direct sur Odoo 16 et 19. Cette page dit ce qui existe, ce qui se construit et dans quel ordre.

117 Tests joués en direct Odoo 16 et 19 · 23 suites
69 Keywords documentés Version 0.2.0 · sur PyPI
849 Tests unitaires Hors Odoo · 13 octobre 2026
0 € Coût de licence Open source Apache 2.0
Le constat

Un ERP qui bouge chaque année, des tests qui doivent suivre

Odoo sort une version majeure par an, chaque entreprise l'enrichit de modules et de personnalisations, et ses API évoluent. Un outillage de test générique voit des pages web ; ODOOFX veut voir des modèles, des champs et des états de workflow.

Montées de version

Une version majeure par an

Menus, libellés et vues changent d'une version à l'autre. ODOOFX vise une seule base de code avec détection de version, plutôt qu'une suite de tests par version à maintenir en parallèle.

Détection de version Correspondance des menus Libellés normalisés
Modules métier

Des modules et des personnalisations propres à chaque entreprise

Ventes, stocks, comptabilité, modules communautaires et développements maison : les agents partent de l'instance réelle (modèles, champs, vues) et non d'une description générique d'Odoo.

Community Enterprise Modules sur mesure
API en mutation

Des API qui changent de forme

Odoo 19 déprécie /xmlrpc et /jsonrpc au profit de l'API JSON-2, avec un retrait annoncé en version 22. Le canal RPC d'ODOOFX porte déjà les deux voies : XML-RPC jusqu'à Odoo 18, JSON-2 à partir d'Odoo 19.

XML-RPC JSON-2 (Odoo 19) Choix selon la version
Architecture

Trois canaux pour agir et vérifier

Le même principe que SAPFX, qui unifie SAP GUI, Fiori et les API : un test agit par le canal le plus fidèle au parcours de l'utilisateur et vérifie par le canal le plus direct.

Canal 1

Interface web

Le client web Odoo piloté par la bibliothèque Browser (Playwright) : connexion avec preuve de la cible, navigation dans les menus par identifiants externes, lecture des vues, saisie et enregistrement de formulaires (texte, dates, listes de sélection par code, cases à cocher, relations, lignes), boutons d'action et contrôle des statuts. C'est le parcours que vit l'utilisateur. Opérationnel en 0.2.0 : écritures à l'écran fermées par défaut et journalisées, et un formulaire laissé à moitié saisi n'est jamais enregistré par accident. À venir : les boutons qui ouvrent un assistant, les lignes de section et de note, la suppression de ligne.

Browser / Playwright Formulaires Menus
Canal 2

API RPC

Créer, lire, modifier, rechercher et supprimer des enregistrements, appeler une méthode métier (confirmer, annuler) sans passer par l'écran. Opérationnel depuis la 0.1.0 : écritures fermées par défaut et journalisées, cible prouvée (URL, base, version) avant toute écriture.

XML-RPC JSON-2 CRUD
Canal 3

Introspection ORM

Lire les champs d'un modèle avec leur type et leurs relations, les modèles dont le nom contient un texte, l'état d'un module, les codes d'un champ de sélection, l'état de workflow d'un enregistrement et l'identifiant derrière un identifiant externe : dans la 0.2.0, éprouvé en lecture sur Odoo 16 (XML-RPC) et 19 (JSON-2). C'est ce que liront les agents pour écrire une spec.

Modèles Champs États de workflow

L'application mobile Odoo (Appium) reste hors du périmètre de la première version.

Cas d'usage

Ce que la 0.2.0 automatise dès aujourd'hui

Trois usages couverts par la version publiée, par l'API comme à l'écran, éprouvés sur Odoo 16 et 19.

Non-régression

Tests de non-régression par l'API

Rejouer un parcours métier (devis, confirmation, envoi, annulation) par XML-RPC ou JSON-2, ou à l'écran dans le client web (saisie d'un contact, saisie puis confirmation d'un devis par son bouton), et vérifier les codes d'état, quelle que soit la langue de l'interface. La même couche métier, neutre de version, tourne sur Odoo 16 et 19.

Codes d'état XML-RPC / JSON-2 Odoo 16 et 19 Saisie à l'écran
Données de test

Des données de test propres et traçables

Chaque enregistrement créé porte un marqueur de run ; chaque écriture est journalisée (prévue, faite, échouée, inconnue) et sa disparition se prouve sur l'enregistrement identifié. Les écritures restent fermées tant que la connexion ne les autorise pas.

Marqueur de run Journal d'écriture Retour arrière
Droits et cible

Droits d'accès et preuve de la cible

Vérifier qu'un utilisateur appartient, ou non, à un groupe désigné par son identifiant externe, et prouver l'URL, la base et la version d'Odoo avant la moindre écriture : deux versions d'Odoo peuvent tourner côte à côte sans risque de confusion.

Groupes Identifiants externes Version attendue
Méthode STDD

Cinq agents, une méthode commune

ODOOFX applique le Spec-Test-Driven Development défini dans rf-test-agents : la spécification, écrite en langage humain et confrontée à l'instance Odoo vivante, pilote le test ; le test pilote la bibliothèque. Même logique que TDD, une brique plus tôt : la spec, verte par défaut en théorie, est confrontée au système réel avant le moindre test. Les agents ont mené la première campagne (deux plans observés sur Odoo 16 et 19, quinze suites RPC générées et jouées en direct, une revue indépendante en lecture seule et une revue ISTQB), puis une seconde : huit suites web et ORM jouées en direct, dont six relues par la revue indépendante et la revue ISTQB. Ils vivent dans un dépôt atelier privé, avec un plugin rf-mcp et la surcouche odoofx-mcp ; PyPI et le dépôt public livrent la bibliothèque.

Exploration specs/

odoo-planner

Confronte la spec humaine (objectif, user story, scénario BDD, suite existante) à l'instance réelle : vues, modèles et champs ORM, états de workflow. Il en écrit la version observée dans specs/, relue par un humain.

Génération .robot

odoo-generator

Produit la suite Robot Framework à partir du plan, chaque étape exécutée en direct avant d'être écrite, et la scelle par l'empreinte SHA256 du plan : un plan modifié sans régénération fait échouer le garde.

Réparation bornée resources/

odoo-healer

Répare la couche resources/, jamais le test ni ses assertions. Budgets fixés (2 candidats, 20 appels, 900 secondes) et cinq verdicts, dont application_defect quand c'est Odoo qui a changé.

Conception normée ISTQB

odoo-istqb

Conçoit des plans et des cas de test ISTQB rejouables, et relit chaque suite générée : traçabilité des exigences, valeurs limites, transitions d'état, indépendance et maintenabilité, avec un verdict daté.

Lecture seule Audit

odoo-verifier

Revue indépendante en lecture seule : fidélité de l'exécution, justesse des verdicts, couverture tenue par rapport à la promesse du plan. Il n'écrit rien et ne peut pas être influencé.

Constater, ne pas corriger en silence

Une suite rouge se rapporte, elle ne se maquille pas : aucun saut artificiel, aucune assertion affaiblie pour obtenir du vert. Ce qu'un test exige et que la bibliothèque ne sait pas encore faire devient un keyword de OdooFxLibrary, jamais un contournement dans une suite.

Prévu · Données et preuves

Des données de test valides, qui ne quittent pas le poste

Trois besoins concrets des tests d'ERP, inscrits au backlog et cadrés le 23 septembre 2026. Rien de tout cela n'est encore implémenté.

Identifiants

Identifiants métier valides par construction

SIREN, SIRET, numéro de TVA intracommunautaire et IBAN fictifs mais valides, fournis par un paquet Robot Framework partagé avec SAPFX. Une graine journalisée permet de rejouer un échec avec la même donnée.

SIREN / SIRET TVA Graine rejouable
Documents

Devis, factures et bons de livraison lus en PDF

Le PDF est récupéré par la route de rapport d'Odoo avec la session authentifiée, puis son texte est vérifié. Un PDF sans couche texte échoue en le disant, jamais par une lecture vide.

Rapports Odoo Texte normalisé Montants localisés
E-mails

Une boîte mail de test locale

Le serveur SMTP sortant d'Odoo pointe vers une boîte Mailpit en conteneur local, lue par son API : attente bornée d'un message, contenu, liens. Jamais une boîte publique.

Mailpit SMTP local Zéro fuite
Feuille de route

Du socle à la version 1.0, dans cet ordre

État au 13 octobre 2026. Les échéances sont des objectifs, pas des engagements.

1

Socle du projet · en place

Dépôt public, licence Apache 2.0, intégration continue, garde de rédaction, mémoire du projet et définition des cinq agents. Deux instances Odoo de test (16 et 19) sont provisionnées avec leurs données de démonstration.

2

Canal RPC de la bibliothèque · livré en 0.1.0

Lecture, écriture fermée par défaut et journalisée, appel de méthodes métier, preuve de la cible ; XML-RPC jusqu'à Odoo 18, JSON-2 à partir d'Odoo 19. Les trente premiers keywords documentés.

3

Première campagne en direct · faite le 1er octobre 2026

Le devis de vente, du plan observé à la suite jouée : 15 suites RPC et 65 tests sur Odoo 16 et 19 (création, confirmation, envoi, annulation et retour arrière, droits, article stocké), générés par les agents et relus par une revue indépendante.

4

Distribution · 0.1.0 le 5 octobre 2026, 0.2.0 le 13 octobre 2026

Paquet robotframework-odoofx sur PyPI (0.1.0 le 5 octobre, 0.2.0 le 13 octobre), documentation des keywords en ligne et dépôt public synchronisé.

5

Canal web et introspection de l'ORM · livrés en 0.2.0

Par la bibliothèque Browser : connexion avec preuve de la base et de la série, navigation par identifiants externes de menus, lecture des vues et des enregistrements, saisie et enregistrement de formulaires (dates, listes de sélection, cases à cocher, relations, lignes), boutons d'action, déconnexion ; en lecture, les champs, les relations, les modèles et les états de modules par RPC. 69 keywords documentés, 68 avec un exemple rejoué en Robot Framework. Seconde campagne : huit suites web et ORM, 52 tests joués en direct sur Odoo 16 et 19 du 8 au 13 octobre 2026.

6

Agents outillés · plugin livré, suite à venir

Le plugin rf-mcp et la surcouche odoofx-mcp (état de session : connexion RPC, session web, formulaire non enregistré, journal des écritures) existent dans l'atelier privé et ont passé 19 contrôles sur 19 de bout en bout sur Odoo 16 et 19. À venir : l'état d'un enregistrement par l'ORM et une première réparation de suite par odoo-healer, qui n'a encore réparé aucune suite.

7

Couverture du canal web · à venir

Les boutons qui ouvrent un assistant, les lignes de section et de note, la suppression de ligne, les champs numériques formatés et un produit stockable saisi à l'écran, chacun avec sa preuve en direct sur Odoo 16 et 19 avant toute publication.

8

Multi-versions et intégration continue · à venir, visé fin 2026

La détection de version existe ; restent l'adaptation à chaque version, la correspondance des menus et des libellés, la mesure sur Odoo 14, 15, 17 et 18 (aujourd'hui 16 et 19 seulement), des instances Docker décrites dans le dépôt et une matrice de CI sur les versions ciblées.

9

Version 1.0 · visée 2027

Signatures stabilisées, fonctions prises en charge documentées version par version, versions ciblées mesurées. Les échéances sont des objectifs, pas des engagements.

Prise en main

Installer depuis PyPI, en une commande

Le paquet robotframework-odoofx s'installe depuis PyPI (Python 3.10 ou plus, Robot Framework 7.4 ou plus) et la documentation de ses 69 keywords est en ligne. Les identifiants passent par la ligne de commande, jamais par une suite.

# Installer la bibliothèque depuis PyPI
pip install robotframework-odoofx

# Option : la bibliothèque Browser, pour le canal web
pip install "robotframework-odoofx[web]"
rfbrowser init            # navigateurs Playwright, une seule fois
*** Settings ***
Library    OdooFxLibrary

*** Test Cases ***
Lire l'état d'un devis
    Connect To Odoo    http://localhost:8069    ma_base    admin    ${PASSWORD}    channel=xmlrpc
    Assert Quotation Status Is    sale    S00004
    [Teardown]    Disconnect From Odoo

# Lancement : le secret passe par la ligne de commande
# robot -v "PASSWORD: Secret:<secret>" lire_devis.robot
Questions d'architecture

Comprendre ODOOFX

Les réponses courtes aux questions qu'on nous pose sur l'état du projet, les versions visées et la place d'ODOOFX dans l'écosystème AI Cabra.

ADR 01 · État du projet v0.2.0 · PyPI

Où en est ODOOFX aujourd'hui ?

ODOOFX est en phase alpha, version 0.2.0, publiée sur PyPI le 13 octobre 2026 (la 0.1.0 date du 5 octobre). Deux canaux fonctionnent et sont éprouvés en direct sur Odoo 16 et Odoo 19. Le canal RPC : lecture, écriture fermée par défaut et journalisée, preuve de la cible, par XML-RPC jusqu'à Odoo 18 et par l'API JSON-2 à partir d'Odoo 19. Le client web, par la bibliothèque Browser : connexion avec preuve de la cible, navigation par identifiants externes de menus, lecture des vues, saisie et enregistrement de formulaires, boutons d'action. 23 suites et 117 tests ont été joués sur les deux instances (55 sur Odoo 16, 62 sur Odoo 19), écrits à partir de plans observés sur les instances. Pas encore couverts : les boutons qui ouvrent un assistant, les lignes de section et de note, la suppression de ligne. Aucun résultat sur une instance client n'est revendiqué.

  • Code ouvert dès le premier jour : le dépôt public reflète l'état réel, sans vitrine.
  • Des chiffres mesurés, pas anticipés : chaque résultat publié dit son périmètre et ses limites.
ADR 02 · Versions & API Une base de code

Quelles versions d'Odoo ODOOFX vise-t-il ?

Odoo Community et Enterprise, depuis la version 14, avec une seule base de code et une détection de version plutôt qu'une branche par version. Le développement s'appuie sur Odoo 16, dernier client web historique, et sur Odoo 19, la plus récente : ce sont les deux versions éprouvées à ce jour. Odoo 19 déprécie les points d'entrée /xmlrpc et /jsonrpc au profit de l'API JSON-2, avec un retrait annoncé en version 22 : la bibliothèque parle XML-RPC jusqu'à Odoo 18 et JSON-2, avec une clé API, à partir d'Odoo 19.

  • Deux générations de référence : Odoo 16 et Odoo 19 en conteneurs locaux.
  • API anticipée : JSON-2 en service avant le retrait des anciens points d'entrée.
ADR 03 · Canaux Web + RPC + ORM

Pourquoi tester Odoo par l'API et l'ORM en plus de l'interface ?

L'interface prouve le parcours de l'utilisateur, mais elle est lente et sensible aux changements d'affichage. Les appels RPC préparent les données et vérifient l'état réel des enregistrements sans passer par l'écran ; l'introspection ORM fournit aux agents les modèles, les champs et les états de workflow réels plutôt que des hypothèses. Un même test peut ainsi agir par l'interface et contrôler par l'API.

  • Agir par l'écran, vérifier par l'API : un contrôle qui ne dépend pas de l'affichage.
  • Des specs fondées sur l'instance : les agents lisent l'ORM, ils ne devinent pas.
ADR 04 · Écosystème AI Cabra Suite

Comment ODOOFX s'articule-t-il avec SAPFX et rf-test-agents ?

rf-test-agents définit la méthode commune : le Spec-Test-Driven Development et le contrat des cinq agents. SAPFX l'applique à SAP, ODOOFX à Odoo, sans la forker : une amélioration de méthode trouvée sur Odoo remonte dans rf-test-agents puis redescend dans les autres verticales. ODOOFX apporte ce qui est propre à Odoo : perception ORM, canaux RPC, lecture des vues et des états de workflow.

  • Une méthode, plusieurs ERP : les mêmes agents raisonnent de la même façon sur SAP et sur Odoo.
  • Aucune dépendance de code : chaque verticale garde son cycle de vie.
Preuves & périmètre

Résultats mesurés et périmètre de validation

Tester Odoo avec Robot Framework par l'API RPC et par l'interface web, avec l'introspection de l'ORM. Revu le 13 octobre 2026. Les sources publiées et les conditions de mesure sont précisées ci-dessous.

Tests Odoo & Cadrage

Vous testez Odoo, ou vous allez devoir le faire ?

Montée de version, modules sur mesure, recette d'un projet d'intégration : parlons de vos parcours critiques. Vos cas réels orientent la feuille de route d'ODOOFX.

  • Un échange technique, pas commercial
  • Vos données restent en France
Découvrir la méthode STDD

ou directement par courriel :