Odoo自动化测试框架:Selenium与Cypress端到端测试
你是否还在为Odoo系统的手动测试耗费大量时间?是否经常遇到回归测试不全面的问题?本文将带你了解如何使用Selenium与Cypress构建Odoo端到端测试框架,实现测试流程自动化,提升测试效率和质量。读完本文,你将能够:掌握Odoo测试框架基础、搭建Selenium和Cypress测试环境、编写和运行端到端测试用例、集成测试到CI/CD流程。
Odoo测试框架概述
Odoo提供了完善的测试框架,位于odoo/tests目录下。该框架支持单元测试、集成测试和端到端测试,通过一系列工具类和方法简化测试流程。核心测试模块包括common.py、case.py和result.py,分别提供测试基础功能、测试用例管理和测试结果处理。
测试框架核心组件
- 测试用例基类:提供数据库操作、用户认证等基础功能,位于odoo/tests/common.py
- 测试执行器:负责测试用例的加载和执行,位于odoo/tests/loader.py
- 测试结果处理器:收集和展示测试结果,位于odoo/tests/result.py
Odoo测试框架采用Python unittest风格,测试用例通常以test_开头命名,如test_sale_order_flow。测试方法可以使用框架提供的断言工具,如assertRecordValues用于验证模型记录值,assertXMLEqual用于比较XML内容。
Selenium在Odoo测试中的应用
Selenium是一个广泛使用的Web应用测试工具,通过模拟用户操作实现端到端测试。Odoo测试框架中提供了Selenium集成,位于odoo/tests/common.py中的ChromeBrowser类封装了Selenium WebDriver的核心功能。
测试环境搭建
首先安装Selenium依赖:
pip install selenium
Odoo测试框架会自动下载和配置ChromeDriver,无需手动安装。测试时通过browser_js方法启动浏览器并执行测试脚本:
def test_create_customer(self):
self.browser_js(
'/web',
'''
// 登录系统
$('.login-form input[name="login"]').val('admin');
$('.login-form input[name="password"]').val('admin');
$('.login-form button[type="submit"]').click();
// 导航到客户页面
$("a[data-menu-xmlid='contacts.menu_contacts']").click();
// 点击创建按钮
$("button.o_list_button_add").click();
// 填写客户信息
$("input[name='name']").val('Test Customer');
$("button.o_form_button_save").click();
// 验证客户创建成功
assert($(".o_notification_title").text().includes('保存成功'));
''',
login='admin'
)
常用测试操作
Selenium在Odoo测试中支持多种用户操作模拟:
- 表单填写:通过CSS选择器定位元素并设置值
- 按钮点击:模拟用户点击操作
- 页面导航:通过菜单XMLID定位并导航到目标页面
- 弹窗处理:验证通知消息和弹窗内容
测试过程中可以使用take_screenshot方法捕获屏幕截图,便于失败时分析问题:
self.browser.take_screenshot(prefix='customer_create_')
Cypress测试框架集成
Cypress是另一个流行的前端测试工具,相比Selenium具有更快的执行速度和更好的调试体验。虽然Odoo官方测试框架未直接集成Cypress,但可以通过自定义测试脚本来实现集成。
Cypress测试环境配置
首先安装Cypress:
npm install cypress --save-dev
创建Cypress配置文件cypress.json:
{
"baseUrl": "http://localhost:8069",
"viewportWidth": 1280,
"viewportHeight": 720
}
编写Cypress测试用例
在cypress/integration/odoo/test_sale.js中编写销售订单测试用例:
describe('Sales Order Flow', () => {
beforeEach(() => {
// 登录Odoo系统
cy.visit('/web/login');
cy.get('input[name="login"]').type('admin');
cy.get('input[name="password"]').type('admin');
cy.get('button[type="submit"]').click();
});
it('should create a new sales order', () => {
// 导航到销售订单页面
cy.get('a[data-menu-xmlid="sale.menu_sale_order"]').click();
// 点击创建按钮
cy.get('button.o_list_button_add').click();
// 选择客户
cy.get('div[name="partner_id"] input').click();
cy.get('.ui-autocomplete li:contains("Agrolait")').click();
// 添加产品
cy.get('button.o_field_x2many_list_row_add').click();
cy.get('div[name="product_id"] input').click();
cy.get('.ui-autocomplete li:contains("Office Chair")').click();
// 设置数量
cy.get('input[name="product_uom_qty"]').clear().type('2');
// 保存订单
cy.get('button.o_form_button_save').click();
// 验证订单创建成功
cy.get('.o_notification_title').should('contain', '保存成功');
});
});
测试执行与报告
运行Cypress测试:
npx cypress run
Cypress会生成详细的测试报告和视频录制,位于cypress/videos目录。可以通过Cypress Dashboard查看测试结果和失败截图。
Cypress与Selenium测试对比
| 特性 | Selenium | Cypress |
|---|---|---|
| 架构 | 客户端-服务器 | 内置浏览器 |
| 执行速度 | 较慢 | 较快 |
| 调试能力 | 一般 | 优秀,时间旅行功能 |
| 异步处理 | 需要显式等待 | 自动等待 |
| 截图/录屏 | 需手动实现 | 内置支持 |
| 浏览器支持 | 多浏览器 | 主要支持Chrome和Electron |
在Odoo测试中,Selenium更适合与现有Python测试框架集成,而Cypress提供更好的前端测试体验和开发效率。建议根据团队技术栈和测试需求选择合适的工具,或采用混合策略:核心功能使用Selenium集成到单元测试,前端交互复杂的场景使用Cypress单独测试。
测试最佳实践
测试用例设计原则
- 独立性:每个测试用例应独立运行,不依赖其他测试的结果
- 可重复性:测试用例应能够在任何环境中重复执行
- 可读性:使用清晰的命名和注释,如
test_sale_order_with_discount - 覆盖率:关注核心业务流程,如销售订单、采购流程、库存管理等
测试数据管理
Odoo测试框架提供了setUp和tearDown方法,用于测试前后的数据准备和清理:
def setUp(self):
super().setUp()
# 创建测试数据
self.partner = self.env['res.partner'].create({'name': 'Test Partner'})
def tearDown(self):
# 清理测试数据
self.partner.unlink()
super().tearDown()
CI/CD集成
将测试集成到CI/CD流程,每次代码提交自动运行测试:
# .github/workflows/test.yml
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests
run: python odoo-bin -i all --test-enable
总结与展望
本文介绍了Odoo自动化测试框架的基础,以及如何使用Selenium和Cypress进行端到端测试。通过自动化测试,可以显著提高Odoo系统的质量和稳定性,减少回归测试成本。未来,随着Odoo版本的不断更新,测试框架将进一步完善,提供更多便捷的测试工具和方法。
建议团队根据项目需求选择合适的测试工具,建立完善的测试流程,并持续优化测试用例。通过测试自动化,让开发人员更专注于功能实现,提升整体开发效率。
参考资料
- Odoo官方测试文档:odoo/tests/README.md
- Selenium Python文档:https://selenium-python.readthedocs.io/
- Cypress官方文档:https://docs.cypress.io/
- Odoo测试示例:addons/sale/tests
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



