逐步完善中…
本篇记录使用logging模块
目录
1、封装log类
2、应用log类
1、封装log类
网上很多已经封装好的log类可直接保存到common中
import logging, time
import os
# log_path是存放日志的路径
cur_path = os.path.dirname(os.path.realpath(__file__))
log_path = os.path.join(os.path.dirname(cur_path), 'logs')
# 如果不存在这个logs文件夹,就自动创建一个
if not os.path.exists(log_path):os.mkdir(log_path)
class Log():
def __init__(self):
# 文件的命名
self.logname = os.path.join(log_path, '%s.log'%time.strftime('%Y_%m_%d'))
self.logger = logging.getLogger()
self.logger.setLevel(logging.DEBUG)
# 日志输出格式
self.formatter = logging.Formatter('[%(asctime)s] - %(filename)s] - %(levelname)s: %(message)s')
def __console(self, level, message):
# 创建一个FileHandler,用于写到本地
fh = logging.FileHandler(self.logname, 'a', encoding='utf-8') # 追加模式
fh.setLevel(logging.DEBUG)
fh.setFormatter(self.formatter)
self.logger.addHandler(fh)
# 创建一个StreamHandler,用于输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(self.formatter)
self.logger.addHandler(ch)
if level == 'info':
self.logger.info(message)
elif level == 'debug':
self.logger.debug(message)
elif level == 'warning':
self.logger.warning(message)
elif level == 'error':
self.logger.error(message)
# 这两行代码是为了避免日志输出重复问题
self.logger.removeHandler(ch)
self.logger.removeHandler(fh)
# 关闭打开的文件
fh.close()
def debug(self, message):
self.__console('debug', message)
def info(self, message):
self.__console('info', message)
def warning(self, message):
self.__console('warning', message)
def error(self, message):
self.__console('error', message)
if __name__ == "__main__":
log = Log()
log.info("---执行步骤----")
以上文件,主要是在控制台输出,以及在logs文件中以日期生成log文件


2、应用log类
场景一:接口请求执行失败时,希望针对性用error输出结果

def test_login_01(self):
"登录成功"
result_a=self.m.login("libai","opmsopms1231")
try:
self.self.assertIn(result_a,"贺喜你,登录成功")
log.info("登录成功了")
except Exception as e:
log.error("登录失败了:%s"%result_a)
场景二:一条用例执行执行成功,希望知道是接口url和body信息等,可以使用info来输出到日志中
比如我这里希望输出我的接口信息,则在接口中调用log里面的info方法来用日志记录:

class my_login():
def login(self,user,password):
self.s=requests.session()
login_header={
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
}
login_url="http://111:8089/login"
login_body={"username":user,
"password":password}
p=self.s.post(url=login_url,headers=login_header,data=login_body)
log.info("url:%s"%login_url)
return p.json()['message']