Odoo Vertical · v0.2.0 on PyPI · Apache 2.0

ODOOFX · Odoo Test Automation for Robot Framework

ODOOFX (the robotframework-odoofx package) is an open-source Robot Framework library for Odoo test automation, Community and Enterprise: the RPC API, the web UI and the ORM, with the five agents and the Spec-Test-Driven Development method already proven on SAP. Version 0.2.0 is on PyPI: its two channels, the RPC API (XML-RPC and JSON-2) and the web client (login, navigation, reading of views, form entry and saving, action buttons), are proven live on Odoo 16 and 19. This page says what exists, what is being built and in which order.

117 Tests run live Odoo 16 and 19 · 23 suites
69 Documented keywords Version 0.2.0 · on PyPI
849 Unit tests Without Odoo · 13 October 2026
0 € License cost Open source Apache 2.0
The challenge

An ERP that changes every year, tests that must keep up

Odoo ships one major version a year, every company extends it with modules and customisations, and its APIs evolve. A generic testing tool sees web pages; ODOOFX aims to see models, fields and workflow states.

Upgrades

One major version a year

Menus, labels and views change from one version to the next. ODOOFX aims for a single codebase with version detection, rather than one test suite per version maintained in parallel.

Version detection Menu mapping Normalised labels
Business modules

Modules and customisations specific to each company

Sales, inventory, accounting, community modules and in-house developments: the agents start from the actual instance (models, fields, views), not from a generic description of Odoo.

Community Enterprise Custom modules
Changing APIs

APIs that change shape

Odoo 19 deprecates /xmlrpc and /jsonrpc in favour of the JSON-2 API, with removal announced for version 22. The ODOOFX RPC channel already supports both paths: XML-RPC up to Odoo 18, JSON-2 from Odoo 19.

XML-RPC JSON-2 (Odoo 19) Picked by version
Architecture

Three channels to act and verify

The same principle as SAPFX, which unifies SAP GUI, Fiori and the APIs: a test acts through the channel closest to the user's journey and verifies through the most direct one.

Channel 1

Web UI

The Odoo web client driven by the Browser library (Playwright): login with target proof, menu navigation by external ids, reading of views, form entry and saving (text, dates, selection lists by code, checkboxes, relations, lines), action buttons and status checks. This is the journey the user experiences. Working in 0.2.0: screen writes closed by default and journaled, and a form left half-typed is never saved by accident. To come: buttons that open a wizard, section and note lines, line deletion.

Browser / Playwright Forms Menus
Channel 2

RPC APIs

Create, read, update, search and delete records, call a business method (confirm, cancel) without going through the screen. Working since 0.1.0: writes closed by default and journaled, target proven (URL, database, version) before any write.

XML-RPC JSON-2 CRUD
Channel 3

ORM introspection

Read the fields of a model with their type and relations, the models whose name contains a text, the state of a module, the codes of a selection field, the workflow state of a record and the id behind an external identifier: in 0.2.0, proven in reading on Odoo 16 (XML-RPC) and 19 (JSON-2). This is what the agents read to write a spec.

Models Fields Workflow states

The Odoo mobile app (Appium) stays out of scope for the first version.

Use cases

What 0.2.0 automates today

Three uses covered by the published version, through the API and on screen, proven on Odoo 16 and 19.

Regression

Regression tests through the API

Replay a business flow (quotation, confirmation, sending, cancellation) over XML-RPC or JSON-2, or on screen in the web client (entering a contact, entering then confirming a quotation with its button), and check state codes, whatever the UI language. The same version-neutral business layer runs on Odoo 16 and 19.

State codes XML-RPC / JSON-2 Odoo 16 and 19 Entry on screen
Test data

Clean, traceable test data

Every record created carries a run marker; every write is journaled (planned, done, failed, unknown) and its removal is proven on the identified record. Writes stay closed until the connection allows them.

Run marker Write journal Rollback
Rights and target

Access rights and target proof

Check that a user belongs, or not, to a group named by its external identifier, and prove the Odoo URL, database and version before any write: two Odoo versions can run side by side with no risk of confusion.

Groups External identifiers Expected version
STDD Method

Five agents, one shared method

ODOOFX applies the Spec-Test-Driven Development defined in rf-test-agents: the specification, written in human language and confronted with the live Odoo instance, drives the test; the test drives the library. The same logic as TDD, one brick earlier: the spec, green by default in theory, is confronted with the real system before any test is written. The agents ran the first campaign (two plans observed on Odoo 16 and 19, fifteen RPC suites generated and run live, an independent read-only review and an ISTQB review), then a second one: eight web and ORM suites run live, six of them checked by the independent review and the ISTQB review. They live in a private workshop repository, with an rf-mcp plugin and the odoofx-mcp overlay; PyPI and the public repository ship the library.

