Se rendre au contenu

Tester et migrer un module Odoo personnalisé vers Odoo 20

Un module personnalisé qui fonctionne sous Odoo 19 n'est pas assuré de fonctionner sous Odoo 20. Ce tutoriel propose une démarche prudente en cinq étapes : copie de la base, manifeste, installation et mise à jour, tests automatisés, vérification manuelle.
Développement OdooNiveau intermédiaireOdoo 20Python

En bref

  • Méthode : copie de la base, manifeste, mise à jour en ligne de commande, tests, vérification des écrans.
  • Outils : -i, -u, --test-tags et un journal lu ligne par ligne.
  • À vérifier : la liste officielle des changements incompatibles et le JavaScript sous Owl 3.

Pourquoi tester ses modules avant de passer à Odoo 20 ?

Un module personnalisé s'appuie sur des détails internes d'Odoo : modèles, vues, noms de champs, composants JavaScript. Quand la version majeure change, ces détails peuvent changer aussi. Un module qui s'installe sans erreur peut tout de même afficher une vue cassée ou calculer un mauvais montant.

La démarche ci-dessous est volontairement prudente : une copie de la base, des journaux lus avec attention, des tests automatisés, puis une vérification manuelle.

ÉtapeObjectifStatut
Copier la baseTravailler sans risque pour la productionConfirmé
Mettre à jour le manifesteDéclarer la version et les dépendancesConfirmé
Installer et mettre à jour en ligne de commandeRepérer les erreurs et avertissementsConfirmé
Écrire des testsProtéger les règles métierConfirmé
Liste précise des changements Odoo 19 vers 20Adapter le code aux rupturesÀ vérifier
Compatibilité du JavaScript avec Owl 3Garder les écrans personnalisés fonctionnelsÀ vérifier

Avant de commencer

Ce tutoriel ne remplace pas les notes de version officielles. Nous n'avons pas confirmé la liste exacte des changements incompatibles entre Odoo 19 et Odoo 20, et nous ne l'inventons pas ici.

Étape 1 : comment préparer une copie de la base ?

Ne testez jamais sur la production. Faites une copie de la base de données et de son dossier de fichiers joints (filestore), puis démarrez Odoo 20 dessus sur un serveur de test.

terminalbash
# Copier la base PostgreSQL (aucune connexion active sur la source)
createdb -T prod_db test_odoo20

# Ou passer par une sauvegarde
pg_dump -Fc prod_db > prod_db.dump
createdb test_odoo20
pg_restore -d test_odoo20 prod_db.dump

Fichiers joints

Copiez aussi le filestore de la base source vers le dossier de données du serveur de test, sinon les pièces jointes et images seront manquantes.

Courriels sortants

Désactivez l'envoi de courriels et les actions planifiées sur la copie, sinon vos clients pourraient recevoir des messages de test.

Étape 2 : que modifier dans le manifeste du module ?

Commencez par le fichier __manifest__.py : la version, les dépendances et les fichiers de données.

mon_module/__manifest__.pypython
{
    "name": "Mon module personnalisé",
    "version": "20.0.1.0.0",
    "category": "Custom",
    "summary": "Adapté pour Odoo 20",
    "depends": ["base", "sale"],
    "data": [
        "security/ir.model.access.csv",
        "views/mon_modele_views.xml",
    ],
    "license": "LGPL-3",
    "installable": True,
}

Vérifiez que chaque module listé dans depends existe toujours dans Odoo 20 sous le même nom. Un module renommé ou fusionné empêchera l'installation avant même d'arriver à votre code.

Étape 3 : comment installer et mettre à jour le module en ligne de commande ?

Deux essais sont utiles : une installation sur une base vide, qui prouve que le module est complet, et une mise à jour sur la copie de la base, qui reproduit votre situation réelle.

terminalbash
# 1. Installation sur une base vide
./odoo-bin -d test_vide -i mon_module --stop-after-init

# 2. Mise à jour sur la copie de production
./odoo-bin -d test_odoo20 -u mon_module --stop-after-init 2>&1 | tee mise_a_jour.log

# 3. Repérer les problèmes dans le journal
grep -nE "ERROR|CRITICAL|WARNING|deprecated" mise_a_jour.log

Lisez chaque ligne WARNING et deprecated : ce sont les messages d'Odoo qui annoncent ce qui cassera bientôt. Corrigez d'abord les ERROR, puis les avertissements.

Étape 4 : comment écrire un test qui protège vos règles métier ?

Un test automatisé vous dit en quelques secondes si une règle métier a changé de comportement après la mise à jour. Voici un modèle simple à adapter à votre module.

mon_module/tests/test_mon_module.pypython
from odoo.tests import TransactionCase, tagged


