SuperAPI AI 工具集

frappe-testing

测试与质量

查看项目

更新于 10-15 15:35

技能介绍

Frappe Testing 是面向 Frappe 应用的测试技能,基于 Frappe 框架内置的测试框架,帮助开发者编写和运行单元测试、集成测试与 UI 测试。

用途 该技能适用于以下场景:为 DocType 控制器编写单元测试;为工作流和 API 编写集成测试;运行已有的测试套件;调试测试失败;为 Frappe 应用搭建 CI 流水线。

使用前需要的输入 需要准备:要测试的应用名称;用于执行测试的站点名称;可选指定要测试的模块或 DocType;测试环境(开发站点或专用测试站点)。

主要能力

  1. 运行测试:支持按应用、按模块、按 DocType 或单个测试文件运行测试,并支持详细输出。
  2. 编写 DocType 测试:在 DocType 目录旁创建 test_<doctype_name>.py,继承 frappe.tests.utils.FrappeTestCase,通过 setUp 创建测试数据、tearDown 清理数据,可测试创建、校验、工作流等行为。
  3. 编写 API 测试:测试白名单方法、权限拒绝等场景,使用 frappe.set_user() 切换用户上下文。
  4. 权限测试:创建带特定角色的用户,验证 frappe.has_permission 的读写删权限。
  5. 使用测试夹具:通过 test_records.json 加载测试数据,并在测试中引用。
  6. UI 测试:使用 Cypress 运行 UI 测试,支持无头模式。

使用方式 环境准备: bench setup requirements --dev bench --site <site> migrate

运行测试: bench --site <site> run-tests --app my_app bench --site <site> run-tests --module my_app.my_module.tests bench --site <site> run-tests --doctype "My DocType" bench --site <site> run-tests --app my_app -v bench --site <site> run-tests --module my_app.doctype.sample_doc.test_sample_doc

运行 UI 测试: bench --site <site> run-ui-tests my_app bench --site <site> run-ui-tests my_app --headless

验证标准:所有测试通过;测试之间相互隔离、无污染;测试运行时间在 5 分钟以内以获得快速反馈;CI 流水线在每次提交时运行测试。

适用场景 适合 Frappe 应用开发过程中增加测试覆盖、排查测试失败、验证权限逻辑,以及为应用建立持续集成测试流程。

限制与注意事项

  • 测试文件命名需以 test_ 开头,类名和方法名需遵循约定,否则测试可能找不到。
  • 测试需保证隔离,缺少清理会导致数据库错误或测试污染。
  • 测试中遇到权限错误时,可在 setup 中使用 frappe.set_user("Administrator")。
  • 避免不必要的夹具,外部服务应使用 mock,不要在测试中调用真实 API。
  • 应使用测试夹具加载数据,而非在每个测试中手动创建;在 tearDown() 中删除创建的记录或使用 frappe.db.rollback()。
  • 每个测试应独立,不依赖执行顺序;使用 frappe.set_user() 显式设置用户上下文。
  • 常见错误包括:未继承 FrappeTestCase、缺少数据库回滚、异步测试不稳定、测试实现而非行为、硬编码测试数据、跳过权限测试。
  • 复杂夹具、UI 测试模式和 CI 设置可参考 references/fixtures.md、references/cypress.md、references/ci-testing.md 等文档。