前言
我们在编写自动化或者编写程序时候,都会想会需要一些打印信息,充当我们需要的log信息,一般用的print比较多,今天安静简单介绍一种,通过装饰器来实现自动化代码日志打印并记录下来。
装饰器
看到题目,大家首先会问什么是装饰器,装饰器其实就是装饰对象的器件。可以在不修改原有代码的情况下,为被装饰的对象增加新的功能或者附加限制条件或者帮助输出装饰对象的器件。可以在不修改原有代码的情况下,为被装饰的对象增加新的功能或者附加限制条件或者帮助输出
使用方法
直接在将要被装饰的对象上输入 @装饰器名称
# 定义一个装饰器
def fun(foo):
def add():
print('日志打印')
foo()
print('日志上传成功')
return add
@fun
def test01():
print('这是自动化用例01')
@fun
def test02():
print('这是自动化用例02')
test01()
test02()
通过执行代码会发现,会将我们增加的日志信息打印出来
D:\python\python.exe D:/test_daily/test02.py
日志打印
这是自动化用例01
日志上传成功
日志打印
这是自动化用例02
日志上传成功
上面主要介绍下什么是装饰器,以及通过装饰器简单的实现了为测试用例增加log的方法
loging
logging属于python的一个库,它主要可以帮助我们实现为增加日志的目的,其中logging大概分为4个组件
|
组件名称
|
对应类名
|
功能描述
|
|
日志器
|
loger
|
提供了应用程序可一直使用的接口
|
|
处理器
|
Handler
|
将logger创建的日志记录发送到合适的目的输出
|
|
过滤器
|
Filter
|
提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录
|
|
格式器
|
Formatter
|
决定日志记录的最终输出格式
|
日志等级
日志级别分为NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL
通过代码进行举例说明
# coding:utf-8
import logging
# 设置打印日志级别
logging.basicConfig(level=logging.DEBUG)
logging.debug('调试模式') # 调试模式
logging.info('基础信息') # 基础信息
logging.warning('警告信息') # 警告
logging.error('错误信息') # 错误
logging.critical('严重错误信息') # 严重错误
通过运行代码得到结果,其中我们可以通过设置打印显示的日志级别
DEBUG:root:调试模式
INFO:root:基础信息
WARNING:root:警告信息
ERROR:root:错误信息
CRITICAL:root:严重错误信息
自动化增加日志
好了,到了最终实践的时候了,简单的了解装饰器和python的日志库,我们可以通过这里进行实现自动化增加日志的功能
# coding:utf-8
import logging
# 获取日志记录器、配置日志等级
log = logging.getLogger(__name__)
log.setLevel("INFO")
# 默认日志格式
formatter = logging.Formatter("%(asctime)s - [%(levelname)s] - %(message)s")
# 输出到控制台的handler
shl = logging.StreamHandler()
# 配置默认日志格式
shl.setFormatter(formatter)
# 日志记录器增加此handler
log.addHandler(shl)
# 装饰器
def loger(func):
def inner(*args, **kwargs):
try:
result = func(*args, **kwargs)
log.info(f"日志信息: {func.__name__}{args}->{result}")
return result
except Exception as e:
log.error(f"报错信息: {func.__name__}->{str(e)}")
return inner
上面的内容是小编简单编写的生成log的装饰器,下面我们继续边界自动化脚本,然后加上装饰器
# coding:utf-8
from log import loger
import requests
@loger
def test_01():
url = 'http://apis.juhe.cn/simpleWeather/query'
data = {
"city": '上海',
'key': 'xxxxxxxxxx'
}
r = requests.post(url, data=data)
return (r.status_code)
@loger
def test_02():
url = 'http://apis.juhe.cn/simpleWeather/query'
data = {
"city": 北京,
'key': 'xxxxxxxxxxxx'
}
r = requests.post(url, data=data)
return (r.status_code)
上述代码是简单的接口代码,其中test_01为成功的案例,test_02为我们异常的案例,我们这里可以通过pytest来进行操作实现(其中XXX部分为聚合数据key大家自行申请)通过cmd进行运动后可以发现,我们已经简单的实现了关于自动化的日志功能
