自動テスト実装 V製品マスタ

This commit is contained in:
x.azuma.m@nds-tyo.co.jp 2023-06-05 16:50:32 +09:00
parent 8e186cc3f3
commit 800f3eba45
4 changed files with 86 additions and 2 deletions

View File

@ -634,7 +634,7 @@ class TestImportFileToDb:
# teardown
def test_load_08_tran_kbn_mst_ok(self, mapper):
def test_load_09_tran_kbn_mst_ok(self, mapper):
table_name_org = mapper.get_org_table(mapper.CONDKEY_TRAN_KBN_MST)
table_name_src = mapper.get_src_table(mapper.CONDKEY_TRAN_KBN_MST)
@ -696,3 +696,66 @@ class TestImportFileToDb:
assert result_src_count[0]['count(*)'] == 6
# teardown
def test_load_10_phm_prd_mst_ok(self, mapper):
table_name_org = mapper.get_org_table(mapper.CONDKEY_PHM_PRD_MST)
table_name_src = mapper.get_src_table(mapper.CONDKEY_PHM_PRD_MST)
# setup
self.batch_context.is_vjsk_stock_import_day = True
self.db.execute(f"truncate table {table_name_src}")
# assertion1 (insert 4row)
# 処理実行
target_dict = {
"condkey": mapper.CONDKEY_PHM_PRD_MST,
"src_file_path": path.join(self.test_file_path_load_individual, "phm_prd_mst_202304280000.tsv")
}
VjskDataLoadManager.load(target_dict)
# 期待値データファイル読み込み
assert_list = create_vjsk_assertion_list(target_dict["src_file_path"])
# orgテーブル結果を取得
result_org = self.db.execute_select(f"select * from {table_name_org}")
# 突合から除外する項目
ignore_columns = ['dwh_upd_dt']
# orgテーブル結果が期待値通りかを突合
assert_table_results(result_org, assert_list, ignore_columns)
# srcテーブル結果を取得
result_src = self.db.execute_select(f"select * from {table_name_src}")
# 突合から除外する項目
ignore_columns = ['dwh_upd_dt']
# srcテーブル結果が期待値通りかを突合
assert_table_results(result_src, assert_list, ignore_columns)
# assertion2 (update 2row +insert 2row)
# 処理実行
target_dict = {
"condkey": mapper.CONDKEY_PHM_PRD_MST,
"src_file_path": path.join(self.test_file_path_load_individual, "phm_prd_mst_202304290000.tsv")
}
VjskDataLoadManager.load(target_dict)
# 期待値データファイル読み込み
assert_list = create_vjsk_assertion_list(target_dict["src_file_path"])
# orgテーブル結果を取得
result_org = self.db.execute_select(f"select * from {table_name_org}")
# 突合から除外する項目
ignore_columns = ['dwh_upd_dt']
# orgテーブル結果が期待値通りかを突合
assert_table_results(result_org, assert_list, ignore_columns)
# srcテーブル結果(orgテーブル結果のPK値で一致するもの)を取得
result_src = self.db.execute_select(
f"select * from {table_name_src} s inner join {table_name_org} o on (s.prd_cd = o.prd_cd and s.sub_num = o.sub_num)")
# 突合から除外する項目
ignore_columns = ['dwh_upd_dt']
# srcテーブル結果が期待値通りかを突合
assert_table_results(result_src, assert_list, ignore_columns)
# srcテーブル結果のレコード件数 (insert 4row + update 2row + insert 2row = 6row)
result_src_count = self.db.execute_select(f"select count(*) from {table_name_src} ")
assert result_src_count[0]['count(*)'] == 6
# teardown

View File

