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.
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.
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.
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.
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.
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.
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.
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.
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.
The Odoo mobile app (Appium) stays out of scope for the first version.
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 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.
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.
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.
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.
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.
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.
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.
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.
odoo-verifier
Independent read-only review: execution fidelity, verdict correctness, coverage held against the plan's promise. It writes nothing and cannot be influenced.
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.
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.
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.
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.
From foundation to version 1.0, in this order
Status as of 13 October 2026. Dates are targets, not commitments.
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.
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.
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.
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.
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.
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.
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.
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.
Version 1.0 · aimed for 2027
Stabilised signatures, supported features documented version by version, targeted versions measured. Dates are targets, not commitments.
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
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.
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.
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.
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.
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.
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.
- 117 live tests on Odoo 16 and 19 23 suites played on two development Docker instances between 1 and 13 October 2026: 55 tests on Odoo 16, 62 on Odoo 19. The RPC sales quotation flow (15 suites, 65 tests: creation, confirmation, sending, cancellation and rollback, a salesperson's rights, a stored product, negative cases, run on 1 October); the web client (read-only exploration, entering a contact, entering and confirming a quotation on screen) and ORM introspection (8 suites, 52 tests, run from 8 to 13 October). No customer instance. Internal test runs, 1 to 13 October 2026
- 0.2.0 published on PyPI Published on 13 October 2026, after 0.1.0 of 5 October: pip install robotframework-odoofx, Python 3.10 to 3.14, Robot Framework 7.4 or later. Installed from PyPI in a fresh environment, it exposes its 69 keywords. Alpha phase: signatures may still change before 1.0. robotframework-odoofx package on PyPI
- 69 documented keywords RPC and web channels and ORM introspection, all documented by Libdoc; the 69th, Create New Quotation, is a skeleton that only warns. XML-RPC up to Odoo 18, JSON-2 from Odoo 19; web client through the Browser library. Not covered: buttons that open a wizard, section and note lines, line deletion. Keyword documentation (Libdoc)
- 68 examples replayed in Robot Framework Each of the 68 keywords that are not a skeleton carries a usage example, replayed as written in Robot Framework against Odoo 16 on 13 October 2026 (68 of 68, nothing left on the instance). A ledger of fingerprints forbids an example from changing without being replayed. Internal measurement, no customer instance. Internal replay, 13 October 2026
- 849 unit tests Measured on 13 October 2026 on the development workstation, without Odoo: they check the library against local Odoo doubles, the public export, the repository guards and the ledger of replayed examples, not an Odoo instance. Internal measurement, 13 October 2026
- 19 end-to-end checks through rf-mcp ODOOFX's rf-mcp plugin and its odoofx-mcp overlay, with a session state tool (RPC connection, web session, unsaved form, write journal), passed 19 checks out of 19 through the real tools of rf-mcp 0.36, on Odoo 16 then on Odoo 19, read-only. Tooling of the private workshop, not in the PyPI package. Internal check, 13 October 2026
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