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))
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
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
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)
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