【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

 

更详细的格式如下:

 

posted @ 2020-06-04 11:17  RonyJay  阅读(346)  评论(0编辑  收藏  举报