diff --git a/basic/constants.py b/basic/constants.py index 127c686..f3120f4 100644 --- a/basic/constants.py +++ b/basic/constants.py @@ -48,9 +48,11 @@ PAR_STEP = 'step' PAR_DESCRIPT = 'desription' """ """ PAR_TESTCASE = "testcase" +PAR_TESTCASES = "testcases" PAR_TESTSUITE = "usecase" PAR_TCTIME = "tctime" PAR_TSTIME = "tstime" +PAR_TESTINSTANCES = "testinstances" """ name of testcase extracted from PAR_TCDIR """ diff --git a/components/testexec.py b/components/testexec.py index ae56299..aa06f12 100644 --- a/components/testexec.py +++ b/components/testexec.py @@ -128,7 +128,8 @@ class Testexecuter(): if "db" in self.conf[B.SUBJECT_ARTS]: self.m.logInfo("select db-content "+ self.name) dbi = basic.toolHandling.getDbTool(self) - dbi.selectTables() + tdata = dbi.selectTables() + utils.tdata_tool.writeCsvData("", tdata, self) if B.ATTR_ARTS_LOB in self.conf[B.SUBJECT_ARTS]: self.m.logInfo("check lob if is deleted with flaskdb "+ self.name) self.m.setMsg("readInstance for " + self.name + " is OK") diff --git a/test/test_compare.py b/test/test_compare.py index 55d7472..62b1eaf 100644 --- a/test/test_compare.py +++ b/test/test_compare.py @@ -28,7 +28,10 @@ tdata = { "database": { "scheme": { "table": { - "_data": [ + D.DATA_ATTR_COUNT: 4, + D.DATA_ATTR_DATE: "15.05.2022", + B.DATA_NODE_HEADER: ["id", "name", "year", "position", "hobby"], + B.DATA_NODE_DATA: [ {"id": 1, "name": "Brecht", "year": 2014, "position": "top", "hobby": "meaning"}, {"id": 2, "name": "Meier", "year": 2015, "position": "first", "hobby": "reading" }, {"id": 3, "name": "Smith", "year": 2018, "position": "second", "hobby": "writing"}, @@ -45,7 +48,10 @@ tdata = { "database": { "scheme": { "table": { - "_data": [ + D.DATA_ATTR_COUNT: 4, + D.DATA_ATTR_DATE: "15.05.2022", + B.DATA_NODE_HEADER: ["id", "name", "year", "position", "hobby"], + B.DATA_NODE_DATA: [ {"id": 1, "name": "Brecht", "year": 2014, "position": "top", "hobby": "meaning"}, {"id": 2, "name": "Maier", "year": 2015, "position": "first", "hobby": "reading"}, {"id": 4, "name": "Smith", "year": 2018, "position": "second", "hobby": "writing"}, @@ -115,8 +121,8 @@ class MyTestCase(unittest.TestCase): matching = self.getMatching() utils.match_tool.setMatchkeys(matching, ":database:scheme:table:_data") utils.match_tool.getSimilarity(matching, - tdata[M.MATCH_SIDE_PREACTUAL]["data"]["database"]["scheme"]["table"]["_data"][0], - tdata[M.MATCH_SIDE_POSTACTUAL]["data"]["database"]["scheme"]["table"]["_data"][0], 1) + tdata[M.MATCH_SIDE_PREACTUAL]["data"]["database"]["scheme"]["table"][B.DATA_NODE_DATA][0], + tdata[M.MATCH_SIDE_POSTACTUAL]["data"]["database"]["scheme"]["table"][B.DATA_NODE_DATA][0], 1) def test_bestfit(self): job = Job("unit") @@ -127,8 +133,8 @@ class MyTestCase(unittest.TestCase): comp.conf = conf matching = utils.match_tool.Matching(comp) matching.matchtype = M.MATCH_SUCCESS - matching.sideA = tdata[M.MATCH_SIDE_PREACTUAL]["data"]["database"]["scheme"]["table"]["_data"] - matching.sideB = tdata[M.MATCH_SIDE_POSTACTUAL]["data"]["database"]["scheme"]["table"]["_data"] + matching.sideA = tdata[M.MATCH_SIDE_PREACTUAL]["data"]["database"]["scheme"]["table"][B.DATA_NODE_DATA] + matching.sideB = tdata[M.MATCH_SIDE_POSTACTUAL]["data"]["database"]["scheme"]["table"][B.DATA_NODE_DATA] utils.match_tool.matchBestfit(matching, ":database:scheme:table:_data") print(json.dumps(matching.linksA)) print(json.dumps(matching.linksB)) @@ -147,16 +153,16 @@ class MyTestCase(unittest.TestCase): comp.conf = conf matching = self.getMatching() matching.matchtype = M.MATCH_SUCCESS - matching.sideA = tdata[M.MATCH_SIDE_PREACTUAL]["data"]["database"]["scheme"]["table"]["_data"] - matching.sideB = tdata[M.MATCH_SIDE_POSTACTUAL]["data"]["database"]["scheme"]["table"]["_data"] + matching.sideA = tdata[M.MATCH_SIDE_PREACTUAL]["data"]["database"]["scheme"]["table"][B.DATA_NODE_DATA] + matching.sideB = tdata[M.MATCH_SIDE_POSTACTUAL]["data"]["database"]["scheme"]["table"][B.DATA_NODE_DATA] ddl = conf[B.DATA_NODE_DDL]["database"]["scheme"]["table"] header = [] for f in ddl["_header"]: header.append({D.DDL_FNAME: f, D.DDL_TYPE: ddl[f][D.DDL_TYPE], D.DDL_ACCEPTANCE: ddl[f][D.DDL_ACCEPTANCE]}) i = 1 - text = utils.match_tool.compareRow(matching, header, tdata[M.MATCH_SIDE_PREACTUAL]["data"]["database"]["scheme"]["table"]["_data"][i], - tdata[M.MATCH_SIDE_POSTACTUAL]["data"]["database"]["scheme"]["table"]["_data"][i]) + text = utils.match_tool.compareRow(matching, header, tdata[M.MATCH_SIDE_PREACTUAL]["data"]["database"]["scheme"]["table"][B.DATA_NODE_DATA][i], + tdata[M.MATCH_SIDE_POSTACTUAL]["data"]["database"]["scheme"]["table"][B.DATA_NODE_DATA][i]) print(text) def test_compareRows(self): @@ -169,8 +175,8 @@ class MyTestCase(unittest.TestCase): basic.componentHandling.comps["component"] = comp matching = self.getMatching() comp.name = "component" - matching.sideA = tdata[M.MATCH_SIDE_PREACTUAL]["data"]["database"]["scheme"]["table"]["_data"] - matching.sideB = tdata[M.MATCH_SIDE_POSTACTUAL]["data"]["database"]["scheme"]["table"]["_data"] + matching.sideA = tdata[M.MATCH_SIDE_PREACTUAL]["data"]["database"]["scheme"]["table"][B.DATA_NODE_DATA] + matching.sideB = tdata[M.MATCH_SIDE_POSTACTUAL]["data"]["database"]["scheme"]["table"][B.DATA_NODE_DATA] linksA = {"a0001": "b0001", "a0002": "b0002" } matching.linksA = linksA text = utils.match_tool.compareRows(matching, ":database:scheme:table:_data") diff --git a/test/test_report.py b/test/test_report.py index acce6d6..16d7b9b 100644 --- a/test/test_report.py +++ b/test/test_report.py @@ -9,7 +9,8 @@ import init_testcase import test_executer import test.constants import utils.report_tool -import utils.match_tool as M +import utils.match_tool +import utils.match_const as M import basic.constants as B HOME_PATH = test.constants.HOME_PATH @@ -98,6 +99,7 @@ class MyTestCase(unittest.TestCase): cm = basic.componentHandling.ComponentManager() for c in ["comp02"]: comp = components.component.Component() + comp.conf = {} comp.name = c basic.componentHandling.comps[c] = comp report = self.getReport() @@ -112,6 +114,7 @@ class MyTestCase(unittest.TestCase): cm = basic.componentHandling.ComponentManager() for c in ["comp02"]: comp = components.component.Component() + comp.conf = {} comp.name = c basic.componentHandling.comps[c] = comp print(" ---------- test_headlines") @@ -123,7 +126,7 @@ class MyTestCase(unittest.TestCase): html = report.getArtefactBlock("TC0001", "comp02", "arte01") print(html) - def test_reportS(self): + def xtest_reportS(self): job = basic.program.Job.getInstance() setattr(job.par, "testcase", "TC0001") setattr(job.par, "testcases", ["TC0001", "TC0002"]) @@ -147,9 +150,10 @@ class MyTestCase(unittest.TestCase): print(html_2) print("<<---------------------------------- TC0002") report.extractTestcase("TC0002", html_2) - setattr(job.par, "testsuite", "TST001") - html = report.reportTestsuite() - print(html) + # setattr(job.par, B.PAR_TESTCASES, ["TST001"]) + setattr(job.par, B.PAR_TESTCASES, ["TC0001", "TC0002"]) + #html = report.reportTestsuite() + #print(html) print("<<---------------------------------- TST001") if __name__ == '__main__': diff --git a/utils/data_const.py b/utils/data_const.py index a5634e1..ca6cf74 100644 --- a/utils/data_const.py +++ b/utils/data_const.py @@ -26,6 +26,9 @@ DFILE_TYPE_CSV = "csv" DATA_SRC_DIR = "dir" DATA_SRC_CSV = "csv" +DATA_ATTR_COUNT = "_count" +DATA_ATTR_DATE = "_date" + CSV_HEADER_START = ["node", "table", "tabelle"] CSV_DELIMITER = ";" diff --git a/utils/date_tool.py b/utils/date_tool.py index 299da99..e45207f 100644 --- a/utils/date_tool.py +++ b/utils/date_tool.py @@ -6,6 +6,8 @@ additionally functions for calculating date with formulas like [DATE+2M] and for import datetime F_DIR = "%Y-%m-%d_%H-%M-%S" +F_DE = "%d.%m.%Y" + def getActdate(format): return getFormatdate(datetime.datetime.now(), format) diff --git a/utils/db_abstract.py b/utils/db_abstract.py index 6e21f8c..89d5a3f 100644 --- a/utils/db_abstract.py +++ b/utils/db_abstract.py @@ -42,6 +42,7 @@ import basic.program import utils.config_tool import basic.constants as B import utils.data_const as D +import utils.date_tool import os @@ -170,37 +171,6 @@ class DbFcts(): """ return getDbAttributes(self.comp, table) - def xxgetDbAttributes(self, table): - out = { - B.ATTR_DB_TABNAME: "", - B.ATTR_DB_PARTITION: D.DFLT_DB_PARTITION, - B.ATTR_DB_CONN_JAR: D.DFLT_DB_CONN_JAR - } - for attr in out.keys(): - print(attr) - if (table in self.comp.conf[B.SUBJECT_ARTS][B.TOPIC_NODE_DB]) \ - and (attr in self.comp.conf[B.SUBJECT_ARTS][B.TOPIC_NODE_DB][table]): - out[attr] = self.comp.conf[B.SUBJECT_ARTS][B.TOPIC_NODE_DB][table][attr] - print("a "+attr+" "+out[attr]) - elif (attr in self.comp.conf[B.SUBJECT_ARTS][B.TOPIC_NODE_DB]): - out[attr] = self.comp.conf[B.SUBJECT_ARTS][B.TOPIC_NODE_DB][attr] - print("b "+attr+" "+out[attr]) - elif (B.TOPIC_NODE_DB in self.comp.conf[B.SUBJECT_CONN]) \ - and (table in self.comp.conf[B.SUBJECT_CONN][B.TOPIC_NODE_DB]) \ - and (attr in self.comp.conf[B.SUBJECT_CONN][table][B.TOPIC_NODE_DB]): - out[attr] = self.comp.conf[B.SUBJECT_CONN][table][B.TOPIC_NODE_DB][attr] - print("c " + attr+" "+out[attr]) - elif (B.TOPIC_NODE_DB in self.comp.conf[B.SUBJECT_CONN]) \ - and (attr in self.comp.conf[B.SUBJECT_CONN][B.TOPIC_NODE_DB]): - out[attr] = self.comp.conf[B.SUBJECT_CONN][B.TOPIC_NODE_DB][attr] - print("d "+attr+" "+out[attr]) - elif (attr in self.comp.conf[B.SUBJECT_CONN]): - out[attr] = self.comp.conf[B.SUBJECT_CONN][attr] - print("e " + attr+" "+out[attr]) - else: - print("f " + attr+" "+out[attr]) - - return out def selectTables(self, subdir): """ method to delete rows from a database @@ -210,6 +180,10 @@ class DbFcts(): tdata[subdir] = {} for t in self.comp.conf[B.DATA_NODE_DDL]: tdata[subdir][t] = self.selectRows(t) + if B.DATA_NODE_DATA not in tdata[subdir][t]: + raise Exception("missing data node in table") + tdata[subdir][t][D.DATA_ATTR_COUNT] = len(tdata[subdir][t][B.DATA_NODE_DATA]) + tdata[subdir][t][D.DATA_ATTR_DATE] = utils.date_tool.getActdate(utils.date_tool.F_DE) return tdata def selectRows(self, statement): diff --git a/utils/match_tool.py b/utils/match_tool.py index 88e5ab7..3031a17 100644 --- a/utils/match_tool.py +++ b/utils/match_tool.py @@ -336,36 +336,36 @@ def getEvaluation(matching, type, acceptance, sideA, sideB): return [result, classA, classB] -def matchDict(matching, A, B, path): +def matchDict(matching, sideA, sideB, path): """ travers through the datatree """ job = basic.program.Job.getInstance() verify = int(job.getDebugLevel("match_tool")) - 4 job.debug(verify, "matchDict " + path) - if (A is not None): - for k in A: + if (sideA is not None): + for k in sideA: job.debug(verify, "matchDict 400 " + k + ".") - if k in ["_match"]: + if k in ["_match", D.DATA_ATTR_COUNT, D.DATA_ATTR_DATE, B.DATA_NODE_HEADER]: continue - if (B is not None) and (k in B): - if (isinstance(A[k], dict)): A[k]["_match"] = "Y" - if (isinstance(B[k], dict)): B[k]["_match"] = "Y" + if (sideB is not None) and (k in sideB): + if (isinstance(sideA[k], dict)): sideA[k]["_match"] = "Y" + if (isinstance(sideB[k], dict)): sideB[k]["_match"] = "Y" job.debug(verify, "matchDict 404 " + k + "." + path) - matchElement(matching, A[k], B[k], path + ":" + k) + matchElement(matching, sideA[k], sideB[k], path + ":" + k) else: - if (isinstance(A[k], dict)): A[k]["_match"] = "N" + if (isinstance(sideA[k], dict)): sideA[k]["_match"] = "N" job.debug(verify, "matchDict 408 " + path) - matchElement(matching, A[k], None, path + ":" + k) - if (B is not None): - for k in B: + matchElement(matching, sideA[k], None, path + ":" + k) + if (sideB is not None): + for k in sideB: job.debug(verify, "matchDict 412 " + k + ".") - if k in ["_match"]: + if k in ["_match", D.DATA_ATTR_COUNT, D.DATA_ATTR_DATE, B.DATA_NODE_HEADER]: continue - if (A is not None) and (k in A): + if (sideA is not None) and (k in sideA): continue - elif (A is None) or (k not in A): - if (A is not None) and (isinstance(A[k], dict)): B[k]["_match"] = "N" + elif (sideA is None) or (k not in sideA): + if (sideA is not None) and (isinstance(sideA[k], dict)): sideB[k]["_match"] = "N" job.debug(verify, "matchDict 418 " + k + "." + path) - matchElement(matching, None, B[k], path + ":" + k) + matchElement(matching, None, sideB[k], path + ":" + k) job.debug(verify, "matchDict 420 ...<<---") return matching diff --git a/utils/report_tool.py b/utils/report_tool.py index ad3f5b3..f2320da 100644 --- a/utils/report_tool.py +++ b/utils/report_tool.py @@ -258,7 +258,7 @@ class Report: def reportTestsuite(self): job = basic.program.Job.getInstance() verify = int(job.getDebugLevel(TOOL_NAME)) - 1 - testinstances = getattr(job.par, "testinstances") + testinstances = getattr(job.par, B.PAR_TESTCASES) html = self.getHeader() html += self.getTitle() i = 0