本文共 2267 字,大约阅读时间需要 7 分钟。
https://blog.csdn.net/u011541946/article/details/70198676
- from test.logger import Logger --改成 from logger import Logger
- 在D:\software\PycharmProject\python_automation\Logs 目录下增加了一个文件夹Logs
- os.getcwd() 方法用于返回当前工作目录。
本文介绍如何写一个Python日志类,用来输出不同级别的日志信息到本地文件夹下的日志文件里。为什么需要日志输出呢,我们需要记录我们测试脚本到底做了什么事情,最好的办法是写事件监听。这个事件监听,对我们现在来说,还是有点复杂去理解,所以我这里,选择封装一个简单的日志类,同样达到这个效果。我们大概需要如下日志输出效果:问题分析:我们需要封装一个简单的日志类,主要有以下内容:1. 生成的日志文件格式是 年月日时分秒.log2. 生成的xxx.log文件存储在项目根目录下Logs文件夹下3. 这个日志类,支持INFO,ERROR两种日志级别4. 日志里,每行日志输出,如上图,时间日期+执行类名称+日志级别+日志描述解决问题思路:1. 在根目录下新建一个Logs的文件夹,如何获取这个Log的相对路径,前面介绍过。2. 日志的保存命名,需要系统时间,前面也介绍过时间格式化输出3. Python中有一个logging模块来支持我们自定义封装一个新日志类。4. 在脚本里,初始化一个日志类的实例对象,然后去控制输出INFO还是ERROR日志信息。自定义日志类封装如下:logger.py,新建在test包下 -
- import logging
- import os.path
- import time
-
-
- class Logger(object):
-
- def __init__(self, logger):
-
-
-
-
-
-
- self.logger = logging.getLogger(logger)
- self.logger.setLevel(logging.DEBUG)
-
-
- rq = time.strftime('%Y%m%d%H%M', time.localtime(time.time()))
- log_path = os.path.dirname(os.getcwd()) + '/Logs/'
- log_name = log_path + rq + '.log'
- 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.logger.addHandler(fh)
- self.logger.addHandler(ch)
-
- def getlog(self):
- 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类,自己好好去读下代码,理解下每行代码的意思,日志类的封装和调用就介绍到这里。