..................................................................F..... [ 23%] ........................................................................ [ 47%] ........................................................................ [ 71%] ....F..FFFFFFFF.F...........................................F..F........ [ 95%] ............... [100%] ================================== FAILURES =================================== __________ TestGetEtlReadonlyConnection.test_uses_etl_config_params ___________ tests\test_database.py:94: in test_uses_etl_config_params assert connect_kwargs["dbname"] == "etl_feiqiu" E AssertionError: assert 'test_etl_feiqiu' == 'etl_feiqiu' E E - etl_feiqiu E + test_etl_feiqiu E ? +++++ __________ TestRunningState.test_is_running_true_when_process_active __________ tests\test_task_executor.py:118: in test_is_running_true_when_process_active assert executor.is_running("exec-1") is True E AssertionError: assert False is True E + where False = is_running('exec-1') E + where is_running = .is_running ____________________ TestReadStream.test_read_stdout_lines ____________________ tests\test_task_executor.py:146: in test_read_stdout_lines await executor._read_stream("exec-1", stream, "stdout", collector) ^^^^^^^^^^^^^^^^^^^^^ E AttributeError: 'TaskExecutor' object has no attribute '_read_stream' ____________________ TestReadStream.test_read_stderr_lines ____________________ tests\test_task_executor.py:158: in test_read_stderr_lines await executor._read_stream("exec-1", stream, "stderr", collector) ^^^^^^^^^^^^^^^^^^^^^ E AttributeError: 'TaskExecutor' object has no attribute '_read_stream' ________________ TestReadStream.test_read_stream_none_is_safe _________________ tests\test_task_executor.py:166: in test_read_stream_none_is_safe await executor._read_stream("exec-1", None, "stdout", collector) ^^^^^^^^^^^^^^^^^^^^^ E AttributeError: 'TaskExecutor' object has no attribute '_read_stream' __________________ TestReadStream.test_broadcast_during_read __________________ tests\test_task_executor.py:175: in test_broadcast_during_read await executor._read_stream("exec-1", stream, "stdout", collector) ^^^^^^^^^^^^^^^^^^^^^ E AttributeError: 'TaskExecutor' object has no attribute '_read_stream' ____________________ TestExecute.test_successful_execution ____________________ tests\test_task_executor.py:218: in test_successful_execution assert "processing..." in update_kwargs["output_log"] E AssertionError: assert 'processing...' in '' ______________________ TestExecute.test_failed_execution ______________________ tests\test_task_executor.py:245: in test_failed_execution assert update_kwargs["status"] == "failed" E AssertionError: assert 'success' == 'failed' E E - failed E + success _________________ TestExecute.test_exception_during_execution _________________ tests\test_task_executor.py:263: in test_exception_during_execution assert update_kwargs["status"] == "failed" E AssertionError: assert 'success' == 'failed' E E - failed E + success _____________ TestExecute.test_subscribers_notified_on_completion _____________ tests\test_task_executor.py:290: in test_subscribers_notified_on_completion assert "[stdout] line" in messages E AssertionError: assert '[stdout] line' in ['[stderr] [2026-02-25 02:42:10] INFO | etl_billiards | 配置加载完成', '[stderr] [2026-02-25 02:42:10] INFO | etl_billiard... 02:42:11] INFO | etl_billiards | 使用回溯时间窗口: 2026-02-24 02:42:11.615145+08:00 ~ 2026-02-25 02:42:11.615145+08:00', ...] ___________________ TestCancel.test_cancel_running_process ____________________ tests\test_task_executor.py:331: in test_cancel_running_process assert result is True E assert False is True _____________ TestFlows.test_flows_returns_three_processing_modes _____________ tests\test_tasks_router.py:124: in test_flows_returns_three_processing_modes assert len(data["processing_modes"]) == 3 E AssertionError: assert 4 == 3 E + where 4 = len([{'description': '只处理新增和变更的数据', 'id': 'increment_only', 'name': '仅增量处理'}, {'description': '校验现有数据并修复不一致', 'id': 'verif...nt_verify', 'name': '增量 + 校验修复'}, {'description': '用 API 返回数据的实际时间范围处理全部层,无需校验', 'id': 'full_window', 'name': '全窗口处理'}]) _____________________ TestFlows.test_processing_mode_ids ______________________ tests\test_tasks_router.py:143: in test_processing_mode_ids assert mode_ids == {"increment_only", "verify_only", "increment_verify"} E AssertionError: assert {'full_window...'verify_only'} == {'increment_o...'verify_only'} E E Extra items in the left set: E 'full_window' E Use -v to get more diff =========================== short test summary info =========================== FAILED tests/test_database.py::TestGetEtlReadonlyConnection::test_uses_etl_config_params FAILED tests/test_task_executor.py::TestRunningState::test_is_running_true_when_process_active FAILED tests/test_task_executor.py::TestReadStream::test_read_stdout_lines - ... FAILED tests/test_task_executor.py::TestReadStream::test_read_stderr_lines - ... FAILED tests/test_task_executor.py::TestReadStream::test_read_stream_none_is_safe FAILED tests/test_task_executor.py::TestReadStream::test_broadcast_during_read FAILED tests/test_task_executor.py::TestExecute::test_successful_execution - ... FAILED tests/test_task_executor.py::TestExecute::test_failed_execution - Asse... FAILED tests/test_task_executor.py::TestExecute::test_exception_during_execution FAILED tests/test_task_executor.py::TestExecute::test_subscribers_notified_on_completion FAILED tests/test_task_executor.py::TestCancel::test_cancel_running_process FAILED tests/test_tasks_router.py::TestFlows::test_flows_returns_three_processing_modes FAILED tests/test_tasks_router.py::TestFlows::test_processing_mode_ids - Asse... 13 failed, 290 passed in 146.30s (0:02:26)