From 7bd1e72ffdc579c71ba9e4c632b24391c97feb28 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 3 Aug 2022 23:59:20 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E3=83=AB=E3=83=BC=E3=83=97=E4=B8=AD?= =?UTF-8?q?=E3=81=AE=E6=83=B3=E5=AE=9A=E5=A4=96=E3=81=AE=E4=BE=8B=E5=A4=96?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=82=82=E8=BF=BD=E5=8A=A0=E3=80=82=E3=83=AD?= =?UTF-8?q?=E3=82=B0=E5=87=BA=E5=8A=9B=E6=99=82=E3=81=AB=E3=83=90=E3=82=B0?= =?UTF-8?q?=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/crm-datafetch/src/controller.py | 2 +- ecs/crm-datafetch/tests/test_controller.py | 149 +++++++++++++++------ 2 files changed, 108 insertions(+), 43 deletions(-) diff --git a/ecs/crm-datafetch/src/controller.py b/ecs/crm-datafetch/src/controller.py index a7a6fe00..dc8f784d 100644 --- a/ecs/crm-datafetch/src/controller.py +++ b/ecs/crm-datafetch/src/controller.py @@ -94,7 +94,7 @@ def _fetch_crm_data(fetch_target_objects: FetchTargetObjects, execute_datetime: except Exception as e: logger.info( - f'I-ERR-04 [{object_info.get(OBJECT_NAME_KEY)}] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します', e, exc_info=True) + f'I-ERR-04 [{object_info.get(OBJECT_NAME_KEY)}] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [{e}]', exc_info=True) continue return process_result diff --git a/ecs/crm-datafetch/tests/test_controller.py b/ecs/crm-datafetch/tests/test_controller.py index d9d21112..c7cf4ebd 100644 --- a/ecs/crm-datafetch/tests/test_controller.py +++ b/ecs/crm-datafetch/tests/test_controller.py @@ -371,7 +371,8 @@ class TestController: 1. データ取得準備処理でシステム例外が発生した場合、エラーで終了すること 2. データ取得準備処理で想定外の例外が発生した場合、エラーで終了すること Arranges: - - データ取得準備処理でシステム例外が発生するようにする + - パラメータ1:データ取得準備処理でシステム例外が発生するようにする + - パラメータ2:データ取得準備処理で想定外の例外が発生するようにする Expects: - データ取得準備処理で例外が発生すること - データ取得準備処理で発生した例外のログメッセージが出力されていること @@ -386,14 +387,22 @@ class TestController: assert mock_check_object_info_process.called is False assert generate_log_message_tuple( log_level=logging.ERROR, - log_message=message.format()) in caplog.record_tuples, 'データ取得準備処理で発生した例外のログメッセージが出力されていること' + log_message=message) in caplog.record_tuples, 'データ取得準備処理で発生した例外のログメッセージが出力されていること' - def test_raise_check_object_info_process(self, s3_client, monkeypatch, caplog): + @pytest.mark.parametrize( + 'exception, message', + [ + (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{CHK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), + (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') + ]) + def test_raise_check_object_info_process(self, s3_client, monkeypatch, caplog, exception, message): """ Cases: - オブジェクト情報形式チェック処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること + 1. オブジェクト情報形式チェック処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること + 2. オブジェクト情報形式チェック処理で想定外の例外が発生した場合、エラーログが送出され、後続の終了に移行すること Arranges: - - オブジェクト情報形式チェック処理の1回のみでシステム例外が発生するようにする + - パラメータ1:オブジェクト情報形式チェック処理でシステム例外が発生するようにする + - パラメータ2:オブジェクト情報形式チェック処理で想定外の例外が発生するようにする Expects: - オブジェクト情報形式チェック処理で例外が発生する - オブジェクト情報形式チェック処理で発生した例外のログメッセージが出力されている @@ -420,7 +429,7 @@ class TestController: ] } mock_target_objects = FetchTargetObjects(objects) - mock_target_object_first = ForTestMeDaCaCRMDataFetchException('E-PRE-01', CHK_JP_NAME, '例外発生') + mock_target_object_first = exception('E-PRE-01', CHK_JP_NAME, '例外発生') mock_target_object_second = TargetObject(objects['objects'][1], mock_execute_datetime) mock_target_object_third = TargetObject(objects['objects'][2], mock_execute_datetime) mock_return_values = [mock_target_object_first, mock_target_object_second, mock_target_object_third] @@ -459,17 +468,25 @@ class TestController: 'Contact': 'success', 'Call2_vod__c': 'success' } - assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{CHK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + assert generate_log_message_tuple(log_message=message) in caplog.record_tuples assert generate_log_message_tuple(log_message=f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{expect_process_result}]') in caplog.record_tuples assert generate_log_message_tuple( log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples - def test_raise_set_datetime_period_process(self, s3_client, monkeypatch, caplog): + @pytest.mark.parametrize( + 'exception, message', + [ + (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{DATE_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), + (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') + ]) + def test_raise_set_datetime_period_process(self, s3_client, monkeypatch, caplog, exception, message): """ Cases: - データ取得期間設定処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること + 1. データ取得期間設定処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること + 2. データ取得期間設定処理で想定外の例外が発生した場合、エラーログが送出され、後続の終了に移行すること Arranges: - - データ取得期間設定チェック処理の1回のみでシステム例外が発生するようにする + - パラメータ1:データ取得期間設定処理でシステム例外が発生するようにする + - パラメータ2:データ取得期間設定処理で想定外の例外が発生するようにする Expects: - データ取得期間設定チェック処理で例外が発生する - データ取得期間設定チェック処理で発生した例外のログメッセージが出力されている @@ -506,7 +523,7 @@ class TestController: }, mock_execute_datetime) mock_prepare_data_fetch_process = MagicMock(return_value=(mock_target_objects, mock_execute_datetime, {})) mock_check_object_info_process = MagicMock(side_effect=mock_return_values) - mock_set_datetime_period_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( + mock_set_datetime_period_process = MagicMock(side_effect=[exception( 'E-DATE-01', DATE_JP_NAME, '例外発生'), mock_last_fetch_datetime, mock_last_fetch_datetime]) mock_fetch_crm_data_process = MagicMock(return_value=[{}]) mock_backup_crm_data_process = MagicMock() @@ -536,17 +553,25 @@ class TestController: 'Contact': 'success', 'Call2_vod__c': 'success' } - assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{DATE_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + assert generate_log_message_tuple(log_message=message) in caplog.record_tuples assert generate_log_message_tuple(log_message=f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{expect_process_result}]') in caplog.record_tuples assert generate_log_message_tuple( log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples - def test_raise_fetch_crm_data_process(self, s3_client, monkeypatch, caplog): + @pytest.mark.parametrize( + 'exception, message', + [ + (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{FETCH_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), + (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') + ]) + def test_raise_fetch_crm_data_process(self, s3_client, monkeypatch, caplog, exception, message): """ Cases: - CRMデータ取得処理でシステム例外が発生した場合、エラーで終了すること + 1. CRMデータ取得処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること + 2. CRMデータ取得処理で想定外の例外が発生した場合、エラーログが送出され、後続の終了に移行すること Arranges: - - CRMデータ取得処理でシステム例外が発生するようにする + - パラメータ1:CRMデータ取得処理でシステム例外が発生するようにする + - パラメータ2:CRMデータ取得処理で想定外の例外が発生するようにする Expects: - CRMデータ取得処理で例外が発生すること - CRMデータ取得処理で発生した例外のログメッセージが出力されていること @@ -583,7 +608,7 @@ class TestController: mock_prepare_data_fetch_process = MagicMock(return_value=(mock_target_objects, mock_execute_datetime, {})) mock_check_object_info_process = MagicMock(side_effect=mock_return_values) mock_set_datetime_period_process = MagicMock(return_value=mock_last_fetch_datetime) - mock_fetch_crm_data_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( + mock_fetch_crm_data_process = MagicMock(side_effect=[exception( 'E-FETCH-01', FETCH_JP_NAME, '例外発生'), {}, {}]) mock_backup_crm_data_process = MagicMock() mock_convert_crm_csv_data_process = MagicMock() @@ -612,17 +637,25 @@ class TestController: 'Contact': 'success', 'Call2_vod__c': 'success' } - assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{FETCH_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + assert generate_log_message_tuple(log_message=message) in caplog.record_tuples assert generate_log_message_tuple(log_message=f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{expect_process_result}]') in caplog.record_tuples assert generate_log_message_tuple( log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples - def test_raise_backup_crm_data_process(self, s3_client, monkeypatch, caplog): + @pytest.mark.parametrize( + 'exception, message', + [ + (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{RESBK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), + (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') + ]) + def test_raise_backup_crm_data_process(self, s3_client, monkeypatch, caplog, exception, message): """ Cases: - CRM電文データバックアップ処理でシステム例外が発生した場合、エラーで終了すること + 1. CRM電文データバックアップ処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること + 2. CRM電文データバックアップ処理で想定外の例外が発生した場合、エラーログが送出され、後続の終了に移行すること Arranges: - - CRM電文データバックアップ処理でシステム例外が発生するようにする + - パラメータ1:CRM電文データバックアップ処理でシステム例外が発生するようにする + - パラメータ2:CRM電文データバックアップ処理で想定外の例外が発生するようにする Expects: - CRM電文データバックアップ処理で例外が発生すること - CRM電文データバックアップ処理で発生した例外のログメッセージが出力されていること @@ -660,7 +693,7 @@ class TestController: mock_check_object_info_process = MagicMock(side_effect=mock_return_values) mock_set_datetime_period_process = MagicMock(return_value=mock_last_fetch_datetime) mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) - mock_backup_crm_data_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( + mock_backup_crm_data_process = MagicMock(side_effect=[exception( 'E-RESBK-01', RESBK_JP_NAME, '例外発生'), None, None]) mock_convert_crm_csv_data_process = MagicMock() mock_backup_crm_csv_data_process = MagicMock() @@ -688,17 +721,25 @@ class TestController: 'Contact': 'success', 'Call2_vod__c': 'success' } - assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{RESBK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + assert generate_log_message_tuple(log_message=message) in caplog.record_tuples assert generate_log_message_tuple(log_message=f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{expect_process_result}]') in caplog.record_tuples assert generate_log_message_tuple( log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples - def test_raise_convert_crm_csv_data_process(self, s3_client, monkeypatch, caplog): + @pytest.mark.parametrize( + 'exception, message', + [ + (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{CONV_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), + (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') + ]) + def test_raise_convert_crm_csv_data_process(self, s3_client, monkeypatch, caplog, exception, message): """ Cases: - CSV変換処理でシステム例外が発生した場合、エラーで終了すること + 1. CSV変換処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること + 2. CSV変換処理で想定外の例外が発生した場合、エラーログが送出され、後続の終了に移行すること Arranges: - - CSV変換処理でシステム例外が発生するようにする + - パラメータ1:CSV変換処理でシステム例外が発生するようにする + - パラメータ2:CSV変換処理で想定外の例外が発生するようにする Expects: - CSV変換処理で例外が発生すること - CSV変換処理で発生した例外のログメッセージが出力されていること @@ -737,7 +778,7 @@ class TestController: mock_set_datetime_period_process = MagicMock(return_value=mock_last_fetch_datetime) mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) mock_backup_crm_data_process = MagicMock() - mock_convert_crm_csv_data_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( + mock_convert_crm_csv_data_process = MagicMock(side_effect=[exception( 'E-CONV-01', CONV_JP_NAME, '例外発生'), None, None]) mock_backup_crm_csv_data_process = MagicMock() mock_copy_crm_csv_data_process = MagicMock() @@ -764,17 +805,25 @@ class TestController: 'Contact': 'success', 'Call2_vod__c': 'success' } - assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{CONV_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + assert generate_log_message_tuple(log_message=message) in caplog.record_tuples assert generate_log_message_tuple(log_message=f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{expect_process_result}]') in caplog.record_tuples assert generate_log_message_tuple( log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples - def test_raise_backup_crm_csv_data_process(self, s3_client, monkeypatch, caplog): + @pytest.mark.parametrize( + 'exception, message', + [ + (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{CSVBK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), + (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') + ]) + def test_raise_backup_crm_csv_data_process(self, s3_client, monkeypatch, caplog, exception, message): """ Cases: - CSVバックアップ処理でシステム例外が発生した場合、エラーで終了すること + 1. CSVバックアップ処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること + 2. CSVバックアップ処理で想定外の例外が発生した場合、エラーログが送出され、後続の終了に移行すること Arranges: - - CSVバックアップ処理でシステム例外が発生するようにする + - パラメータ1:CSVバックアップ処理でシステム例外が発生するようにする + - パラメータ2:CSVバックアップ処理で想定外の例外が発生するようにする Expects: - CSVバックアップ処理で例外が発生すること - CSVバックアップ処理で発生した例外のログメッセージが出力されていること @@ -814,7 +863,7 @@ class TestController: mock_fetch_crm_data_process = MagicMock(side_effect=[{}, {}, {}]) mock_backup_crm_data_process = MagicMock() mock_convert_crm_csv_data_process = MagicMock() - mock_backup_crm_csv_data_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( + mock_backup_crm_csv_data_process = MagicMock(side_effect=[exception( 'E-CSVBK-01', CSVBK_JP_NAME, '例外発生'), None, None]) mock_copy_crm_csv_data_process = MagicMock() mock_upload_last_fetch_datetime_process = MagicMock() @@ -840,17 +889,25 @@ class TestController: 'Contact': 'success', 'Call2_vod__c': 'success' } - assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{CSVBK_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + assert generate_log_message_tuple(log_message=message) in caplog.record_tuples assert generate_log_message_tuple(log_message=f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{expect_process_result}]') in caplog.record_tuples assert generate_log_message_tuple( log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples - def test_raise_copy_crm_csv_data_process(self, s3_client, monkeypatch, caplog): + @pytest.mark.parametrize( + 'exception, message', + [ + (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{UPLD_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), + (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') + ]) + def test_raise_copy_crm_csv_data_process(self, s3_client, monkeypatch, caplog, exception, message): """ Cases: - CSVアップロード処理でシステム例外が発生した場合、エラーで終了すること + 1. CSVアップロード処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること + 2. CSVアップロード処理で想定外の例外が発生した場合、エラーログが送出され、後続の終了に移行すること Arranges: - - CSVアップロード処理でシステム例外が発生するようにする + - パラメータ1:CSVアップロード処理でシステム例外が発生するようにする + - パラメータ2:CSVアップロード処理で想定外の例外が発生するようにする Expects: - CSVアップロード処理で例外が発生すること - CSVアップロード処理で発生した例外のログメッセージが出力されていること @@ -891,7 +948,7 @@ class TestController: mock_backup_crm_data_process = MagicMock() mock_convert_crm_csv_data_process = MagicMock() mock_backup_crm_csv_data_process = MagicMock() - mock_copy_crm_csv_data_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( + mock_copy_crm_csv_data_process = MagicMock(side_effect=[exception( 'E-UPLD-01', UPLD_JP_NAME, '例外発生'), None, None]) mock_upload_last_fetch_datetime_process = MagicMock() mock_upload_result_data_process = MagicMock() @@ -916,17 +973,25 @@ class TestController: 'Contact': 'success', 'Call2_vod__c': 'success' } - assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{UPLD_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + assert generate_log_message_tuple(log_message=message) in caplog.record_tuples assert generate_log_message_tuple(log_message=f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{expect_process_result}]') in caplog.record_tuples assert generate_log_message_tuple( log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples - def test_raise_upload_last_fetch_datetime_process(self, s3_client, monkeypatch, caplog): + @pytest.mark.parametrize( + 'exception, message', + [ + (ForTestMeDaCaCRMDataFetchException, f'I-ERR-03 [Account] の[{UPD_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します'), + (ForTestException, 'I-ERR-04 [Account] の処理中に予期せぬエラーが発生しました 次のオブジェクトの処理に移行します エラー内容: [例外発生]') + ]) + def test_raise_upload_last_fetch_datetime_process(self, s3_client, monkeypatch, caplog, exception, message): """ Cases: - 前回取得日時ファイル更新処理でシステム例外が発生した場合、エラーで終了すること + 1. 前回取得日時ファイル更新処理でシステム例外が発生した場合、エラーログが送出され、後続の終了に移行すること + 2. 前回取得日時ファイル更新処理で想定外の例外が発生した場合、エラーログが送出され、後続の終了に移行すること Arranges: - - 前回取得日時ファイル更新処理でシステム例外が発生するようにする + - パラメータ1:前回取得日時ファイル更新処理でシステム例外が発生するようにする + - パラメータ2:前回取得日時ファイル更新処理で想定外の例外が発生するようにする Expects: - 前回取得日時ファイル更新処理で例外が発生すること - 前回取得日時ファイル更新処理で発生した例外のログメッセージが出力されていること @@ -968,7 +1033,7 @@ class TestController: mock_convert_crm_csv_data_process = MagicMock() mock_backup_crm_csv_data_process = MagicMock() mock_copy_crm_csv_data_process = MagicMock() - mock_upload_last_fetch_datetime_process = MagicMock(side_effect=[ForTestMeDaCaCRMDataFetchException( + mock_upload_last_fetch_datetime_process = MagicMock(side_effect=[exception( 'E-UPD-01', UPD_JP_NAME, '例外発生'), None, None]) mock_upload_result_data_process = MagicMock() @@ -991,7 +1056,7 @@ class TestController: 'Contact': 'success', 'Call2_vod__c': 'success' } - assert generate_log_message_tuple(log_message=f'I-ERR-03 [Account] の[{UPD_JP_NAME}]でエラーが発生しました 次のオブジェクトの処理に移行します') in caplog.record_tuples + assert generate_log_message_tuple(log_message=message) in caplog.record_tuples assert generate_log_message_tuple(log_message=f'I-CTRL-17 すべてのオブジェクトの処理が終了しました 実行結果:[{expect_process_result}]') in caplog.record_tuples assert generate_log_message_tuple( log_level=logging.ERROR, log_message=f'E-CTRL-01 一部のデータ取得に失敗しています 詳細はログをご確認ください') in caplog.record_tuples