コード例 #1
0
ファイル: test_suite.py プロジェクト: seungha-yang/fluster
    def _run_worker(self, test: Test) -> TestVector:
        '''Run one unit test returning the TestVector'''
        # Save the original module and qualname to restore it before returning
        # the TestVector. Otherwise, Pickle will complain if the classes can't
        # be found in global scope. The trick here is that we change the names
        # momentarily just to obtain the error traces in str format
        test_cls = type(test)
        module_orig = test_cls.__module__
        qualname_orig = test_cls.__qualname__
        self._rename_test(test, test.decoder.name, test.test_suite.name)

        test_result = TestResult()
        test(test_result)

        line = '.'
        if test_result.failures:
            line = 'F'
        elif test_result.errors:
            line = 'E'
        print(line, end='', flush=True)

        self._collect_results(test_result)
        self._rename_test(test, module_orig, qualname_orig)

        return test.test_vector
コード例 #2
0
ファイル: server.py プロジェクト: haggi/TestFramework
    def _wait_for_test_done(cls, test: FirmwareTestClass, router: Router,
                            done_event: DoneEvent) -> None:
        """
        Wait 5 minutes until the test is done.
        Handles the result from the tests.
        Triggers the next job/test.

        :param test: test to execute
        :param router: the Router
        """
        logging.debug("%sWait for test" + str(test),
                      LoggerSetup.get_log_deep(2))
        try:
            async_result = cls._task_pool.apply_async(func=cls._execute_test,
                                                      args=(test, router))
            result = async_result.get(
                300)  # wait 5 minutes or raise an TimeoutError
            logging.debug("%sTest done " + str(test),
                          LoggerSetup.get_log_deep(1))
            logging.debug("%sFrom " + str(router), LoggerSetup.get_log_deep(2))

            cls._test_results.append((router.id, str(test), result))
        except Exception as e:
            # TODO #105
            logging.error("%sTest raised an Exception: " + str(e),
                          LoggerSetup.get_log_deep(1))

            result = TestResult()
            result._original_stdout = None
            result._original_stderr = None
            # result.addError(None, (type(exception), exception, None))
            # TODO exception handling for failed Tests

            cls._test_results.append((router.id, str(test), result))

        finally:
            cls.set_running_task(router, None)
            # logging.debug(str(cls._test_results))
            # start next test in the queue
            done_event.set()
            cls.__start_task(router, None)
コード例 #3
0
ファイル: server.py プロジェクト: haggi/TestFramework
    def _execute_test(cls, test: FirmwareTestClass,
                      router: Router) -> TestResult:
        if not isinstance(router, Router):
            raise ValueError("Chosen Router is not a real Router...")
        # proofed: this method runs in other process as the server
        logging.debug("%sExecute test " + str(test) + " on " + str(router),
                      LoggerSetup.get_log_deep(2))

        test_suite = defaultTestLoader.loadTestsFromTestCase(test)

        # prepare all test cases
        for test_case in test_suite:
            logging.debug("%sTestCase " + str(test_case),
                          LoggerSetup.get_log_deep(4))
            test_case.prepare(router)

        result = TestResult()

        cls.__setns(router)
        try:

            result = test_suite.run(
                result)  # TODO if debug set, run as debug()
        except Exception as e:
            logging.error("%sTestCase raised an exception",
                          LoggerSetup.get_log_deep(3))
            logging.error("%s" + str(e), LoggerSetup.get_log_deep(3))
        finally:

            # I'm sry for this dirty hack, but if you don't do this you get an
            # "TypeError: cannot serialize '_io.TextIOWrapper' object" because sys.stdout is not serializeable...
            result._original_stdout = None
            result._original_stderr = None

            logging.debug("%sResult from test " + str(result),
                          LoggerSetup.get_log_deep(3))
            return result
コード例 #4
0
 def run_suite(self, suite, **kwargs):
     if browser == 'Sauce' and sauce_accesskey == '' and sauce_username == '':
         print('Sauce selected but no accesskey and username - test suite will not run')
         return TestResult()
     else:
         return super(Runner, self).run_suite(suite, **kwargs)