学习一下python的日志模块logging,可以参考如下博客,写得很详细

https://www.cnblogs.com/yyds/p/6901864.html

https://www.cnblogs.com/goodhacker/p/3355660.html

https://cuiqingcai.com/6080.html

实践:把日志模块加到requests+excel接口测试框架中

新建一个logs文件夹,用来存放输出的日志文件;然后在utils工具中创建一个logger.py,封装日志调用方法

logger.py的内容如下

# -*- coding:utf-8 -*-
import logging
import os
from utils import getcwd log_path = os.path.dirname(getcwd.get_cwd())
print(log_path)
class Logger:
def __init__(self,loggername): #创建一个logger
self.logger = logging.getLogger(loggername)
self.logger.setLevel(logging.DEBUG) #创建一个handler,用于写入日志文件
log_path = os.path.dirname(getcwd.get_cwd())+"/logs/" # 指定文件输出路径,注意logs是个文件夹,一定要加上/,不然会导致输出路径错误,把logs变成文件名的一部分了
logname = log_path + 'out.log' #指定输出的日志文件名
fh = logging.FileHandler(logname,encoding = 'utf-8') # 指定utf-8格式编码,避免输出的日志文本乱码
fh.setLevel(logging.DEBUG) #创建一个handler,用于将日志输出到控制台
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG) # 定义handler的输出格式
formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter) # 给logger添加handler
self.logger.addHandler(fh)
self.logger.addHandler(ch) def get_log(self):
"""定义一个函数,回调logger实例"""
return self.logger if __name__ == '__main__':
t = Logger("hmk").get_log().debug("User %s is loging" % 'jeck')

在主函数run_main.py中使用日志

# coding: utf-8
# author: hmk from base.main import RunMethod
from get_datas.get_data import GetData
from utils.handle_excel import HandleExcel
import json
from utils.logger import Logger class RunMain:
def __init__(self):
"""实例化写好的类,备用"""
self.run_method = RunMethod()
self.get_data = GetData()
self.excel = HandleExcel()
self.logger = Logger(__name__) def run(self):
count = self.get_data.get_nrows()
# print(count)
for i in range(1, count):
priority = self.get_data.get_priority(i) # 获取用例的优先级priority
url = self.get_data.get_url(i) # 获取用例的url
method = self.get_data.get_method(i) # 获取请求方法
params = self.get_data.get_params(i) # 获取参数(此处取出来的数据是字符串格式)
params_load = json.loads(params) # 将获取到的参数反序列化,即转化为字典
except_value = self.get_data.get_except_value(i) # 获取预期结果值
if priority == 'H':
r = self.run_method.run_main(method, url, params_load, header=None) # 如果是高优先级用例,则执行
# print(r)
self.logger.get_log().debug('第'+str(i)+'个接口的返回结果为:%s',r) # 输出接口响应内容
# print(type(r))
if except_value in r:
# print(self.get_data.get_caseSeq(i) + '测试通过')
self.logger.get_log().debug('第' + str(i) + '接口测试通过')
# self.get_data.write_values(i, 'PASS') # 调用get_data.py文件中的write_values()方法
self.excel.write_value(i, 11, 'pass') # 调用handle_excel.py文件中的write_value()方法
else:
# print(self.get_data.get_caseSeq(i) + '执行失败')
self.logger.get_log().debug('第' + str(i) + '接口测试不通过')
# self.get_data.write_values(i, 'FAIL')
self.excel.write_value(i, 11, 'fail') if __name__ == '__main__':
t = RunMain()
t.run()

打印出的日志内容

这样就可以替代用print来查看代码运行的输出内容了

