当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    python自动化测试之异常及日志操作实例分析

    栏目:win服务器问题汇总 时间:2019-11-20 09:35

    本文实例讲述了python自动化测试之异常及日志操作。分享给大家供大家参考,具体如下:

      为了保持自动化测试用例的健壮性,异常的捕获及处理,日志的记录对掌握自动化测试执行情况尤为重要,这里便详细的介绍下在自动化测试中使用到的异常及日志,并介绍其详细的用法。

      一、日志

        打印日志是很多程序的重要需求,良好的日志输出可以帮我们更方便的检测程序运行状态。Python标准库提供了logging模块,切记Logger从来不直接实例化,其好处不言而喻,接下来慢慢讲解Logging模块提供了两种记录日志的方式。

    logging之模块级别的函数方式记录日志
    import logging
    #设置日志,包括filename、level、format、filemode、stream,其中format属性极其丰富,详情可查看API文档,这里只做简要介绍
    logging.basicConfig(level = logging.INFO,
      format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
      datefmt = "%Y/%m%d %H%M%S",
      filename = "log.txt")
    #消息级别,五级
    logging.debug("芹泽多摩雄") 
    logging.info("真")
    logging.warning("男")
    logging.error("人")
    logging.critical("!")
    
    
      logging之日志系统的四大组件(日志器、处理器、过滤器、格式器)方式记录日志
    import logging
    # 生成日志实例,日志器
    logger = logging.getLogger(__name__)
    #基本单元的配置(LEVER)
    logger.setLevel(level = logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    #生成管道分支,处理器
    handler_1 = logging.FileHandler("log.txt")
    handler_2 = logging.StreamHandler()
    #自定义格式,格式器
    handler_1.setFormater(formatter, “%Y-%m-%d %H:%M:%S”)
    handler_2.setFormater(formatter, “%Y-%m-%d %H:%M:%S”)
    #对接分支管道与源头,处理器
    logger.addHandler(handler_1)
    logger.addHandler(handler_2)
    #层级结构,logger的名称是一个以'.'分割的层级结构,每个'.'后面的logger都是'.'前面的logger的children,通常配合过滤器一起使用
    #过滤器
    #。。。。保留
    #开始记录
    logger.debug("芹泽多摩雄") 
    logger.info("真")
    logger.warning("男")
    logger.error("人")
    logger.critical("!")
    
    
    细心的盆友又可以发现,可以发现,logging有一个日志处理的主对象,其他处理方式都是通过addHandler添加进去,这里采用logging.StreamHandler实现日志输出到流(控制台),也可以用FileHandler实现日志输出到文件 日志回滚
    import logging
    from logging.handlers import RotatingFileHandler
    logger = logging.getLogger(__name__)
    logger.setLevel(level = logging.INFO)
    #定义一个RotatingFileHandler,最多备份3个日志文件,每个日志文件最大1K
    rHandler = RotatingFileHandler("log.txt",maxBytes = 1*1024,backupCount = 3)
    rHandler.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    rHandler.setFormatter(formatter)
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    console.setFormatter(formatter)
    logger.addHandler(rHandler)
    logger.addHandler(console)
    logger.debug("芹泽多摩雄") 
    logger.info("真")
    logger.warning("男")
    logger.error("人")
    logger.critical("!")
    
    
    多模块使用
    #主模块
    import logging
    import subModule
    logger = logging.getLogger("mainModule")
    logger.setLevel(level = logging.INFO)
    handler = logging.FileHandler("log.txt")
    handler.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    console.setFormatter(formatter)
    logger.addHandler(handler)
    logger.addHandler(console)
    #子模块
    import logging
    module_logger = logging.getLogger("mainModule.sub")
    class SubModuleClass(object):
      def __init__(self):
        self.logger = logging.getLogger("mainModule.sub.module")