接着上一篇继续分享
一个自动化测试框架一般配备日志管理模块,配备该模块主要是为了记录我们运行过程中的日志,在测试用例执行失败时,可以通过日志查找到失败的原因。python内置了一个库logging,今天主要分享logging模块的基本使用。
一、logging介绍
logging库是python记录日志比较常用的一个库,日志记录常用对象主要包括记录器对象logger,处理器对象handler,格式器对象formatter,同时日志分多个级别,主要DEBUG、INFO、WARNING、ERROR、CRITICAL这几个级别,我们可以根据可能出错的级别记录日志。
二、logging基本使用
2.1 获取记录器并记录日志
代码语言:javascript复制#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
logger = logging.getLogger("log")
logging.basicConfig(level=logging.DEBUG) #设置默认级别日志是DEBUG
logger.info("info message")
logger.debug("debug message")
logger.error("error message")
logger.critical("critical message")
logger.warning("warning message")
# 默认的级别是WARNING,只有大于warning级别的才会输出
# 日志级别排序
# CRITICAL > ERROR > WARNING > INFO > DEBUG
# 上述代码大于等于DEBUG的都会被输出,输出结果
2.2 使用处理器handler
比较常用的两个handler类型是StreamHandler、FileHandler,StreamHandler主要是输出到控制台,FileHandler是输出到文件
StreamHandler使用
代码语言:javascript复制#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
from logging import StreamHandler
logger = logging.getLogger("log")
logging.basicConfig(level=logging.DEBUG)
stream_handler = StreamHandler() # 新建streamhandler对象
logger.addHandler(stream_handler) # 将handler对象添加到logger对象
logger.debug("debug message")
FileHandler使用
代码语言:javascript复制#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
from logging import StreamHandler, FileHandler
logger = logging.getLogger("log")
logging.basicConfig(level=logging.DEBUG)
stream_handler = StreamHandler()
file_handler = FileHandler('test.log', encoding="utf-8") # 新建一个filehandler
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
logger.debug("debug message")
# 将日志同时输出控制台和写入test.log
2.3格式器使用
格式器主要控制输出日志的格式,示例代码
代码语言:javascript复制#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
from logging import StreamHandler, FileHandler, Formatter
logger = logging.getLogger("log")
logging.basicConfig(level=logging.DEBUG)
stream_handler = StreamHandler()
file_handler = FileHandler('test.log', encoding="utf-8") # 新建一个filehandler
formater = Formatter(
"%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s") # 定义一个格式器对象,参数是记录属性,为字符串
stream_handler.setFormatter(formater) # 将格式器对象添加到handler
file_handler.setFormatter(formater)
logger.addHandler(stream_handler)
logger.addHandler(file_handler)
logger.debug("debug message")
再次输出日志后,日志格式是
附上常用的记录属性
三、封装自己的日志记录对象
项目中,我们一般只用一个记录器对象,记录器对象是根据名字来,所以我们需要定义记录的记录器,让每个文件记录的日志都输出到同一文件里面,新建一个文件logger.py,示例代码
代码语言:javascript复制#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
import time
import os
BASE_PATH = os.path.dirname(os.path.realpath(__file__))
# 定义日志文件路径
LOG_PATH = os.path.join(BASE_PATH, "log")
if not os.path.exists(LOG_PATH):
os.mkdir(LOG_PATH)
# 封装自己的logging
class MyLogger:
def __init__(self):
self._logName = os.path.join(LOG_PATH, "{}.log".format(time.strftime("%Y%m%d")))
self._logger = logging.getLogger("logger")
self._logger.setLevel(logging.DEBUG)
self._formatter = logging.Formatter('[%(asctime)s][%(filename)s %(lineno)d][%(levelname)s]:%(message)s')
self._streamHandler = logging.StreamHandler()
self._fileHandler = logging.FileHandler(self._logName, mode='a', encoding="utf-8")
self._streamHandler.setFormatter(self._formatter)
self._fileHandler.setFormatter(self._formatter)
self._logger.addHandler(self._streamHandler)
self._logger.addHandler(self._fileHandler)
# 获取logger日志记录器
def get_logger(self):
return self._logger
logger = MyLogger().get_logger() # 记录定义一个logger对象,让其他文件只能获取该logger对象
在测试脚本使用logger
代码语言:javascript复制#!/usr/bin/python
# -*- coding: utf-8 -*-
import pytest
from request_handler import request_handler
from yamlRead import read_yaml
from logger import logger
class Testrequests:
@pytest.mark.parametrize('test_data', read_yaml('login.yml'))
def test_requests(self, test_data):
logger.debug("===========")
logger.debug(f"测试的数据是{test_data}")
url = test_data['url']
method = test_data['method']
data = test_data['data']
r = request_handler(method, url, data)
print(r.json())
assert r.status_code == 200
执行测试用例,控制台输出
生成log目录,存放每天记录一个log日志文件(可以根据自己需要进行定义)
今天的分享就到这里了,明天分享如何对json格式返回数据取值