iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0
Odoo

用 Odoo 打造數位轉型引擎:從基礎建置到跨領域應用系列 第 23

Day 23:Odoo 的測試框架 (Unit Test 與 Integration Test)

  • 分享至 

  • xImage
  •  

在專案開發過程中,隨著模組與功能逐漸增多,系統的穩定性與可靠性就變得至關重要。Odoo 本身內建了完整的 測試框架,支援 單元測試 (Unit Test)整合測試 (Integration Test),讓開發者能在開發階段就驗證程式邏輯是否正確,避免部署後出現重大錯誤。


1. 為什麼需要測試?

  • 確保品質:驗證新功能不會破壞既有功能。
  • 提升維護性:讓開發團隊能更安心地進行模組升級或修改。
  • 持續整合 (CI/CD):能將測試自動化,確保每次部署品質一致。

2. Odoo 測試框架架構

Odoo 的測試基於 Python 的 unittest,並結合 Odoo 的 ORM 與模組環境。

  • 測試類別繼承 TransactionCaseSavepointCase
  • 測試檔案通常放在模組目錄下的 tests/ 資料夾。
  • 使用 odoo-bin 啟動測試,或透過 CI 工具自動執行。

3. 單元測試 (Unit Test)

單元測試專注於「單一功能」是否正確。

範例:測試書籍建立功能 (tests/test_library_book.py)

from odoo.tests.common import TransactionCase

class TestLibraryBook(TransactionCase):

    def test_create_book(self):
        book = self.env['library.book'].create({
            'name': 'Odoo Basics',
            'author': 'Tom'
        })
        self.assertEqual(book.name, 'Odoo Basics')
        self.assertEqual(book.author, 'Tom')

執行測試:

./odoo-bin -c odoo.conf -d mydb --test-enable --stop-after-init -i library

4. 整合測試 (Integration Test)

整合測試用來驗證「多個模組與流程」是否能協同工作。

範例:測試借書流程

from odoo.tests.common import SavepointCase

class TestLibraryFlow(SavepointCase):

    @classmethod
    def setUpClass(cls):
        super().setUpClass()
        cls.book = cls.env['library.book'].create({'name': 'Odoo Advanced'})
        cls.member = cls.env['library.member'].create({'name': 'Alice'})

    def test_borrow_book(self):
        self.book.member_id = self.member.id
        self.assertEqual(self.book.member_id.name, 'Alice')

這段測試會檢查「借書流程」是否正確關聯會員與書籍。


5. 測試數據 (Demo Data)

Odoo 測試可以搭配 demo 資料使用,模擬真實環境。

  • TransactionCase:每次測試會回滾交易,保證資料不污染。
  • SavepointCase:比 TransactionCase 效率更高,適合大規模測試。

6. CI/CD 自動化測試

在實務專案中,建議將測試整合進 GitHub Actions、GitLab CI 或 Jenkins

  • 每次程式提交後自動執行測試。
  • 部署前驗證所有測試通過。
  • 搭配 coverage 工具檢查測試覆蓋率。

小結

Odoo 測試框架讓開發者能:

  • 使用 Python unittest 搭配 ORM 驗證邏輯。
  • 撰寫 Unit Test 確保功能正確,Integration Test 驗證流程完整。
  • 搭配 CI/CD 自動化測試,提高系統穩定性。

在下一篇文章中,我將介紹 Odoo 性能優化與 Scalability(效能與擴展性),探討如何讓 Odoo 在大型專案中依舊保持高效。


上一篇
Day 22:Odoo 的前端框架 Owl 與 Web 客製化
下一篇
Day 24:Odoo 性能優化與 Scalability(效能與擴展性)
系列文
用 Odoo 打造數位轉型引擎:從基礎建置到跨領域應用24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言