@tagged("post_install", "-at_install")
class TestMonModule(TransactionCase):

    def test_creation_partenaire(self):
        partner = self.env["res.partner"].create({"name": "Client test"})
        self.assertTrue(partner.id)
        self.assertEqual(partner.name, "Client test")
mon_module/tests/__init__.pypython
from . import test_mon_module
terminalbash
./odoo-bin -d test_odoo20 -u mon_module --test-enable --test-tags /mon_module --stop-after-init

Ce qu'il faut tester en priorité

Les calculs de montants, les droits d'accès, les transitions d'état (brouillon, confirmé, annulé) et tout ce qui touche à la facturation. Un test sur la TPS et la TVQ vaut son poids en or.

Étape 5 : que vérifier à la main, écran par écran ?

Les tests automatisés ne voient pas les écrans. Parcourez les vues personnalisées dans le navigateur, avec un compte ordinaire et un compte administrateur.

  • Ouvrir chaque vue formulaire, liste et kanban modifiée par votre module
  • Tester les boutons, les rapports PDF et les modèles de courriel
  • Essayer les droits d'accès avec un utilisateur sans privilège
  • Ouvrir la console du navigateur et chercher les erreurs JavaScript
  • Refaire un cycle complet : devis, commande, facture, paiement

JavaScript et Owl 3

Odoo 20 s'appuie sur la version 3 d'Owl. Si votre module ajoute des composants, des widgets ou des vues JavaScript, testez-les en priorité. Nous ne présentons volontairement aucun code Owl 3 ici : référez-vous à la documentation officielle du framework.

Comment organiser la bascule vers la production ?

  • Faire valider la copie de test par les utilisateurs clés
  • Suivre la procédure de mise à niveau documentée par Odoo pour votre hébergement
  • Prévoir une sauvegarde complète juste avant la bascule
  • Choisir une fenêtre calme, par exemple un week-end hors période de fin de mois
  • Garder un plan de retour arrière et une personne joignable après la mise en ligne

Si vos modules ont été écrits il y a plusieurs années, ou par plusieurs équipes, un inventaire préalable évite de mauvaises surprises : quels modules sont réellement utilisés, lesquels peuvent être retirés, lesquels remplacés par une fonction native.

Une mise à jour réussie, c'est un journal propre, des tests au vert et des utilisateurs qui ne remarquent rien.

Foire aux questions sur la migration de modules vers Odoo 20

Mes modules personnalisés fonctionneront-ils dans Odoo 20 sans modification ?

Pas forcément. Chaque version majeure d'Odoo peut modifier des API internes, des vues et du code JavaScript. Le seul moyen de le savoir est d'installer le module sur une copie de la base Odoo 20 et de lire les journaux, puis de lancer les tests.

Quelle version doit porter mon module dans le manifeste ?

Par convention, la version commence par celle d'Odoo, par exemple 20.0.1.0.0 pour la première version du module sur Odoo 20.

Quelle commande applique la mise à jour d'un module en ligne de commande ?

L'option -u de odoo-bin, par exemple odoo-bin -d ma_base -u mon_module --stop-after-init, met à jour le module puis arrête le serveur. L'option -i installe un module sur une base.

Comment exécuter uniquement les tests de mon module ?

Avec l'option --test-tags suivie de la barre oblique et du nom du module, par exemple --test-tags /mon_module, en ajoutant --test-enable ou en l'utilisant avec l'installation ou la mise à jour du module.

Mon module contient du JavaScript, y a-t-il un risque particulier ?

Oui. Odoo 20 s'appuie sur la version 3 du framework Owl. Tout composant, widget ou vue personnalisé doit être testé manuellement dans le navigateur. Nous n'avons pas confirmé la liste précise des changements, consultez la documentation officielle.

Faut-il migrer soi-même la base de données de production ?

Le chemin de mise à niveau dépend de votre hébergement (Odoo Online, Odoo.sh ou serveur autogéré). Suivez la procédure de mise à niveau documentée par Odoo pour votre cas, et faites valider vos modules personnalisés avant la bascule.

Vos modules personnalisés sont-ils prêts pour Odoo 20 ?

On les passe en revue avec vous, on teste sur une copie de votre base et on vous dit ce qui doit être adapté.

Parler à un expert Kuantiik

Sources

  1. Odoo, documentation de mise à niveau, odoo.com
  2. Notes de version d'Odoo 20 et documentation du framework Owl : à consulter avant d'adapter le code JavaScript
Vos modules Odoo personnalisés sont-ils prêts pour Odoo 20 ? Parler à un expert
Une question sur la migration de vos modules ?

On répond sous 24h ouvrées aux questions des entreprises québécoises.

Écrire à Kuantiik

Avant de partir

Demandez une évaluation de vos modules personnalisés avant la mise à niveau vers Odoo 20.

Demander mon évaluation


in Odoo
Odoo 20 : migrer de XML-RPC vers l’API JSON-2 en Python