Browse Source

TC.RestartBrowserAfter - Functionality added

bernhardbuhl 3 years ago
parent
commit
276a33bc15

+ 2 - 0
baangt/TestCase/TestCaseMaster.py

@@ -37,6 +37,8 @@ class TestCaseMaster:
             except Exception as e:
                 logger.warning(f"Uncought exception {e}")
                 utils.traceback(exception_in=e)
+                self.kwargs[GC.KWARGS_DATA][GC.TESTCASESTATUS_STOPERROR] = True
+                self.kwargs[GC.KWARGS_DATA][GC.TESTCASESTATUS] = GC.TESTCASESTATUS_ERROR
 
     def executeTestCase(self):
         self.timingName = self.timing.takeTime(self.__class__.__name__, forceNew=True)

+ 25 - 2
baangt/base/BrowserFactory.py

@@ -28,6 +28,8 @@ class BrowserFactory:
             if self.globalSettings.get('TC.' + GC.EXECUTION_NETWORK_INFO) == True else None
         self.browsersMobProxies = {}
 
+        self.callsPerBrowserInstance = {}
+
         self.__startRotatingProxies()
 
     def __startRotatingProxies(self):
@@ -75,9 +77,12 @@ class BrowserFactory:
                 self.browser[browserInstance].slowExecutionToggle()
             return self.browser[browserInstance]
         else:
-            if self.globalSettings.get("TC.RestartBrowser"):
+
+            lRestartBrowserSession = self.checkMaxBrowserInstanceCallsUsedToRestart(browserInstance)
+
+            if self.globalSettings.get("TC.RestartBrowser") or lRestartBrowserSession:
                 if browserInstance in self.browser.keys():
-                    logger.debug(f"Instance {browserInstance}: TC.RestartBrowser was set. Quitting old browser.")
+                    logger.debug(f"Instance {browserInstance}: TC.RestartBrowser was set or Threshold-Limit for Testcases reached. Quitting old browser.")
                     lBrowser = self.browser[browserInstance]
                     lBrowser.closeBrowser()
                     del self.browser[browserInstance]
@@ -116,6 +121,24 @@ class BrowserFactory:
                 logger.debug(f"Using existing instance of browser {browserInstance}")
             return self.browser[browserInstance]
 
+    def checkMaxBrowserInstanceCallsUsedToRestart(self, browserInstance):
+        """
+        for each browserInstance we record how often it was used by a testcase.
+        If there's a Number n RestartBrowserAfter Global parameter and we're higher than that,
+        we restart the browser.
+        :param browserInstance:
+        :return:
+        """
+        lRestartBrowserSession = False
+        self.callsPerBrowserInstance[browserInstance] = self.callsPerBrowserInstance.get(browserInstance, 0) + 1
+        if self.callsPerBrowserInstance[browserInstance] > int(
+                self.globalSettings.get("TC.RestartBrowserAfter", 99999999)):
+            lRestartBrowserSession = True
+            logger.debug(f"Reached threshold for browser restart in instance {browserInstance}. Restarting Browser.")
+            self.callsPerBrowserInstance[browserInstance] = 0
+
+        return lRestartBrowserSession
+
     @staticmethod
     def setBrowserWindowSize(lBrowserInstance: BrowserDriver, browserWindowSize):
         lBrowserInstance.setBrowserWindowSize(browserWindowSize)

+ 6 - 0
baangt/ui/pyqt/globalSetting.json

@@ -197,6 +197,12 @@
             "type": "text",
             "default": "",
             "displayText": "AppRes2BaseXLS"
+        },
+        "TC.RestartBrowserAfter": {
+            "hint": "Enter a number of Testcases, after that the browser shall be restartet. Valid: e.g. '2'. Instead of '1' you could set the flag RestartBrowser.",
+            "type": "text",
+            "default": "",
+            "displayText": "RestBrowserAfter"
         }
     }
 }