博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python+Selenium中级篇之8-Python自定义封装一个简单的Log类---修改
阅读量:4290 次
发布时间:2019-05-27

本文共 2267 字,大约阅读时间需要 7 分钟。

https://blog.csdn.net/u011541946/article/details/70198676

  1. from test.logger import Logger  --改成 from logger import Logger
  2. 在D:\software\PycharmProject\python_automation\Logs 目录下增加了一个文件夹Logs
  3. os.getcwd() 方法用于返回当前工作目录。
 本文介绍如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里。为什么需要日志输出呢,我们需要记录我们测试脚本到底做了什么事情,最好的办法是写事件监听。这个事件监听,对我们现在来说,还是有点复杂去理解,所以我这里,选择封装一个简单的日志类,同样达到这个效果。
我们大概需要如下日志输出效果:
问题分析:
我们需要封装一个简单的日志类,主要有以下内容:
1. 生成的日志文件格式是 年月日时分秒.log
2. 生成的xxx.log文件存储在项目根目录下Logs文件夹下
3. 这个日志类,支持INFO,ERROR两种日志级别
4. 日志里,每行日志输出,如上图,时间日期+执行类名称+日志级别+日志描述
解决问题思路:
1. 在根目录下新建一个Logs的文件夹,如何获取这个Log的相对路径,前面介绍过。
2. 日志的保存命名,需要系统时间,前面也介绍过时间格式化输出
3. Python中有一个logging模块来支持我们自定义封装一个新日志类。
4. 在脚本里,初始化一个日志类的实例对象,然后去控制输出INFO还是ERROR日志信息。
自定义日志类封装如下:logger.py,新建在test包下
[python]   
  1. # _*_ coding: utf-8 _*_  
  2. import logging  
  3. import os.path  
  4. import time  
  5.   
  6.   
  7. class Logger(object):  
  8.   
  9.     def __init__(self, logger):  
  10.         """ 
  11.         指定保存日志的文件路径,日志级别,以及调用文件 
  12.             将日志存入到指定的文件中 
  13.         :param logger: 
  14.         """  
  15.         # 创建一个logger  
  16.         self.logger = logging.getLogger(logger)  
  17.         self.logger.setLevel(logging.DEBUG)  
  18.   
  19.         # 创建一个handler,用于写入日志文件  
  20.         rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))  
  21.         log_path = os.path.dirname(os.getcwd()) + '/Logs/'  
  22.         log_name = log_path + rq + '.log'    
  23.         fh = logging.FileHandler(log_name)  
  24.         fh.setLevel(logging.INFO)  
  25.   
  26.         # 再创建一个handler,用于输出到控制台  
  27.         ch = logging.StreamHandler()  
  28.         ch.setLevel(logging.INFO)  
  29.   
  30.         # 定义handler的输出格式  
  31.         formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  
  32.         fh.setFormatter(formatter)  
  33.         ch.setFormatter(formatter)  
  34.   
  35.         # 给logger添加handler  
  36.         self.logger.addHandler(fh)  
  37.         self.logger.addHandler(ch)  
  38.   
  39.     def getlog(self):  
  40.         return self.logger  

新写一个测试日志类,相关代码如下:

# coding=utf-8import timefrom selenium import webdriverfrom logger import Loggermylogger = Logger(logger='TestMyLog').getlog()class TestMyLog(object):    def print_log(self):        driver = webdriver.Chrome()        mylogger.info("打开浏览器")        driver.maximize_window()        mylogger.info("最大化浏览器窗口。")        driver.implicitly_wait(8)        driver.get("https://www.baidu.com")        mylogger.info("打开百度首页。")        time.sleep(1)        mylogger.info("暂停一秒。")        driver.quit()        mylogger.info("关闭并退出浏览器。")testlog = TestMyLog()testlog.print_log()

  在PyCharm里运行下这个测试类,会在根目录下的Logs文件下,新建一个日志文件,打开效果如文章开头的日志输出图。好了,关于自定义封装log类,自己好好去读下代码,理解下每行代码的意思,日志类的封装和调用就介绍到这里。

你可能感兴趣的文章
netty源码分析之-ByteBuf详解(8)
查看>>
javascript函数定义三种方式详解
查看>>
javascript中this关键字详解
查看>>
javascript关于call与apply方法详解
查看>>
netty源码分析之-ReferenceCounted详解(9)
查看>>
javascript闭包详解
查看>>
javascript类的创建与实例对象
查看>>
javascript原型详解(1)
查看>>
netty源码分析之-处理器详解(9)
查看>>
javascript原型对象存在的问题(3)
查看>>
javascript原型继承(1)
查看>>
javascript原型继承-实现extjs底层继承(2)
查看>>
javascript设计模式-建立接口的方式(1)
查看>>
javascript设计模式-单体singleton模式(2)
查看>>
javascript设计模式-链式编程(3)
查看>>
大型高并发与高可用缓存架构总结
查看>>
javascript设计模式-工厂模式(4)
查看>>
javascript设计模式-组合模式(6)
查看>>
javascript设计模式-门面模式(7)
查看>>
javascript设计模式-享元模式(10)
查看>>