Exemple #1
0
    def handle_log_record(self, level, msg, record, attachments):
        '''处理一个日志记录
        
        :param level: 日志级别,参考EnumLogLevel
        :type level: string
        :param msg: 日志消息
        :type msg: string
        :param record: 日志记录
        :type record: dict
        :param attachments: 附件
        :type attachments: dict
        '''
        self._write("%s: %s\n" % (levelname[level], msg))

        if level == EnumLogLevel.ASSERT:
            if "actual" in record:
                actual = record["actual"]
                self._write("   实际值:%s%s\n" % (actual.__class__, actual))
            if "expect" in record:
                expect = record["expect"]
                self._write("   期望值:%s%s\n" % (expect.__class__, expect))
            if "code_location" in record:
                self._write(
                    smart_text('  File "%s", line %s, in %s\n' %
                               record["code_location"]))

        if "traceback" in record:
            self._write(smart_text_by_lines("%s\n" % record["traceback"]))

        for name in attachments:
            file_path = smart_text(attachments[name])
            if path_exists(file_path):
                file_path = os.path.abspath(file_path)
            self._write("   %s:%s\n" % (smart_text(name), file_path))
Exemple #2
0
 def get_file(self):
     file_name = '%s_%s.json' % (self._translated_name, get_time_str())
     if not path_exists(file_name):
         content = json.dumps(self._data)
         with codecs_open(file_name, mode="w", encoding="utf-8") as fd:
             fd.write(content)
     return file_name
Exemple #3
0
 def get_file(self):
     file_name = '%s_%s.js' % (self._translated_name, get_time_str())
     if not path_exists(file_name):
         var_name = os.path.basename(file_name)
         var_name = os.path.splitext(file_name)[0].replace(".", "_")
         content = "var %s = %s" % (var_name, json.dumps(self._data))
         content = smart_binary(content)
         with codecs_open(file_name, mode="wb") as fd:
             fd.write(content)
     return file_name
Exemple #4
0
    def execute(self, args):
        """执行过程
        """
        if args.report_args_help:
            report_types[args.report_args_help].get_parser().print_help()
            return
        if args.runner_args_help:
            runner_types[args.runner_args_help].get_parser().print_help()
            return
        if not args.tests:
            logger.info("no test set specified")
            exit(1)

        from testbase.testcase import TestCase

        if args.working_dir is None:
            args.working_dir = os.getcwd()

        priorities = args.priorities or [TestCase.EnumPriority.Low,
                                          TestCase.EnumPriority.Normal,
                                          TestCase.EnumPriority.High,
                                          TestCase.EnumPriority.BVT]

        status = args.status or [TestCase.EnumStatus.Design,
                                  TestCase.EnumStatus.Implement,
                                  TestCase.EnumStatus.Review,
                                  TestCase.EnumStatus.Ready]

        test_conf = TestCaseSettings(names=args.tests,
                                    excluded_names=args.excluded_names,
                                    priorities=priorities,
                                    status=status,
                                    owners=args.owners,
                                    tags=args.tags,
                                    excluded_tags=args.excluded_tags)

        report_type = report_types[args.report_type]
        if args.report_type == 'xml':

            class VerboseXMLTestReport(report_types[args.report_type]):

                def log_test_result(self, testcase, testresult):
                    logger.info("run test case: %s(pass?:%s)" % (testcase.test_name, testresult.passed))
                    super(VerboseXMLTestReport, self).log_test_result(testcase, testresult)

            report_type = VerboseXMLTestReport

        elif args.report_type == 'online':

            class VerboseOnlineTestReport(report_types[args.report_type]):

                def log_test_result(self, testcase, testresult):
                    logger.info("run test case: %s(pass?:%s)" % (testcase.test_name, testresult.passed))
                    super(VerboseOnlineTestReport, self).log_test_result(testcase, testresult)

                def begin_report(self):
                    super(VerboseOnlineTestReport, self).begin_report()
                    with codecs_open(os.path.join(os.getcwd(), "report_url.txt"), "w", encoding="utf-8") as fd:
                        fd.write(self.url)

            report_type = VerboseOnlineTestReport

        report = report_type.parse_args(shlex.split(args.report_args))
        resmgr_backend = resmgr_backend_types[args.resmgr_backend_type]()

        runner_type = runner_types[args.runner_type]
        runner = runner_type.parse_args(shlex.split(args.runner_args), report, resmgr_backend)

        prev_dir = os.getcwd()
        if not path_exists(args.working_dir):
            os.makedirs(args.working_dir)
        os.chdir(args.working_dir)
        runner.run(test_conf)
        os.chdir(prev_dir)
        if args.report_type == 'online':
            if sys.platform == "win32":
                logger.info("opening online report url:%s" % report.url)
                os.system("start %s" % report.url)
            else:
                logger.info("online report generated: %s" % report.url)

        elif args.report_type == 'xml':
            if sys.platform == "win32":
                logger.info("opening XML report with IE...")
                report_xml = os.path.abspath(os.path.join(args.working_dir, "TestReport.xml"))
                os.system("start iexplore %s" % report_xml)
            else:
                logger.info("XML report generated: %s" % os.path.abspath("TestReport.xml"))
        if not report.is_passed():
            sys.exit(1)
