• 【selenium学习中级篇 -28】封装一个日志类


    在脚本运行中,我们可能需要知道脚本运行到哪个地方了,运行了些什么东西,输出的信息哪些比较严重,如果直接在代码里面print输出很不友好,也不适合进行筛选,所以引进了日志

    在日志中,可以通过日志的级别来筛选显示我们需要的信息

    日志级别 数值
    CRITICAL 50
    ERROR 40
    WARNING 30(默认级别)
    INFO 20
    DEBUG 10
    NOTSET 0

    如果设置的日志级别高于logging模块设置的级别,才会显示,这样,我们就可以控制日志输出的级别

    比如,我们设置logging的级别为INFO,那么我们输出时,只会显示CRITICAL,ERROR,WARNING,INFO,而低于INFO级别的DEBUG和NOTSET则不会显示,了解一下,进入我们的正题

    封装日志模块步骤:

    1.在工程目录下新建Logs文件夹,用于存放我们生成的日志文件

    2.在Base包下新建log.py文件

    3.在需要输出日志的地方,添加日志输出代码

    log.py

    import logging
    import os.path
    import time
    
    
    class Log(object):
    
        def __init__(self, log):
            # 创建一个log
            # getLogger(log)中log为日志记录的模块名字,后面的日志格式中的 %(name)s对应的是这里的模块名字
            self.log = logging.getLogger(log)
         # 设置日志级别,高于DEBUG的才会显示 self.log.setLevel(logging.DEBUG)
    '''创建handler''' # 获取项目根目录的相对路径 log_path = os.path.dirname(os.path.abspath('.')) + '/Logs/' log_name = os.path.join(log_path, '{0}.log'.format(time.strftime('%Y-%m-%d'))) # 创建一个handler,用来写日志文件 fh = logging.FileHandler(log_name) fh.setLevel(logging.INFO) # 输出到控制台 ch = logging.StreamHandler() ch.setLevel(logging.INFO) # 定义输出格式 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) self.log.addHandler(fh) self.log.addHandler(ch) def getlog(self): return self.log

    在test_baidu.py中添加打印日志的代码

    日志的添加可以在任何页面的任何地方,我这里只是拿test_baidu.py为例

    日志信息将打印在控制台,和Logs下的日志文件中

    from Base import *
    
    from Flow import *
    import unittest
    import time
    
    
    class TestBaiDuSearch(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
         # 实例化一个日志类的实例对象 cls.logger
    = Log(log='test_baidu').getlog() browser = BrowserEngine(cls) cls.driver = browser.open_browser() cls.baidu_flow = BaiduFlow(cls.driver) @classmethod def tearDownClass(cls): cls.driver.quit() def test_baidu(self):
         # 打印信息 self.logger.info(
    "测试百度知道的selenium第一条链接") self.baidu_flow.open_baidu() result = self.baidu_flow.baidu_know_search("selenium") time.sleep(3) self.assertEqual(result, "http://zhidao.baidu.com/question/147041701.html?fr=iks&word=selenium&ie=gbk") def test_baidu_hao123(self):
         # 打印信息 self.logger.info(
    "测试好123页面的URL") self.baidu_flow.open_baidu() self.baidu_flow.click_baidu_hao123() self.baidu_flow.switch_handle() hao_url = self.baidu_flow.get_page_url() self.assertEqual(hao_url,"https://www.hao123.com/")

    这样再次运行,则会有日志信息打印了

    最后再说一下,日志类中的格式设定

     formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    %(asctime)s表示这个位置上是字符串形式的当前时间;默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒

    %(name)s表示Logger的名字,即实例化日志类时传入的参数 logger = Log(log='test_baidu').getlog(),这里就是test_baidu

    %(levelname)s表示输出的级别

    %(message)s 则是打印出来的信息,比如,self.logger.info("测试好123页面的URL")中,“测试好123页面的URL”就是对应的%(message)s

    更详细的格式如下:

  • 相关阅读:
    关于WEB页面的强制分页打印问题
    iOS地图多个自定义大头针绘制核心代码
    PHP生成随机码
    安卓动画小结
    WKWebView遇到的问题汇总
    实现图片预加载的几种方式
    苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程
    markdown语法博客园测试
    Agreement has been updated--Edit Phone Number最便捷解决办法(不需要安全提示问题和双重认证)
    Python黑帽子:自动化内存取证
  • 原文地址:https://www.cnblogs.com/ronyjay/p/13042357.html
Copyright © 2020-2023  润新知