Commit 1af31785 authored by JunHyung An's avatar JunHyung An
Browse files

Add test type to user input

parent 9f5f0d73
Loading
Loading
Loading
Loading
+76 −59
Original line number Diff line number Diff line
@@ -38,12 +38,14 @@ class MultipleTest(unittest.TestCase):
            print(f"Invalid input format: {e}. Please use 'type / username, password / duplicate_count'. Exiting.")
            exit(1)

        print("[선택(디폴트:일반접속)]테스트 유형 : 일반 접속(1), 일시 접속(2), 부하 화면 접근(3)")
        self.function_to_execute = int(input().strip())

        # Initialize a list to hold driver instances for each thread
        self.drivers = []
        self.verificationErrors = []
        self.accept_next_alert = True

        #

    # ... (rest of your _interact_with_time_filters, _login_action, etc. methods remain unchanged)

@@ -268,27 +270,75 @@ class MultipleTest(unittest.TestCase):
        driver.find_element_by_xpath(
            u"(.//*[normalize-space(text()) and normalize-space(.)='수집/판단 기준'])[1]/following::li[1]").click()

    def _execute_single_action_and_measure(self, driver, action_func, driver_instance_number, action_name, *args, **kwargs):
        """Executes a single action and measures its duration."""
        start_time = time.time()
        try:
            action_func(driver, *args, **kwargs)
        except Exception as e:
            print(f"Session {driver_instance_number}, Action {action_name} failed: {e}")
        finally:
            end_time = time.time()
            print(f"Session {driver_instance_number}, User: {self.username}: {action_name} executed in {end_time - start_time:.2f} seconds")


    def _run_driver1_actions(self, driver, address, id, pw, account_type):
        wait = WebDriverWait(driver, 10)
        instance_number = driver.instance_number # Assuming instance_number is set on driver in _run_single_driver_actions

        self._login_action(driver, address, id, pw, wait)
        self._dashboard_actions(driver)
        self._topology_map_actions(driver)
        self._performance_operation_actions(driver)
        self._log_analysis_actions(driver)
        self._event_status_actions(driver)
        self._work_management_actions(driver, wait)
        self._execute_single_action_and_measure(driver, self._login_action, instance_number, "_login_action", address, id, pw, wait)
        self._execute_single_action_and_measure(driver, self._dashboard_actions, instance_number, "_dashboard_actions")
        self._execute_single_action_and_measure(driver, self._topology_map_actions, instance_number, "_topology_map_actions")
        self._execute_single_action_and_measure(driver, self._performance_operation_actions, instance_number, "_performance_operation_actions")
        self._execute_single_action_and_measure(driver, self._log_analysis_actions, instance_number, "_log_analysis_actions")
        self._execute_single_action_and_measure(driver, self._event_status_actions, instance_number, "_event_status_actions")
        self._execute_single_action_and_measure(driver, self._work_management_actions, instance_number, "_work_management_actions", wait)

        # Only run admin actions if the account_type is 1 (admin)
        if account_type == 1:
            # self._admin_settings_actions(driver)
            print("Admin actions executed.")
            self._execute_single_action_and_measure(driver, self._admin_settings_actions, instance_number, "_admin_settings_actions")
        elif account_type == 2:
            print("Manager account - no specific admin actions.")
            print(f"Session {instance_number}, User: {id}: Manager account - no specific admin actions.")
        elif account_type == 3:
            print("User account - no specific admin actions.")
            print(f"Session {instance_number}, User: {id}: User account - no specific admin actions.")

        time.sleep(1)

    def _run_driver2_actions(self, driver, address, id, pw, account_type):
        wait = WebDriverWait(driver, 10)

        instance_number = driver.instance_number

        self._execute_single_action_and_measure(driver, self._login_action, instance_number, "_login_action", address, id, pw, wait)
        self._execute_single_action_and_measure(driver, self._dashboard_actions, instance_number, "_dashboard_actions")
        self._execute_single_action_and_measure(driver, self._topology_map_actions, instance_number, "_topology_map_actions")
        self._execute_single_action_and_measure(driver, self._event_status_actions, instance_number, "_event_status_actions")

        if account_type == 1:
            print(f"Session {instance_number}, User: {id}: Admin actions not defined for this driver function.")
        elif account_type == 2:
            print(f"Session {instance_number}, User: {id}: Manager account - no specific admin actions.")
        elif account_type == 3:
            print(f"Session {instance_number}, User: {id}: User account - no specific admin actions.")
 

    def _run_driver3_actions(self, driver, address, id, pw, account_type):
        wait = WebDriverWait(driver, 10)

        instance_number = driver.instance_number

        self._execute_single_action_and_measure(driver, self._login_action, instance_number, "_login_action", address, id, pw, wait)
        self._execute_single_action_and_measure(driver, self._dashboard_actions, instance_number, "_dashboard_actions (1st)")
        self._execute_single_action_and_measure(driver, self._dashboard_actions, instance_number, "_dashboard_actions (2nd)")
        self._execute_single_action_and_measure(driver, self._performance_operation_actions, instance_number, "_performance_operation_actions (1st)")
        self._execute_single_action_and_measure(driver, self._performance_operation_actions, instance_number, "_performance_operation_actions (2nd)")
        self._execute_single_action_and_measure(driver, self._log_analysis_actions, instance_number, "_log_analysis_actions (1st)")
        self._execute_single_action_and_measure(driver, self._log_analysis_actions, instance_number, "_log_analysis_actions (2nd)")

        if account_type == 1:
            print(f"Session {instance_number}, User: {id}: Admin actions not defined for this driver function.")
        elif account_type == 2:
            print(f"Session {instance_number}, User: {id}: Manager account - no specific admin actions.")
        elif account_type == 3:
            print(f"Session {instance_number}, User: {id}: User account - no specific admin actions.")

    def _run_single_driver_actions(self, address, id, pw, account_type, driver_instance_number):