@ -0,0 +1,5 @@
"prd_cd" "sub_no" "prd_nm" "prd_e_nm" "mkr_cd" "mkr_inf_1" "mkr_inf_2" "phm_itm_cd" "itm_nm" "itm_sht_nm" "form_cd" "form_nm" "vol_cd" "vol_nm" "cont_cd" "cont_nm" "pkg_cd" "pkg_nm" "cnv_num" "jsk_start_dt" "prd_sale_kbn" "jsk_proc_kbn" "start_dt" "end_dt" "dsp_odr" "rec_sts_kbn" "ins_dt" "upd_dt"
"496201110" "0" "セロフェン 錠剤 50mg 30TAB" "" "F21206A0" "セロフェン 錠 50MG" "SEROPHENE TAB. 50 MG. (30)" "001" "セロフェン" "SP" "F003" "錠剤" "0000" "" "V009" "50mg" "P007" "30TAB" "30" "" "0" "0" "20080101" "20190930" "140" "0" "17-11-08 16:52:41" "19-09-19 11:42:45"
"496201127" "0" "セロフェン 錠剤 50mg 30TAB" "" "F21206A0" "セロフェン 錠 50MG" "SEROPHENE TAB. 50 MG. (30)" "001" "セロフェン" "SP" "F003" "錠剤" "0000" "" "V009" "50mg" "P007" "30TAB" "30" "" "0" "0" "20070401" "20190930" "150" "0" "17-11-08 16:52:41" "19-09-19 11:42:45"
"496300110" "2" "ゴナールエフ 皮下注ペン 300IU 1PEN" "" "F1990608" "ゴナールエフ皮下注ペン 300" "GONAL-F PEN 300IU (1) - JPN" "005" "セロスティム" "ST" "F005" "皮下注ペン" "0000" "" "V017" "300IU" "P011" "1PEN" "1" "" "0" "0" "20190501" "20190930" "100" "9" "19-04-23 16:35:36" "19-04-23 16:40:38"
"496300127" "2" "ゴナールエフ 皮下注ペン 450IU 1PEN" "" "F19D0608" "ゴナールエフ皮下注ペン450" "Gonalef Pen 450 (1)" "008" "BDマイクロファインプラス" "MF" "F005" "皮下注ペン" "0000" "" "V018" "450IU" "P011" "1PEN" "1" "" "0" "0" "20190501" "20190930" "120" "9" "19-04-23 16:37:10" "19-04-23 16:40:54"
1 prd_cd sub_no prd_nm prd_e_nm mkr_cd mkr_inf_1 mkr_inf_2 phm_itm_cd itm_nm itm_sht_nm form_cd form_nm vol_cd vol_nm cont_cd cont_nm pkg_cd pkg_nm cnv_num jsk_start_dt prd_sale_kbn jsk_proc_kbn start_dt end_dt dsp_odr rec_sts_kbn ins_dt upd_dt
2 496201110 0 セロフェン 錠剤 50mg 30TAB F21206A0 セロフェン 錠 50MG SEROPHENE TAB. 50 MG. (30) 001 セロフェン SP F003 錠剤 0000 V009 50mg P007 30TAB 30 0 0 20080101 20190930 140 0 17-11-08 16:52:41 19-09-19 11:42:45
3 496201127 0 セロフェン 錠剤 50mg 30TAB F21206A0 セロフェン 錠 50MG SEROPHENE TAB. 50 MG. (30) 001 セロフェン SP F003 錠剤 0000 V009 50mg P007 30TAB 30 0 0 20070401 20190930 150 0 17-11-08 16:52:41 19-09-19 11:42:45
4 496300110 2 ゴナールエフ 皮下注ペン 300IU 1PEN F1990608 ゴナールエフ皮下注ペン 300 GONAL-F PEN 300IU (1) - JPN 005 セロスティム ST F005 皮下注ペン 0000 V017 300IU P011 1PEN 1 0 0 20190501 20190930 100 9 19-04-23 16:35:36 19-04-23 16:40:38
5 496300127 2 ゴナールエフ 皮下注ペン 450IU 1PEN F19D0608 ゴナールエフ皮下注ペン450 Gonalef Pen 450 (1) 008 BDマイクロファインプラス MF F005 皮下注ペン 0000 V018 450IU P011 1PEN 1 0 0 20190501 20190930 120 9 19-04-23 16:37:10 19-04-23 16:40:54

View File