Exploration specs/

odoo-planner

Confronts the human spec (goal, user story, BDD scenario, existing suite) with the actual instance: views, ORM models and fields, workflow states. It writes the observed version under specs/, reviewed by a human.

Generation .robot

odoo-generator

Produces the Robot Framework suite from the plan, every step executed live before it is written, and seals it with the plan's SHA256 fingerprint: a plan changed without regeneration fails the guard.

Bounded repair resources/

odoo-healer

Repairs the resources/ layer, never the test or its assertions. Fixed budgets (2 candidates, 20 calls, 900 seconds) and five verdicts, including application_defect when Odoo itself has changed.

Standard design ISTQB

odoo-istqb

Designs replayable ISTQB test plans and cases, and reviews every generated suite: requirement traceability, boundary values, state transitions, independence and maintainability, with a dated verdict.

Read only Audit

odoo-verifier

Independent read-only review: execution fidelity, verdict correctness, coverage held against the plan's promise. It writes nothing and cannot be influenced.

Report, never fix silently

A red suite gets reported, not disguised: no artificial skip, no weakened assertion to get green. What a test needs and the library cannot do yet becomes an OdooFxLibrary keyword, never a workaround in a suite.

Planned · Data and evidence

Valid test data that never leaves the workstation

Three concrete needs of ERP testing, entered in the backlog and framed on 23 September 2026. None of this is implemented yet.

Identifiers

Business identifiers valid by construction

Fictitious but valid French company numbers (SIREN, SIRET), EU VAT numbers and IBANs, provided by a Robot Framework package shared with SAPFX. A logged seed replays a failure with the same data.

SIREN / SIRET VAT Replayable seed
Documents

Quotations, invoices and delivery slips read as PDF

The PDF is fetched through Odoo's report route with the authenticated session, then its text is checked. A PDF without a text layer fails and says so, never through an empty read.

Odoo reports Normalised text Localised amounts
E-mails

A local test mailbox

Odoo's outgoing SMTP server points to a Mailpit mailbox in a local container, read through its API: bounded wait for a message, content, links. Never a public mailbox.

Mailpit Local SMTP Zero leakage
Roadmap

From foundation to version 1.0, in this order

Status as of 13 October 2026. Dates are targets, not commitments.

1

Project foundation · in place

Public repository, Apache 2.0 license, continuous integration, writing guard, project memory and the definition of the five agents. Two Odoo test instances (16 and 19) are provisioned with their demo data.

2

Library RPC channel · delivered in 0.1.0

Reads, writes closed by default and journaled, business method calls, target proof; XML-RPC up to Odoo 18, JSON-2 from Odoo 19. The first thirty documented keywords.

3

First live campaign · done on 1 October 2026

The sales quotation, from observed plan to executed suite: 15 RPC suites and 65 tests on Odoo 16 and 19 (creation, confirmation, sending, cancellation and rollback, rights, stored product), generated by the agents and checked by an independent review.

4

Distribution · 0.1.0 on 5 October 2026, 0.2.0 on 13 October 2026

The robotframework-odoofx package on PyPI (0.1.0 on 5 October, 0.2.0 on 13 October), the keyword documentation online and the public repository in sync.

5

Web channel and ORM introspection · delivered in 0.2.0

Through the Browser library: login with proof of the database and series, navigation by menu external ids, reading of views and records, form entry and saving (dates, selection lists, checkboxes, relations, lines), action buttons, logout; for reading, fields, relations, models and module states over RPC. 69 documented keywords, 68 with an example replayed in Robot Framework. Second campaign: eight web and ORM suites, 52 tests played live on Odoo 16 and 19 from 8 to 13 October 2026.

6

Tooled agents · plugin delivered, more to come

The rf-mcp plugin and the odoofx-mcp overlay (session state: RPC connection, web session, unsaved form, write journal) exist in the private workshop and passed 19 checks out of 19 end to end on Odoo 16 and 19. To come: the state of a record through the ORM and a first suite repair by odoo-healer, which has not repaired any suite yet.

7

Web channel coverage · to come

Buttons that open a wizard, section and note lines, line deletion, formatted numeric fields and a stored product entered on screen, each proven live on Odoo 16 and 19 before any release.

8

Multi-version and continuous integration · to come, aimed for late 2026