Exemple #5
0
    def execute(self, args):
        """执行过程
        """
        if args.config_file:
            with open(args.config_file, 'r') as fp:
                data = json.load(fp)
                for k, value in data.items():
                    setattr(args, k, value)

        if args.report_args_help:
            report_types[args.report_args_help].get_parser().print_help()
            return 1
        if args.runner_args_help:
            runner_types[args.runner_args_help].get_parser().print_help()
            return 1
        if not args.tests:
            logger.info("no test set specified")
            return 1

        if args.working_dir is None:
            args.working_dir = os.getcwd()
        prev_dir = os.getcwd()
        if not path_exists(args.working_dir):
            os.makedirs(args.working_dir)
        os.chdir(args.working_dir)

        priorities = args.priorities or [
            TestCase.EnumPriority.Low, TestCase.EnumPriority.Normal,
            TestCase.EnumPriority.High, TestCase.EnumPriority.BVT
        ]

        status = args.status or [
            TestCase.EnumStatus.Design, TestCase.EnumStatus.Implement,
            TestCase.EnumStatus.Review, TestCase.EnumStatus.Ready
        ]

        if args.global_parameters and isinstance(args.global_parameters,
                                                 six.string_types):
            args.global_parameters = json.loads(args.global_parameters)

        test_conf = TestCaseSettings(names=args.tests,
                                     excluded_names=args.excluded_names,
                                     priorities=priorities,
                                     status=status,
                                     owners=args.owners,
                                     tags=args.tags,
                                     excluded_tags=args.excluded_tags,
                                     global_parameters=args.global_parameters)

        report_type = report_types[args.report_type]
        if args.report_type == 'xml':

            class VerboseXMLTestReport(report_types[args.report_type]):
                def log_test_result(self, testcase, testresult):
                    logger.info("run test case: %s(pass?:%s)" %
                                (testcase.test_name, testresult.passed))
                    super(VerboseXMLTestReport,
                          self).log_test_result(testcase, testresult)

            report_type = VerboseXMLTestReport

        elif args.report_type == 'online':

            class VerboseOnlineTestReport(report_types[args.report_type]):
                def log_test_result(self, testcase, testresult):
                    logger.info("run test case: %s(pass?:%s)" %
                                (testcase.test_name, testresult.passed))
                    super(VerboseOnlineTestReport,
                          self).log_test_result(testcase, testresult)

                def begin_report(self):
                    super(VerboseOnlineTestReport, self).begin_report()
                    print("report url: %s" % self.url)
                    with codecs_open(os.path.join(os.getcwd(),
                                                  "report_url.txt"),
                                     "w",
                                     encoding="utf-8") as fd:
                        fd.write(self.url)

            report_type = VerboseOnlineTestReport

        report = report_type.parse_args(shlex.split(args.report_args))
        resmgr_backend = resmgr_backend_types[args.resmgr_backend_type]()

        runner_type = runner_types[args.runner_type]
        # 解析runner_args参数, 用于支持命令行传入concurrency=5,retries=1
        runner_args = self.run_args_parser(args.runner_args)
        runner = runner_type.parse_args(shlex.split(runner_args), report,
                                        resmgr_backend)

        runner.run(test_conf)
        os.chdir(prev_dir)
        if args.report_type == 'online':
            if sys.platform == "win32" and os.environ.get(
                    "AUTO_OPEN_URL", "1") == "1":
                logger.info("opening online report url:%s" % report.url)
                os.system("start %s" % report.url)
            else:
                logger.info("online report generated: %s" % report.url)

        elif args.report_type == 'xml':
            if sys.platform == "win32" and os.environ.get(
                    "AUTO_OPEN_URL", "1") == "1":
                logger.info("opening XML report with IE...")
                report_xml = os.path.abspath(
                    os.path.join(args.working_dir, "TestReport.xml"))
                os.system("start iexplore %s" % report_xml)
            else:
                logger.info("XML report generated: %s" %
                            os.path.abspath("TestReport.xml"))

        if not report.is_passed():
            return 1