@ -0,0 +1,5 @@
"prd_cd" "sub_no" "prd_nm" "prd_e_nm" "mkr_cd" "mkr_inf_1" "mkr_inf_2" "phm_itm_cd" "itm_nm" "itm_sht_nm" "form_cd" "form_nm" "vol_cd" "vol_nm" "cont_cd" "cont_nm" "pkg_cd" "pkg_nm" "cnv_num" "jsk_start_dt" "prd_sale_kbn" "jsk_proc_kbn" "start_dt" "end_dt" "dsp_odr" "rec_sts_kbn" "ins_dt" "upd_dt"
"496300110" "2" "ゴナールエフ 皮下注ペン 300IU 1PEN" "" "F1990608" "ゴナールエフ皮下注ペン 300" "GONAL-F PEN 300IU (1) - JPN" "005" "セロスティム" "ST" "F005" "皮下注ペン" "0000" "" "V017" "300IU" "P011" "1PEN" "1" "20230601" "0" "0" "20190501" "20190930" "100" "9" "19-04-23 16:35:36" "19-04-23 16:40:38"
"496300127" "2" "ゴナールエフ 皮下注ペン 450IU 1PEN" "" "F19D0608" "ゴナールエフ皮下注ペン450" "Gonalef Pen 450 (1)" "008" "BDマイクロファインプラス" "MF" "F005" "皮下注ペン" "0000" "" "V018" "450IU" "P011" "1PEN" "1" "20230602" "0" "0" "20190501" "20190930" "120" "9" "19-04-23 16:37:10" "19-04-23 16:40:54"
"496300134" "2" "ゴナールエフ 皮下注ペン 900IU 1PEN" "" "F19B0608" "ゴナールエフ皮下注ペン900" "Gonalef Pen 900 (1)" "008" "BDマイクロファインプラス" "MF" "F005" "皮下注ペン" "0000" "" "V019" "900IU" "P011" "1PEN" "1" "20230603" "0" "0" "20190501" "20190930" "110" "9" "19-04-23 16:38:36" "19-04-23 16:41:05"
"496301315" "0" "プロファシー 注射剤 5000IU 10VIAL" "" "F47706A0" "プロファシー 注 5000IU" "PROFASI M AMP. 5000 IU (10)" "002" "プロファシー" "PF" "F002" "注射剤" "0000" "" "V020" "5000IU" "P005" "10VIAL" "10" "20230604" "0" "0" "20070401" "20190930" "160" "0" "17-11-08 16:52:41" "19-09-19 11:42:45"
1 prd_cd sub_no prd_nm prd_e_nm mkr_cd mkr_inf_1 mkr_inf_2 phm_itm_cd itm_nm itm_sht_nm form_cd form_nm vol_cd vol_nm cont_cd cont_nm pkg_cd pkg_nm cnv_num jsk_start_dt prd_sale_kbn jsk_proc_kbn start_dt end_dt dsp_odr rec_sts_kbn ins_dt upd_dt
2 496300110 2 ゴナールエフ 皮下注ペン 300IU 1PEN F1990608 ゴナールエフ皮下注ペン 300 GONAL-F PEN 300IU (1) - JPN 005 セロスティム ST F005 皮下注ペン 0000 V017 300IU P011 1PEN 1 20230601 0 0 20190501 20190930 100 9 19-04-23 16:35:36 19-04-23 16:40:38
3 496300127 2 ゴナールエフ 皮下注ペン 450IU 1PEN F19D0608 ゴナールエフ皮下注ペン450 Gonalef Pen 450 (1) 008 BDマイクロファインプラス MF F005 皮下注ペン 0000 V018 450IU P011 1PEN 1 20230602 0 0 20190501 20190930 120 9 19-04-23 16:37:10 19-04-23 16:40:54
4 496300134 2 ゴナールエフ 皮下注ペン 900IU 1PEN F19B0608 ゴナールエフ皮下注ペン900 Gonalef Pen 900 (1) 008 BDマイクロファインプラス MF F005 皮下注ペン 0000 V019 900IU P011 1PEN 1 20230603 0 0 20190501 20190930 110 9 19-04-23 16:38:36 19-04-23 16:41:05
5 496301315 0 プロファシー 注射剤 5000IU 10VIAL F47706A0 プロファシー 注 5000IU PROFASI M AMP. 5000 IU (10) 002 プロファシー PF F002 注射剤 0000 V020 5000IU P005 10VIAL 10 20230604 0 0 20070401 20190930 160 0 17-11-08 16:52:41 19-09-19 11:42:45

View File

@ -88,20 +88,31 @@ def assert_table_results(actual_rows: list[dict], expect_rows: list[dict], ignor
# 期待値を、DBのデータ型(リフレクションされたpythonのデータ型)にキャストする
if actual_col_name in force_cast_to_str_columns:
# DB項目(varchar)に日付型としてキャスト可能な値が期待値である場合、force_cast_to_str_columnsに基づいて強制的に文字列キャストする
if type(expect_value).__name__ == 'date':
expect_value = expect_value.strftime('%Y-%m-%d')
elif isinstance(actual_value, (int)):
# DB項目(int)の場合、期待値もintにキャストする
expect_value = int(expect_value)
elif isinstance(actual_value, (float)):
# DB項目(float)の場合、期待値もfloatにキャストする
expect_value = float(expect_value)
elif isinstance(actual_value, (decimal.Decimal)):
# DB項目(decimal)の場合、期待値もdecimalにキャストする
expect_value = decimal.Decimal(expect_value)
# if type(actual_value) == datetime.date:
elif type(actual_value).__name__ == "date":
# DB項目(date)の場合、期待値("YYYYMMDD")もdateにキャストする
if is_valid_date_format(expect_value, '%Y%m%d') is True: # YYYYMMDD
expect_value = datetime.strptime(expect_value, '%Y%m%d').date()
elif actual_value is None and expect_value == "":
# DB項目値がNULLの場合、期待値が""であればNoneに置換する
expect_value = None
elif actual_value == "0000-00-00" and expect_value == "":
# DB項目(date)がゼロ日付(NULL代替値)の場合、期待値が""であれば"0000-00-00"に置換する
expect_value = "0000-00-00"
elif actual_value == "0000-00-00 00:00:00" and expect_value == "":
# DB項目(datetime)がゼロ日付(NULL代替値)の場合、期待値が""であれば"0000-00-00 00:00:00"に置換する
expect_value = "0000-00-00 00:00:00"
# 検証
assert actual_value == expect_value, f'{line_number}行目:"{actual_col_name}" : "{actual_value}" ({type(actual_value)})が、期待値 "{expect_value}" ({type(expect_value)}) と一致しませんでした'