RuntimeStatistics.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. from dataclasses import dataclass
  2. import sys
  3. class Singleton(type):
  4. _instances = {}
  5. def __call__(cls, *args, **kwargs):
  6. if cls not in cls._instances:
  7. cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
  8. return cls._instances[cls]
  9. @dataclass
  10. class Statistic(metaclass=Singleton):
  11. testcases_total: int = 0
  12. testcases_executed: int = 0
  13. testcases_remaining: int = 0
  14. testcases_success: int = 0
  15. testcases_failed: int = 0
  16. testcases_paused: int = 0
  17. testcase_sequence_executed: int = 0
  18. teststep_executed: int = 0
  19. teststep_sequence_executed: int = 0
  20. gui: bool = False
  21. def __str__(self):
  22. string = [f"{key.split('_')[0]+' '+key.split('_')[1]}: {self.__dict__[key]}" for key in self.__dict__ if "_" in key]
  23. return "\n".join(string).upper()
  24. def total_testcases(self, number):
  25. self.testcases_total = number
  26. self.testcases_remaining = number
  27. if self.gui:
  28. sys.stdout.write("||Statistic:"+self.__str__()+"||")
  29. sys.stdout.flush()
  30. def update_all(self, success, error, waiting):
  31. self.testcases_executed = success+error
  32. self.testcases_remaining = self.testcases_total - self.testcases_executed
  33. self.testcases_paused = waiting
  34. self.testcases_success = success
  35. self.testcases_failed = error
  36. if self.gui:
  37. sys.stdout.write("||Statistic:"+self.__str__()+"||")
  38. sys.stdout.flush()
  39. def update_success(self):
  40. self.testcases_success += 1
  41. self.testcases_executed = self.testcases_success + self.testcases_failed
  42. self.testcases_remaining = self.testcases_total - self.testcases_executed
  43. if self.gui:
  44. sys.stdout.write("||Statistic:" + self.__str__() + "||")
  45. sys.stdout.flush()
  46. def update_error(self):
  47. self.testcases_failed += 1
  48. self.testcases_executed = self.testcases_success + self.testcases_failed
  49. self.testcases_remaining = self.testcases_total - self.testcases_executed
  50. if self.gui:
  51. sys.stdout.write("||Statistic:" + self.__str__() + "||")
  52. sys.stdout.flush()
  53. def update_waiting(self):
  54. self.testcases_paused += 1
  55. self.testcases_executed = self.testcases_success + self.testcases_failed
  56. self.testcases_remaining = self.testcases_total - self.testcases_executed
  57. if self.gui:
  58. sys.stdout.write("||Statistic:" + self.__str__() + "||")
  59. sys.stdout.flush()
  60. def update_teststep(self):
  61. self.teststep_executed += 1
  62. if self.gui:
  63. sys.stdout.write("||Statistic:"+self.__str__()+"||")
  64. sys.stdout.flush()
  65. def update_testcase_sequence(self):
  66. self.testcase_sequence_executed += 1
  67. if self.gui:
  68. sys.stdout.write("||Statistic:"+self.__str__()+"||")
  69. sys.stdout.flush()
  70. def update_teststep_sequence(self):
  71. self.teststep_sequence_executed += 1
  72. if self.gui:
  73. sys.stdout.write("||Statistic:"+self.__str__()+"||")
  74. sys.stdout.flush()