CliAndInteractive.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import sys, getopt
  2. from baangt.base.Utils import utils
  3. # from baangt.ui.ui import UI
  4. from baangt import plugin_manager
  5. import baangt.base.GlobalConstants as GC
  6. from PyQt5 import QtWidgets
  7. # from baangt.ui.pyqt.uimain import MainWindow
  8. from baangt.ui.pyqt.uimain import MainController
  9. from baangt.base.RuntimeStatistics import Statistic
  10. from baangt.reports import Dashboard, Summary
  11. import platform
  12. def print_args():
  13. print("""
  14. Call: python baangtIA.py --parameters
  15. --run=<Existing, predefined Name of a TestRun (XLSX or .JSON-File incl. Path)>
  16. --globals=<path to JSON-File containing global Settings. If omitted, will look for globals.json in the current directory>
  17. --reloadDrivers=<anyValue> : This command will replace existing browser drivers (Chrome/Firefox) with latest versions
  18. Suggested for standard use:
  19. python baangtIA.py --run="Franzi4711.xlsx": Will run a Testrun Franzi4711.xlsx
  20. python baangtIA.py --run="runProducts.json": Will execute a Testrun as specified in runProducts.json and use default globals.json, if exists
  21. python baangtIA.py --run="runProducts.json" --globals="production.json" will use settings in production.json
  22. python baangtIA.py --run="runProducts.json" --globals="qa.json" will use settings in qa.json
  23. If run without parameters you'll find a simple interactive Window
  24. """)
  25. def args_read(l_search_parameter):
  26. l_args = sys.argv[1:]
  27. try:
  28. opts, args = getopt.getopt(l_args, "", ["run=",
  29. "globals=",
  30. "reloadDrivers=",
  31. "gui=",
  32. "cleanup=",
  33. "name=",
  34. "stage=",
  35. "id="
  36. ])
  37. except getopt.GetoptError as err_det:
  38. print("Error in reading parameters:" + str(err_det))
  39. #print_args()
  40. sys.exit("Wrong parameters - exiting")
  41. if opts:
  42. for opt, arg in opts:
  43. if l_search_parameter == opt: # in ("-u", "--usage"):
  44. return arg
  45. if "--" + l_search_parameter == opt:
  46. return arg
  47. return None
  48. def getGlobalSettings():
  49. lGlobals = args_read("globals")
  50. if not lGlobals:
  51. lGlobals = "globals.json"
  52. return lGlobals
  53. def callTestrun(testRunFile):
  54. if ".XLSX" in testRunFile.upper() or ".JSON" in testRunFile.upper():
  55. plugin_manager.hook.testRun_init(testRunName=utils.sanitizeFileName(testRunFile),
  56. globalSettingsFileNameAndPath=utils.sanitizeFileName(getGlobalSettings()))
  57. else:
  58. sys.exit(f"Unknown Filetype - should be XLSX or JSON: {testRunFile}")
  59. def run():
  60. print_args()
  61. testRunFile = args_read("run")
  62. if testRunFile:
  63. print(f"Starting Testrun: {testRunFile}")
  64. if args_read("gui"):
  65. s = Statistic()
  66. s.gui = True
  67. callTestrun(testRunFile)
  68. elif args_read("reloadDrivers"):
  69. from baangt.base.BrowserHandling.BrowserHandling import BrowserDriver
  70. lDriver = BrowserDriver()
  71. lDriver.downloadDriver(GC.BROWSER_FIREFOX)
  72. lDriver.downloadDriver(GC.BROWSER_CHROME)
  73. print("Latest versions of drivers for Firefox and Chrome were downloaded")
  74. # Reports
  75. elif args_read("name") or args_read("stage"):
  76. name = args_read("name")
  77. name = None if name == 'all' else name
  78. try:
  79. r = Dashboard(name=name, stage=args_read("stage"))
  80. r.show()
  81. except ValueError as e:
  82. print(f'ERROR: {e}')
  83. sys.exit('Exiting...')
  84. elif args_read("id"):
  85. try:
  86. r = Summary(args_read("id"))
  87. r.show()
  88. except ValueError as e:
  89. print(f'ERROR: {e}')
  90. sys.exit('Exiting...')
  91. elif args_read("cleanup"):
  92. from baangt.base.Cleanup import Cleanup
  93. days = float(args_read("cleanup"))
  94. clean = Cleanup(days)
  95. clean.clean_all()
  96. else:
  97. app = QtWidgets.QApplication(sys.argv)
  98. if platform.system() == "Linux":
  99. QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create('Fusion'))
  100. elif platform.system() == "Darwin":
  101. QtWidgets.QApplication.setStyle(QtWidgets.QStyleFactory.create('Windows'))
  102. controller = MainController()
  103. controller.show_main()
  104. appExec = app.exec_()
  105. controller.close()
  106. sys.exit(appExec)