Version detection exists; still to do: adaptation to each version, menu and label mapping, measurement on Odoo 14, 15, 17 and 18 (only 16 and 19 today), Docker instances described in the repository and a CI matrix across the targeted versions.

9

Version 1.0 · aimed for 2027

Stabilised signatures, supported features documented version by version, targeted versions measured. Dates are targets, not commitments.

Getting started

Install from PyPI, in one command

The robotframework-odoofx package installs from PyPI (Python 3.10 or later, Robot Framework 7.4 or later) and the documentation of its 69 keywords is online. Credentials go through the command line, never into a suite.

# Install the library from PyPI
pip install robotframework-odoofx

# Optional: the Browser library, for the web channel
pip install "robotframework-odoofx[web]"
rfbrowser init            # Playwright browsers, once
*** Settings ***
Library    OdooFxLibrary

*** Test Cases ***
Read A Quotation State
    Connect To Odoo    http://localhost:8069    my_database    admin    ${PASSWORD}    channel=xmlrpc
    Assert Quotation Status Is    sale    S00004
    [Teardown]    Disconnect From Odoo

# Run it: the secret goes through the command line
# robot -v "PASSWORD: Secret:<secret>" read_quotation.robot
Architecture questions

Understanding ODOOFX

Short answers to the questions we get about the project's status, the targeted versions and where ODOOFX fits in the AI Cabra ecosystem.

ADR 01 · Project status v0.2.0 · PyPI

Where does ODOOFX stand today?

ODOOFX is in its alpha phase, version 0.2.0, published on PyPI on 13 October 2026 (0.1.0 dates from 5 October). Two channels work and are proven live on Odoo 16 and Odoo 19. The RPC channel: reads, writes closed by default and journaled, target proof, through XML-RPC up to Odoo 18 and through the JSON-2 API from Odoo 19. The web client, through the Browser library: login with target proof, navigation by menu external ids, reading of views, form entry and saving, action buttons. 23 suites and 117 tests were played on the two instances (55 on Odoo 16, 62 on Odoo 19), written from plans observed on the instances. Not covered yet: buttons that open a wizard, section and note lines, line deletion. No result on a customer instance is claimed.

  • Open code from day one: the public repository reflects the actual state, no showcase.
  • Measured figures, not anticipated ones: every published result states its scope and limits.
ADR 02 · Versions & APIs One codebase

Which Odoo versions does ODOOFX target?

Odoo Community and Enterprise, from version 14 onwards, with a single codebase and version detection rather than one branch per version. Development relies on Odoo 16, the last legacy web client, and Odoo 19, the most recent release: these are the two versions proven so far. Odoo 19 deprecates the /xmlrpc and /jsonrpc endpoints in favour of the JSON-2 API, with removal announced for version 22: the library speaks XML-RPC up to Odoo 18 and JSON-2, with an API key, from Odoo 19.

  • Two reference generations: Odoo 16 and Odoo 19 in local containers.
  • API anticipated: JSON-2 in service before the legacy endpoints are removed.
ADR 03 · Channels Web + RPC + ORM

Why test Odoo through the API and the ORM as well as the UI?

The UI proves the user's journey, but it is slow and sensitive to display changes. RPC calls prepare data and check the actual state of records without going through the screen; ORM introspection gives the agents the real models, fields and workflow states instead of assumptions. The same test can act through the UI and check through the API.

  • Act on screen, verify through the API: a check that does not depend on the display.
  • Specs grounded in the instance: the agents read the ORM, they do not guess.
ADR 04 · Ecosystem AI Cabra Suite

How does ODOOFX relate to SAPFX and rf-test-agents?

rf-test-agents defines the common method: Spec-Test-Driven Development and the five-agent contract. SAPFX applies it to SAP, ODOOFX to Odoo, without forking it: a method improvement found on Odoo goes back to rf-test-agents and then down to the other verticals. ODOOFX brings what is specific to Odoo: ORM perception, RPC channels, reading views and workflow states.

  • One method, several ERPs: the same agents reason the same way on SAP and on Odoo.
  • No code dependency: each vertical keeps its own lifecycle.
Evidence & scope

Measured results and validation scope

Test Odoo with Robot Framework through the RPC API and the web UI, with ORM introspection. Reviewed on 13 October 2026. Published sources and measurement conditions are listed below.

Odoo Testing & Scoping

Testing Odoo, or about to?

Version upgrade, custom modules, acceptance of an integration project: let's talk about your critical journeys. Your real cases shape the ODOOFX roadmap.

  • A technical exchange, not a sales pitch
  • Your data stays in France
Discover the STDD method

or directly via email: