33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""在线模式下的端到端任务测试,验证所有任务在模拟 API 下能顺利执行。"""
|
||
import logging
|
||
import pytest
|
||
|
||
from .task_test_utils import (
|
||
TASK_SPECS,
|
||
FakeAPIClient,
|
||
create_test_config,
|
||
get_db_operations,
|
||
)
|
||
|
||
|
||
@pytest.mark.parametrize("spec", TASK_SPECS, ids=lambda spec: spec.code)
|
||
def test_task_online_mode(spec, tmp_path):
|
||
"""针对每个 TaskSpec 验证:模拟 API 数据下依旧能完整跑完 ETL,并正确统计。"""
|
||
archive_dir = tmp_path / "archive"
|
||
temp_dir = tmp_path / "tmp"
|
||
config = create_test_config("ONLINE", archive_dir, temp_dir)
|
||
fake_api = FakeAPIClient({spec.endpoint: spec.sample_records})
|
||
logger = logging.getLogger(f"test_online_{spec.code.lower()}")
|
||
|
||
with get_db_operations() as db_ops:
|
||
task = spec.task_cls(config, db_ops, fake_api, logger)
|
||
result = task.execute()
|
||
|
||
assert result["status"] == "SUCCESS"
|
||
assert result["counts"]["fetched"] == len(spec.sample_records)
|
||
assert result["counts"]["inserted"] == len(spec.sample_records)
|
||
if hasattr(db_ops, "commits"):
|
||
assert db_ops.commits == 1
|
||
assert db_ops.rollbacks == 0
|