Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
 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
Ejemplo n.º 6
0
 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")
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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