def appium_setup(request): """ 启动appium服务 :param request: :return: """ global device_sn, pf, server_ip, appium_port, appium_log_path, device_name, platform_version, wda_port, system_port, appium_p device_sn = cmd_sn(request) # 从执行命令读取测试手机sn号 pf = cmd_platform(request).lower() GlobalVar.set_add_remove(cmd_remove_add(request)) appium_port = util.create_port(server_ip, 4723, 7999) appium_log_path = "{}/src/appium_log/{}_{}.log".format(base_path.get_path(), datetime.now().strftime('%Y-%m-%d_%H.%M.%S'), appium_port) if pf == 'ios': GlobalVar.set_platform(GlobalVar.IOS) # 将平台名保存成全局的变量,脚本中通过GlobalVar.get_platform()获取当前执行的平台 # device_name = util.get_iphone_name(device_sn) device_name = 'iPhone eufy' platform_version = util.get_iphone_version(device_sn) wda_port = util.create_port(server_ip, 8100, 9999) appium_p = subprocess.Popen( "appium -a {} -p {} --webdriveragent-port {} --relaxed-security --session-override > {} 2>&1 &".format (server_ip, appium_port, wda_port, appium_log_path), shell=True) # 命令行启动appium服务 elif pf == 'android': GlobalVar.set_platform(GlobalVar.ANDROID) # 将平台名保存成全局的变量,脚本中通过GlobalVar.get_platform()获取当前执行的平台 util.uninstall_uiautomator2_server() # 卸载手机上安装的uiautomator2 server两个app system_port = util.create_port(server_ip, 8200, 8299) appium_p = subprocess.Popen( "appium -a {} -p {} --relaxed-security --session-override > {} 2>&1 &" .format(server_ip, appium_port, appium_log_path), shell=True) # 命令行启动appium服务 else: raise EnvironmentError('设备平台类型传参错误:--cmd_pf='+pf) time.sleep(10) # 新测试报告 global rp_logger rp_logger = logging.getLogger(__name__) rp_logger.setLevel(logging.DEBUG) # Create handler for Report Portal if the service has been # configured and started. if hasattr(request.node.config, 'py_test_service'): # Import Report Portal logger and handler to the test module. logging.setLoggerClass(RPLogger) rp_handler = RPLogHandler(request.node.config.py_test_service) # Add additional handlers if it is necessary console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) rp_logger.addHandler(console_handler) else: rp_handler = logging.StreamHandler(sys.stdout) # Set INFO level for Report Portal handler. rp_handler.setLevel(logging.INFO) GlobalVar.set_rp_logger(rp_logger) def teardown(): try: os.killpg(os.getegid(appium_p.pid+1), signal.SiGTERM) except Exception as e: print(e) pass request.addfinalizer(teardown)
def robottelo_logger(request, worker_id): """Set up a separate logger for each pytest-xdist worker if worker_id != 'master' then xdist is running in multi-threading so a logfile named 'robottelo_gw{worker_id}.log' will be created. """ logger = logging.getLogger('robottelo') if (hasattr(request.session.config, '_reportportal_configured') and request.session.config._reportportal_configured): logging.setLoggerClass(RPLogger) if '{0}'.format(worker_id) not in [h.get_name() for h in logger.handlers]: if worker_id != 'master': formatter = logging.Formatter( fmt='%(asctime)s - {0} - %(name)s - %(levelname)s -' ' %(message)s'.format(worker_id), datefmt='%Y-%m-%d %H:%M:%S' ) handler = logging.FileHandler( 'robottelo_{0}.log'.format(worker_id) ) handler.set_name('{0}'.format(worker_id)) handler.setFormatter(formatter) logger.addHandler(handler) # Nailgun HTTP logs should also be included in gw* logs logging.getLogger('nailgun').addHandler(handler) if (hasattr(request.session.config, '_reportportal_configured') and request.session.config._reportportal_configured): rp_handler = RPLogHandler(request.node.config.py_test_service) rp_handler.set_name('{0}'.format(worker_id)) rp_handler.setFormatter(formatter) logger.addHandler(rp_handler) logging.getLogger('nailgun').addHandler(rp_handler) return logger
def rp_logger(request): """ This routine is to create reportportal handler. Args: request(object): pytest test object Returns: logger (object) : logger object """ logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) if hasattr(request.node.config, "py_test_service"): logging.setLoggerClass(RPLogger) rp_handler = RPLogHandler(request.node.config.py_test_service) CustomLogging.IS_RP_ENABLED = True # Set verbose logs to DEBUG CustomLogging.set_verbose_level(lvl=CustomLogging.DEBUG) # Skipping logs via peewee db-orm logger = logging.getLogger("peewee") logger.addHandler(logging.StreamHandler()) logger.setLevel(logging.ERROR) else: rp_handler = logging.StreamHandler(sys.stdout) rp_handler.setLevel(logging.DEBUG) return logger
def log(self): logging.setLoggerClass(RPLogger) logger = logging.getLogger(self) logger.setLevel(logging.DEBUG) # Create handler for Report Portal. rp_handler = RPLogHandler() # Set INFO level for Report Portal handler. rp_handler.setLevel(logging.DEBUG) # Add handler to the logger. logger.addHandler(rp_handler) return logger
def rp_logger(request): import logging logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) if hasattr(request.node.config, 'py_test_service'): from pytest_reportportal import RPLogger, RPLogHandler logging.setLoggerClass(RPLogger) rp_handler = RPLogHandler(request.node.config.py_test_service) else: import sys rp_handler = logging.StreamHandler(sys.stdout) rp_handler.setLevel(logging.INFO) return logger
def setup_rp_logging(self, rp_pytest_service): "Setup reportportal logging" try: # Setting up a logging. logging.setLoggerClass(RPLogger) self.rp_logger = logging.getLogger(__name__) self.rp_logger.setLevel(logging.INFO) # Create handler for Report Portal. rp_handler = RPLogHandler(rp_pytest_service) # Set INFO level for Report Portal handler. rp_handler.setLevel(logging.INFO) return self.rp_logger except Exception as e: self.write("Exception when trying to set rplogger") self.write(str(e)) self.exceptions.append( "Error when setting up the reportportal logger")
def rp_logger(item): import logging # Import Report Portal logger and handler to the test module. try: from pytest_reportportal import RPLogger, RPLogHandler # Setting up a logging. logging.setLoggerClass(RPLogger) logger = logging.getLogger(__name__ + '_rp') logger.setLevel(logging.DEBUG) # Create handler for Report Portal. if item.config._reportportal_configured: rp_handler = RPLogHandler(item.config.py_test_service) # Set INFO level for Report Portal handler. rp_handler.setLevel(logging.INFO) except ImportError: logger = logging.getLogger(__name__) return logger
def rp_logger(request): logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # Create handler for Report Portal if the service has been # configured and started. if hasattr(request.node.config, 'py_test_service'): # Import Report Portal logger and handler to the test module. logging.setLoggerClass(RPLogger) rp_handler = RPLogHandler(request.node.config.py_test_service) # Add additional handlers if it is necessary console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) logger.addHandler(console_handler) else: rp_handler = logging.StreamHandler(sys.stdout) # Set INFO level for Report Portal handler. rp_handler.setLevel(logging.INFO) return logger
def configure_logging(request, worker_id): """Handle xdist and ReportPortal logging configuration at session start Set up a separate logger for each pytest-xdist worker if worker_id != 'master' then xdist is running in multi-threading so a logfile named 'robottelo_gw{worker_id}.log' will be created. Add a handler for ReportPortal logging """ worker_formatter = logzero.LogFormatter( fmt= f'%(asctime)s - {worker_id} - %(name)s - %(levelname)s - %(message)s', datefmt=DEFAULT_DATE_FORMAT, ) use_rp_logger = hasattr(request.node.config, 'py_test_service') if use_rp_logger: logging.setLoggerClass(RPLogger) if is_xdist_worker(request): if f'{worker_id}' not in [h.get_name() for h in logger.handlers]: # Track the core logger's file handler level, set it in case core logger wasn't set worker_log_level = 'INFO' handlers_to_remove = [ h for h in logger.handlers if isinstance(h, logging.FileHandler) and getattr(h, 'baseFilename', None) == str(robottelo_log_file) ] for handler in handlers_to_remove: logger.removeHandler(handler) worker_log_level = handler.level worker_handler = logging.FileHandler( robottelo_log_dir.joinpath(f'robottelo_{worker_id}.log')) worker_handler.set_name(f'{worker_id}') worker_handler.setFormatter(worker_formatter) worker_handler.setLevel(worker_log_level) logger.addHandler(worker_handler) broker_log_setup( 'debug', robottelo_log_dir.joinpath(f'robottelo_{worker_id}.log')) if use_rp_logger: rp_handler = RPLogHandler(request.node.config.py_test_service) rp_handler.setFormatter(worker_formatter)
def robottelo_logger(request, worker_id): """Set up a separate logger for each pytest-xdist worker if worker_id != 'master' then xdist is running in multi-threading so a logfile named 'robottelo_gw{worker_id}.log' will be created. """ logger = logging.getLogger('robottelo') if ( hasattr(request.session.config, '_reportportal_configured') and request.session.config._reportportal_configured ): logging.setLoggerClass(RPLogger) if '{0}'.format(worker_id) not in [h.get_name() for h in logger.handlers]: if worker_id != 'master': formatter = logging.Formatter( fmt='%(asctime)s - {0} - %(name)s - %(levelname)s -' ' %(message)s'.format(worker_id), datefmt='%Y-%m-%d %H:%M:%S', ) handler = logging.FileHandler('robottelo_{0}.log'.format(worker_id)) handler.set_name('{0}'.format(worker_id)) handler.setFormatter(formatter) logger.addHandler(handler) # Nailgun HTTP logs should also be included in gw* logs logging.getLogger('nailgun').addHandler(handler) if ( hasattr(request.session.config, '_reportportal_configured') and request.session.config._reportportal_configured ): rp_handler = RPLogHandler(request.node.config.py_test_service) rp_handler.set_name('{0}'.format(worker_id)) rp_handler.setFormatter(formatter) logger.addHandler(rp_handler) logging.getLogger('nailgun').addHandler(rp_handler) return logger