9.9 KiB
9.9 KiB
单元测试清单(280 passed / 1 skipped)
最后更新:2026-02-12,基于
pytest tests/unit -v输出。
概览
| 分类 | 测试文件 | 测试数 | 说明 |
|---|---|---|---|
| ETL 任务(在线) | test_etl_tasks_online.py |
14 | FakeAPI 模拟在线抓取,验证 14 个 ODS 任务 E/T/L |
| ETL 任务(离线) | test_etl_tasks_offline.py |
14 | 本地 JSON 回放,验证离线入库链路 |
| ETL 任务(分阶段) | test_etl_tasks_stages.py |
42 | 14 个任务 × 3 阶段(Extract/Transform/Load) |
| ODS 通用任务 | test_ods_tasks.py |
~20+ | ODS 通用加载器任务测试 |
| 解析器 | test_parsers.py |
~10+ | 数据类型解析(日期/金额/枚举) |
| 配置管理 | test_config.py |
~10+ | AppConfig 加载、点号路径、分层覆盖 |
| 接口路由 | test_endpoint_routing.py |
~5+ | 近期/历史接口路由规则 |
| 报告工具 | test_reporting.py |
~5+ | 汇总格式化工具 |
| 审计扫描 | test_audit_*.py(6 个文件) |
~40+ | 仓库审计:文件清单、流程树、文档对齐、报告属性 |
| 关系指数 | test_relation_index_base.py |
~5+ | RS/OS/MS/ML 指数基础逻辑 |
| 调度器重构(新增) | 见下方 | 51 | TaskRegistry / TaskExecutor / PipelineRunner / CLI / E2E |
调度器重构新增测试(51 个)
test_task_registry.py — TaskRegistry 单元测试(16 个)
| 测试类 | 测试方法 | 验证内容 |
|---|---|---|
TestRegisterAndMetadata |
test_register_with_defaults |
仅传 task_code + task_class 时使用默认元数据 |
test_register_with_full_metadata |
完整元数据注册(layer/task_type) | |
test_register_utility_task |
工具类任务 requires_db_config=False | |
test_case_insensitive_lookup |
task_code 大小写不敏感 | |
test_get_metadata_unknown_returns_none |
未注册任务返回 None | |
TestCreateTask |
test_create_task_returns_instance |
创建任务实例(接口不变) |
test_create_task_unknown_raises |
未知任务抛 ValueError | |
TestGetTasksByLayer |
test_returns_matching_tasks |
按层查询返回匹配任务 |
test_case_insensitive_layer |
层名大小写不敏感 | |
test_no_match_returns_empty |
无匹配返回空列表 | |
test_none_layer_excluded |
layer=None 不被任何层查询返回 | |
TestIsUtilityTask |
test_utility_task |
requires_db_config=False → True |
test_normal_task |
requires_db_config=True → False | |
test_unknown_task |
未注册任务 → False | |
TestGetAllTaskCodes |
test_returns_all_codes |
返回所有已注册代码 |
test_empty_registry |
空注册表返回空列表 |
test_task_registry_properties.py — TaskRegistry 属性测试(3 个类,~300 次迭代)
| 测试类 | 测试方法 | Property | 验证内容 | 迭代次数 |
|---|---|---|---|---|
TestProperty8MetadataRoundTrip |
test_metadata_round_trip |
P8 | 任意 task_code/requires_db/layer/task_type 组合注册后,get_metadata 返回完全相同的值 | 100 |
TestProperty9BackwardCompatibleDefaults |
test_legacy_register_uses_defaults |
P9 | 仅传 task_code + task_class 时,默认 requires_db_config=True、layer=None、task_type="etl" | 100 |
TestProperty10GetTasksByLayer |
test_get_tasks_by_layer_matches_manual_filter |
P10 | 注册一组任务后,按层查询结果与手动过滤完全一致 | 100 |
test_config_properties.py — 配置映射属性测试(1 个类,100 次迭代)
| 测试类 | 测试方法 | Property | 验证内容 | 迭代次数 |
|---|---|---|---|---|
TestProperty11FlowToDataSourceMapping |
test_pipeline_flow_maps_to_data_source |
P11 | pipeline_flow(FULL/FETCH_ONLY/INGEST_ONLY)→ data_source(hybrid/online/offline)映射一致 | 100 |
test_task_executor_properties.py — TaskExecutor 属性测试(4 个类,7 个方法,~700 次迭代)
| 测试类 | 测试方法 | Property | 验证内容 | 迭代次数 |
|---|---|---|---|---|
TestProperty1DataSourceDeterminesPath |
test_flow_includes_fetch |
P1 | data_source 为 online/hybrid 时 fetch=True,offline 时 fetch=False | 100 |
test_flow_includes_ingest |
P1 | data_source 为 offline/hybrid 时 ingest=True,online 时 ingest=False | 100 | |
test_fetch_and_ingest_consistency |
P1 | hybrid 两者皆 True,online 仅 fetch,offline 仅 ingest | 100 | |
TestProperty2SuccessAdvancesCursor |
test_success_with_window_advances_cursor |
P2 | 成功任务调用 cursor_mgr.advance,传入正确的 window_start/window_end | 100 |
TestProperty3FailureMarksFailAndReraises |
test_exception_marks_fail_and_reraises |
P3 | 异常时 run_tracker.update_run(status="FAIL") 并重新抛出原始异常 | 100 |
TestProperty4UtilityTaskDeterminedByMetadata |
test_utility_task_skips_cursor_and_run_tracker |
P4 | 工具类任务(requires_db_config=False)跳过游标和运行记录 | 100 |
test_non_utility_task_uses_cursor_and_run_tracker |
P4 | 非工具类任务使用游标和运行记录 | 100 |
test_pipeline_runner_properties.py — PipelineRunner 属性测试(3 个类,8 个方法,~800 次迭代)
| 测试类 | 测试方法 | Property | 验证内容 | 迭代次数 |
|---|---|---|---|---|
TestProperty5PipelineNameToLayers |
test_layers_match_pipeline_definition |
P5 | run() 返回的 layers 与 PIPELINE_LAYERS[pipeline] 完全一致 | 100 |
test_resolve_tasks_called_with_correct_layers |
P5 | _resolve_tasks 接收的层列表与定义一致 | 100 | |
TestProperty6ProcessingModeControlsFlow |
test_increment_executes_iff_mode_contains_increment |
P6 | 增量 ETL 执行当且仅当 mode 包含 "increment" | 100 |
test_verification_executes_iff_mode_contains_verify |
P6 | 校验流程执行当且仅当 mode 包含 "verify" | 100 | |
TestProperty7PipelineSummaryCompleteness |
test_summary_has_required_fields |
P7 | 返回字典包含 status/pipeline/layers/results/verification_summary | 100 |
test_results_length_equals_executed_tasks |
P7 | results 长度等于实际执行的任务数 | 100 | |
test_pipeline_and_layers_match_input |
P7 | 返回的 pipeline 和 layers 与输入一致 | 100 | |
test_increment_only_has_no_verification |
P7 | increment_only 模式下 verification_summary 为 None | 100 |
test_filter_verify_tables.py — 校验表过滤单元测试(9 个)
| 测试类 | 测试方法 | 验证内容 |
|---|---|---|
TestFilterVerifyTables |
test_none_input_returns_none |
输入 None 返回 None |
test_empty_list_returns_none |
空列表返回 None | |
test_dwd_layer_filters_correctly |
DWD 层过滤:保留 dwd_/dim_/fact_ 前缀 | |
test_dws_layer_filters_correctly |
DWS 层过滤:保留 dws_ 前缀 | |
test_index_layer_filters_correctly |
INDEX 层过滤:保留 v_/wbi_/nci_ 等前缀 | |
test_ods_layer_filters_correctly |
ODS 层过滤:保留 ods_ 前缀 | |
test_unknown_layer_returns_normalized |
未知层返回归一化后的全部表名 | |
test_layer_case_insensitive |
层名大小写不敏感 | |
test_whitespace_and_empty_entries_stripped |
空白和空条目被过滤 |
test_cli_args.py — CLI 参数解析单元测试(14 个)
| 测试类 | 测试方法 | 验证内容 |
|---|---|---|
TestDataSourceArg |
test_data_source_valid_values (×3) |
--data-source 接受 online/offline/hybrid |
test_data_source_default_is_none |
未指定时默认 None | |
TestResolveDataSource |
test_explicit_data_source_returns_directly |
显式 --data-source 直接返回 |
test_data_source_takes_priority_over_pipeline_flow |
--data-source 优先于 --pipeline-flow | |
test_pipeline_flow_maps_with_deprecation_warning (×3) |
旧参数映射 + 弃用警告 | |
test_neither_arg_defaults_to_hybrid |
两者都未指定时默认 hybrid | |
TestBuildCliOverrides |
test_data_source_online_sets_run_key |
--data-source 写入 run.data_source |
test_pipeline_flow_sets_both_keys |
旧参数同时写入 pipeline.flow 和 run.data_source | |
test_default_data_source_is_hybrid |
默认 run.data_source 为 hybrid | |
TestPipelineAndTasks |
test_pipeline_and_tasks_both_parsed |
--pipeline + --tasks 同时解析 |
test_e2e_flow.py — 端到端流程集成测试(4 个)
| 测试类 | 测试方法 | 验证内容 |
|---|---|---|
TestTraditionalModeE2E |
test_run_tasks_executes_utility_task_and_returns_results |
TaskExecutor.run_tasks 工具类任务端到端 |
TestPipelineModeE2E |
test_pipeline_delegates_to_executor_and_returns_structure |
PipelineRunner → TaskExecutor 委托 + 返回结构 |
test_pipeline_verify_only_skips_increment |
verify_only 模式跳过增量 ETL | |
TestSchedulerThinWrapper |
test_scheduler_delegates_run_tasks |
ETLScheduler 薄包装层正确委托 TaskExecutor/PipelineRunner |
属性测试(PBT)汇总
| Property | 所属组件 | 验证需求 | 迭代次数 |
|---|---|---|---|
| P1 | TaskExecutor | data_source 参数决定执行路径(Req 1.2) | 300 |
| P2 | TaskExecutor | 成功任务推进游标(Req 1.3) | 100 |
| P3 | TaskExecutor | 失败任务标记 FAIL 并重新抛出(Req 1.4) | 100 |
| P4 | TaskExecutor | 工具类任务由元数据决定(Req 1.6, 4.2) | 200 |
| P5 | PipelineRunner | 管道名称→层列表映射(Req 2.1) | 200 |
| P6 | PipelineRunner | processing_mode 控制执行流程(Req 2.3, 2.4) | 200 |
| P7 | PipelineRunner | 管道结果汇总完整性(Req 2.6) | 400 |
| P8 | TaskRegistry | 元数据 round-trip(Req 4.1) | 100 |
| P9 | TaskRegistry | 向后兼容默认值(Req 4.4) | 100 |
| P10 | TaskRegistry | 按层查询任务(Req 4.3) | 100 |
| P11 | AppConfig | pipeline_flow → data_source 映射一致性(Req 8.1-8.4, 5.2) | 100 |
总计:11 个属性,~1900 次迭代。