test_queries.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. from sqlalchemy import create_engine
  2. from sqlalchemy.orm import sessionmaker
  3. from baangt.base.DataBaseORM import DATABASE_URL, TestrunLog, GlobalAttribute, TestCaseLog, TestCaseSequenceLog, TestCaseField
  4. import time
  5. #{chr(746)}
  6. #name = 'RSantragAll.json'
  7. #name = 'heartbeat.json'
  8. #name = 'kfz.xlsx'
  9. class Query:
  10. def __init__(self, name):
  11. # craate session
  12. self.engine = create_engine(DATABASE_URL)
  13. self.db = sessionmaker(bind=self.engine)()
  14. self.name = name
  15. def get_logs(self):
  16. if self.name:
  17. return self.db.query(TestrunLog).filter_by(testrunName=self.name)
  18. return self.db.query(TestrunLog)
  19. def by_relationships(self):
  20. # time tracker
  21. time_start = time.time()
  22. # query testruns
  23. logs = self.get_logs()
  24. print(f'\nFETCHED: {logs.count()} Testruns')
  25. for tr_index, tr in enumerate(logs):
  26. print(f'** Testrun-{tr_index}')
  27. for tcs_index, tcs in enumerate(tr.testcase_sequences):
  28. print(f'**** TestCaseSequence-{tcs_index}: {len(tcs.testcases)} test cases')
  29. for tc_index, tc in enumerate(tcs.testcases):
  30. #print(f'****** TestCase-{tc_index}')
  31. for field in tc.fields:
  32. pass
  33. self.time = time.time()-time_start
  34. def by_subqueries(self):
  35. # time tracker
  36. time_start = time.time()
  37. # query testruns
  38. logs = self.get_logs()
  39. print(f'\nFETCHED: {logs.count()} Testruns')
  40. for tr_index, tr in enumerate(logs):
  41. print(f'** Testrun-{tr_index}')
  42. for tcs_index, tcs in enumerate(tr.testcase_sequences):
  43. # query testcases
  44. tc_query = self.db.query(TestCaseLog).filter_by(testcase_sequence_id=tcs.id)
  45. print(f'**** TestCaseSequence-{tcs_index}: {tc_query.count()} test cases')
  46. for tc_index, tc in enumerate(tc_query):
  47. for field in self.db.query(TestCaseField).filter_by(testcase_id=tc.id):
  48. pass
  49. self.time = time.time()-time_start
  50. def by_yield_subqueries(self):
  51. # time tracker
  52. time_start = time.time()
  53. # query testruns
  54. logs = self.get_logs()
  55. print(f'\nFETCHED: {logs.count()} Testruns')
  56. tr_index = 0
  57. for tr in logs.yield_per(10):
  58. print(f'** Testrun-{tr_index}')
  59. tr_index += 1
  60. for tcs_index, tcs in enumerate(tr.testcase_sequences):
  61. # query testcases
  62. tc_query = self.db.query(TestCaseLog).filter_by(testcase_sequence_id=tcs.id)
  63. print(f'**** TestCaseSequence-{tcs_index}: {tc_query.count()} test cases')
  64. tc_index = 0
  65. for tc in tc_query.yield_per(10):
  66. for field in self.db.query(TestCaseField).filter_by(testcase_id=tc.id).yield_per(10):
  67. pass
  68. self.time = time.time()-time_start
  69. def by_subqueries_fields(self):
  70. # time tracker
  71. time_start = time.time()
  72. # query testruns
  73. logs = self.get_logs()
  74. print(f'\nFETCHED: {logs.count()} Testruns')
  75. for tr_index, tr in enumerate(logs):
  76. print(f'** Testrun-{tr_index}')
  77. tcs_query = self.db.query(TestCaseSequenceLog.id).filter_by(testrun_id=tr[0])
  78. for tcs_index, tcs in enumerate(tcs_query):
  79. # query testcases
  80. tc_query = self.db.query(TestCaseLog.id).filter_by(testcase_sequence_id=tcs[0])
  81. print(f'**** TestCaseSequence-{tcs_index}: {tc_query.count()} test cases')
  82. for tc_index, tc in enumerate(tc_query):
  83. for name, value in self.db.query(TestCaseField.name, TestCaseField.value).filter_by(testcase_id=tc[0]):
  84. pass
  85. self.time = time.time()-time_start
  86. def by_connection(self):
  87. # time tracker
  88. time_start = time.time()
  89. with self.engine.connect() as conn:
  90. # query testruns
  91. logs = conn.execute(TestrunLog.__table__.select().filter_by(testrunName=self.name)).fetchall()
  92. print(f'\nFETCHED: {len(logs)} Testruns')
  93. for tr_index, tr in enumerate(logs):
  94. print(f'** Testrun-{tr_index}')
  95. for tcs_index, tcs in enumerate(tr.testcase_sequences):
  96. # query testcases
  97. tc_query = self.db.query(TestCaseLog).filter_by(testcase_sequence_id=tcs.id)
  98. print(f'**** TestCaseSequence-{tcs_index}: {tc_query.count()} test cases')
  99. for tc_index, tc in enumerate(tc_query):
  100. for field in self.db.query(TestCaseField).filter_by(testcase_id=tc.id):
  101. pass
  102. self.time = time.time()-time_start
  103. def statistics(self):
  104. print(f'\nEXECUTION TIME: {self.time}')
  105. class QueryStack:
  106. def __init__(self):
  107. self.queries = []
  108. def add(self, query):
  109. self.queries.append(query)
  110. def statistics(self):
  111. fields = {
  112. 'name': 20,
  113. 'time': 10,
  114. }
  115. print(' '*fields.get('name') + 'Time')
  116. for q in self.queries:
  117. print(f'{q.name}{" "*(fields.get("name")-len(q.name))}{q.time}')
  118. if __name__ == '__main__':
  119. name = 'RSantragAll.json'
  120. q = Query(name)
  121. q.by_relationships()
  122. qstack = QueryStack()
  123. name = None
  124. for i in range(1):
  125. q = Query(name)
  126. if i == 0:
  127. q.by_relationships()
  128. q.name = 'Relations'
  129. elif i == 1:
  130. q.by_subqueries()
  131. q.name = 'Subqueries'
  132. elif i == 2:
  133. q.by_yield_subqueries()
  134. q.name = 'Yielded'
  135. elif i == 3:
  136. q.by_subqueries_fields()
  137. q.name = 'Fields'
  138. qstack.add(q)
  139. qstack.statistics()