@@ -313,60 +363,27 @@ class MultipleTest(unittest.TestCase):
            options.add_argument("--disable-dev-shm-usage")

        driver = webdriver.Chrome(executable_path=self.webdriver_path, options=options)
        driver.instance_number = driver_instance_number # Attach instance number to driver for logging
        driver.implicitly_wait(10)  # Common implicit wait for this driver
        self.drivers.append(driver)  # Add this driver to the list for tearDown

        wait = WebDriverWait(driver, 10)

        print(f"Starting actions for session {driver_instance_number} with user: {id}")

        start_time = time.time()
        self._login_action(driver, address, id, pw, wait)
        end_time = time.time()
        print(f"Session {driver_instance_number}, User: {id}: _login_action executed in {end_time - start_time:.2f} seconds")
        if self.function_to_execute == 1:
            self._execute_and_measure_actions(driver, address, id, pw, account_type, driver_instance_number, self._run_driver1_actions)
        elif self.function_to_execute == 2:
            self._execute_and_measure_actions(driver, address, id, pw, account_type, driver_instance_number, self._run_driver2_actions)
        elif self.function_to_execute == 3:
            self._execute_and_measure_actions(driver, address, id, pw, account_type, driver_instance_number, self._run_driver3_actions)

    def _execute_and_measure_actions(self, driver, address, id, pw, account_type, driver_instance_number, main_driver_func):
        start_time = time.time()
        self._dashboard_actions(driver)
        end_time = time.time()
        print(f"Session {driver_instance_number}, User: {id}: _dashboard_actions executed in {end_time - start_time:.2f} seconds")

        start_time = time.time()
        self._topology_map_actions(driver)
        main_driver_func(driver, address, id, pw, account_type)
        end_time = time.time()
        print(f"Session {driver_instance_number}, User: {id}: _topology_map_actions executed in {end_time - start_time:.2f} seconds")

        start_time = time.time()
        self._performance_operation_actions(driver)
        end_time = time.time()
        print(f"Session {driver_instance_number}, User: {id}: _performance_operation_actions executed in {end_time - start_time:.2f} seconds")

        start_time = time.time()
        self._log_analysis_actions(driver)
        end_time = time.time()
        print(f"Session {driver_instance_number}, User: {id}: _log_analysis_actions executed in {end_time - start_time:.2f} seconds")

        start_time = time.time()
        self._event_status_actions(driver)
        end_time = time.time()
        print(f"Session {driver_instance_number}, User: {id}: _event_status_actions executed in {end_time - start_time:.2f} seconds")

        start_time = time.time()
        self._work_management_actions(driver, wait)
        end_time = time.time()
        print(f"Session {driver_instance_number}, User: {id}: _work_management_actions executed in {end_time - start_time:.2f} seconds")

        if account_type == 1:
            start_time = time.time()
            self._admin_settings_actions(driver)
            end_time = time.time()
            print(f"Session {driver_instance_number}, User: {id}: _admin_settings_actions executed in {end_time - start_time:.2f} seconds")
            print(f"Admin actions executed for session {driver_instance_number}.")
        elif account_type == 2:
            print(f"Manager account actions for session {driver_instance_number}.")
        elif account_type == 3:
            print(f"User account actions for session {driver_instance_number}.")
        print(f"Total time for Session {driver_instance_number}, User: {id} ({main_driver_func.__name__}): {end_time - start_time:.2f} seconds")
        time.sleep(1)

        time.sleep(1)  # Keep the browser open for a short duration after actions

    def test_multiple(self):
        address = self.DC_address
@@ -377,7 +394,7 @@ class MultipleTest(unittest.TestCase):

        threads = []
        for i in range(duplicate_count):
            # Pass unique driver instance to each thread
            # Pass unique driver instance to each thread, and the chosen function
            thread = threading.Thread(target=self._run_single_driver_actions, args=(address, username, password, account_type, i + 1))
            threads.append(thread)
            thread.start()