SuperAPI AI 工具集

test-enforcement

测试与质量

查看项目

更新于 10-16 10:48

技能介绍

用途

Test Enforcement 用于在实现任何功能或修复之后,确保代码变更具备全面的测试覆盖。它通过一套分层的工作流,在提交 PR 之前检查 Java 服务、API 集成、UI 端到端、前端组件以及 Python ingestion 各层的测试是否满足要求。

主要能力

技能的核心能力是按变更文件的路径模式识别其所属层级,并对应出所需的测试类型:

文件路径模式 层级 所需测试
openmetadata-service/src/main/ Java 后端 单元测试(90% 覆盖率)+ 集成测试
openmetadata-spec/src/main/resources/json/schema/ Schema 重新生成验证 + 下游测试
openmetadata-integration-tests/ 集成测试 验证其自身通过
ingestion/src/metadata/ Python ingestion pytest 单元测试(90% 覆盖率)
openmetadata-ui/.../ui/src/ React 前端 Jest 单元测试 + Playwright E2E
bootstrap/sql/migrations/ 数据库 验证迁移的集成测试

此外,技能提供覆盖率目标表:openmetadata-service 行覆盖率目标 90%(通过 JaCoCo 与 -P static-code-analysis 度量);openmetadata-integration-tests 的 API 端点覆盖率为变更端点的 100%;Playwright 需覆盖所有新增或变更的用户流程;Jest 组件覆盖率目标 90% 行;Python ingestion 行覆盖率目标 90%。

使用方式

工作流包含多个步骤:

  1. 识别变更文件:通过 git 或 gh 命令列出变更文件并按层分类。例如:
git diff main...HEAD --name-only
git diff --cached --name-only
gh pr diff --name-only
  1. 检查 Java 服务覆盖率:查找既有测试、运行模块覆盖率、核对 90% 行覆盖率,若不足则生成缺失测试。
CHANGED_CLASS="Foo"
find openmetadata-service/src/test -name "${CHANGED_CLASS}Test.java" -o -name "${CHANGED_CLASS}Tests.java"
find openmetadata-integration-tests/src/test -name "*${CHANGED_CLASS}*IT.java"
mvn test -pl openmetadata-service -P static-code-analysis -Dtest=<TestClass>

覆盖率报告位置:openmetadata-service/target/site/jacoco/index.html;解析 openmetadata-service/target/site/jacoco/jacoco.xml 可查看具体类覆盖率。生成测试时应测试公共方法、边界情况(null 输入、空集合、边界值)与错误路径,并使用描述性测试名;不要 mock OpenMetadata 内部类,不要测试明显的 getter/setter。

  1. 检查 API 端点集成测试:将变更代码映射到 API 端点,检查既有 *IT.java 集成测试。测试需覆盖 Create、Get、List、Update、Patch、Delete 以及自定义非 CRUD 端点。集成测试需继承 BaseEntityIT,使用 TestNamespace 做隔离,使用 OpenMetadataClient SDK 调用 API。运行验证:
mvn verify -pl openmetadata-integration-tests -Dtest=MyEntityIT
  1. 检查 Playwright E2E 测试:将变更组件映射到用户可见功能,检查既有 spec。新增页面、用户流程变更、新增权限行为、UI 缺陷修复时需要新测试。需先阅读 Playwright 开发者手册:
openmetadata-ui/src/main/resources/ui/playwright/PLAYWRIGHT_DEVELOPER_HANDBOOK.md

运行与校验:

cd openmetadata-ui/src/main/resources/ui
yarn playwright:run --grep "<test name>"
yarn lint:playwright
  1. 检查前端 Jest 单元测试:对组件变更运行带覆盖率的测试:
cd openmetadata-ui/src/main/resources/ui
yarn test --coverage --collectCoverageFrom='src/path/to/changed/**/*.{ts,tsx}' path/to/test.spec.ts

每个组件应有同目录的 .test.ts 或 .test.tsx 文件。

  1. 检查 Python ingestion 测试:
source env/bin/activate && cd ingestion
find tests/unit -name "*${CHANGED}*" -o -name "*test_${CHANGED}*"
python -m pytest tests/unit/path/to/test.py -v --cov=metadata.ingestion.source.database.my_module --cov-report=term-missing
  1. 生成覆盖率报告:汇总 Java 服务、集成测试、Playwright E2E、Python ingestion 各层结果,给出总体 PASS/FAIL。

适用场景

  • 实现任何功能或缺陷修复之后、创建 PR 之前
  • 审查 PR 以检查测试完整性时
  • 实现过程中未使用 /tdd 技能时

测试文件位置速查

openmetadata-service/src/test/java/org/openmetadata/         # Java 单元测试
openmetadata-integration-tests/src/test/java/org/openmetadata/it/  # 集成测试
openmetadata-ui/.../ui/src/**/*.test.{ts,tsx}                 # Jest 单元测试
openmetadata-ui/.../ui/playwright/e2e/                        # Playwright E2E
ingestion/tests/unit/                                         # Python 单元测试
ingestion/tests/integration/                                  # Python 集成测试

限制

资料未提供该技能的安装方式、收费模式、价格、平台兼容性及独立运行要求;上述命令与流程均依赖 OpenMetadata 仓库现有结构与工具链。