python日志模块的使用的更多相关文章

  1. python日志模块logging

    python日志模块logging   1. 基础用法 python提供了一个标准的日志接口,就是logging模块.日志级别有DEBUG.INFO.WARNING.ERROR.CRITICAL五种( ...

  2. python日志模块

    许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系 统的运行状况进行跟踪.在.NET平台中,有非常著名的第三方开源日志组件log4net,c++中,有人们熟悉的log4c ...

  3. Python 日志模块实例

    python 打印对象的所有属性值: def prn_obj(obj):     print '\n'.join(['%s:%s' % item for item in obj.__dict__.it ...

  4. Python日志模块logging用法

    1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRITICAL. DEBUG:详细的信息,通常只出现在诊断问题上 INFO:确认一切按预期运行 ...

  5. python日志模块logging学习

    介绍 Python本身带有logging模块,其默认支持直接输出到控制台(屏幕),或者通过配置输出到文件中.同时支持TCP.HTTP.GET/POST.SMTP.Socket等协议,将日志信息发送到网 ...

  6. python日志模块笔记

    前言 在应用中记录日志是程序开发的重要一环,也是调试的重要工具.但却很容易让人忽略.之前用flask写的一个服务就因为没有处理好日志的问题导致线上的错误难以察觉,修复错误的定位也很困难.最近恰好有时间 ...

  7. Python 日志模块详解

    前言 我们知道查看日志是开发人员日常获取信息.排查异常.发现问题的最好途径,日志记录中通常会标记有异常产生的原因.发生时间.具体错误行数等信息,这极大的节省了我们的排查时间,无形中提高了编码效率.所以 ...

  8. Python日志模块的管理(二)

    日志模块可以通过封装一个类,也可以通过配置文件取管理 新建1个log.ini文件 [loggers] keys=root [handlers] keys=fileHandler,streamHandl ...

  9. Python 日志模块 logging通过配置文件方式使用

    vim logger_config.ini[loggers]keys=root,infoLogger,errorlogger [logger_root]level=DEBUGhandlers=info ...

随机推荐

  1. 数据结构与算法JS实现

      行解算法题,没错,就是这么方便. 当然也可以使用 Node.js 环境来执行,具体参考Node.js官方文档即可. 二 对象和面向对象编程 js中5种数据类型,并没有定义更多的数据类型,但是运用j ...

  2. PyCharm:no module named * 解决方法

    1.成功安装模块,无法导入 今天安装完模块pyppeteer,pycharm导入失败,从python的Lib下可以清楚的看到已经安装成功 2.添加当前python环境,不使用默认项目的环境 file& ...

  3. Centos7 下安装mysql5.7.17(glibc版)

    一.安装前的检查 1.1 检查 linux 系统版本 [root@localhost ~]# cat /etc/system-release 1.2 检查是否安装了 mysql [root@local ...

  4. SQL kaggle learn with as excercise

    rides_per_year_query = """ SELECT EXTRACT(YEAR FROM trip_start_timestamp) AS year ,CO ...

  5. 网络-03-端口号-linux端口详解大全--著名端口

    端口号码 / 层 名称 注释 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举 ...

  6. C++笔记整理(参考整理自各大博客)

    为什么构造函数不能是虚函数,析构函数往往是虚函数? 静态存储区.无论在那里构建,其过程都是两步:首先,分配一块内存:其次,调用构造函数.好,问题来了,如果构造函数是虚函数,那么就需要通过vtable  ...

  7. django进阶开发(一)--session

    基于cookie做用户验证时:敏感信息不适合放在cookie中 session依赖cookie session原理 cookie是保存在用户浏览器端的键值对 session是保存在服务器端的键值对 s ...

  8. 58 字体反爬攻略 python3

    1.下载安装包 pip install fontTools 2.下载查看工具FontCreator 百度后一路傻瓜式安装即可 3.反爬虫机制 网页上看见的 后台源代码里面的 从上面可以看出,生这个字变 ...

  9. 使用ReentrantLock同步,经典银行账户问题

    1.新建Account类,使用ReentrantLock同步增加和减少金额方法. package com.xkzhangsan.reentrantlockpack.bank; import java. ...

  10. 【题解】Luogu P5313 僕たちはひとつの光([Ynoi2012]D2T2)

    原题传送门 lovelive好评 比赛时只拿到了60pts,还是自己太菜了 这题的思想实际有点像Luogu P3674 小清新人渣的本愿与Luogu P5071 [Ynoi2015]此时此刻的光辉 这 ...