python记录程序运行时间_Python自动化测试之日志记录

本文介绍了Python的日志记录库logging的使用,包括日志等级的概念和实际应用。通过实例展示了如何配置和使用logging记录程序运行过程中的信息,以辅助问题排查和大数据统计。在实际项目中,强调了在主函数中统一设置日志配置的重要性。
摘要由CSDN通过智能技术生成

前言:

在任何一个软件开发过程中,日志记录都是一个必须要做的事。记录日志,有助于问题排查,后续的大数据统计也要需要使用日志提供原始数据。

Python日志库:

logging --- Python 的日志记录工具 这是Python官方提供的日志记录库。优点在于不用安装,直接导入使用即可。

日志等级:

在使用python记录日志前,需要先了解一下什么叫日志等级。还有就是为什么要分等级。首先说明一下,日志等级就是日记录中过程中对输出数据的一个定义,日志分等级的好处在于容易查找和根据等级对日志进行统计,然后分析系统可能存在的问题,比如有一个日志文件,里面有一半是ERROR等级的记录,那么是不是可以反映出系统设计存在问题?日志等级通常可以分为以下几类:

DEBUG:程序调试bug时使用
INFO:程序正常运行时使用
WARNING:程序未按预期运行时使用,但并不是错误,如:用户登录密码错误
ERROR:程序出错误时使用,如:IO操作失败
CRITICAL:特别严重的问题,导致程序不能再继续运行时使用,如:磁盘空间为空,一般很少使 用

在生产环境中一般只需要使用INFO,WARNING,ERROR三个类别来记录就可以满足记录日志的需求。至于什么时候需要使用哪种,这个要配合实际的代码来选择。

logging尝试:

在pycharm中新建一个LogTest.py文件,将以下代码复制进去并运行:

# -*- coding: utf-8 -*-
import logging
#配置日志文件
logging.basicConfig(
    filename='example.log',#保存的文件名
    level=logging.DEBUG,
    datefmt='[%Y-%m-%d %H:%M:%S]',#日期格式
    format='%(asctime)s %(levelname)s %(filename)s [%(lineno)d] %(threadName)s : %(message)s',#保存数据格式
)

logging.debug('这个是调试时记录的日志信息')
logging.info('程序正常运行时记录的日志信息')
logging.warning('程序警告记录的信息')
logging.critical("特别严重的问题")
logging.error("程序错误时的记录,比如网络请求过慢等")

运行结果:

fcd8cd22fa5a6c2177832486c4e160f9.png

部份参数说明:

"""
  format格式设置说明:
       asctime:日期信息
       levelname:日志等级
       filename:当前执行程序的文件名
       lineno:程序运行的行数
       threadName:线程名称
       message:具体的描述信息
"""

返回结果:

[2020-12-10 11:21:37] DEBUG LogTest.py [11] MainThread : 这个是调试时记录的日志信息
[2020-12-10 11:21:37] INFO LogTest.py [12] MainThread : 程序正常运行时记录的日志信息
[2020-12-10 11:21:37] WARNING LogTest.py [13] MainThread : 程序警告记录的信息
[2020-12-10 11:21:37] CRITICAL LogTest.py [14] MainThread : 特别严重的问题
[2020-12-10 11:21:37] ERROR LogTest.py [15] MainThread : 程序错误时的记录,比如网络请求过慢等

返回结果说明:

[2020-12-10 11:21:37]  日志记录时间
DEBUG        日志等级
LogTest.py    执行的文件名
[11]          代码行数
MainThread   主线程
:   冒号后面就是你记录的数据

在实际项目中使用:

以我们前两章的http接口测试demo为例,配合一起使用,在pycharm中记新建一个Request.py文件,复制以下代码并运行:

import requests
import pandas
import time
import logging

#http请求demo
def GetTest():
    #接口请求
    url="https://openapi.dvr163.com/message/nonce"
    Param={ # 传递的参数,字典类型,所有参数写在这里即可
        "method":"get"
    }
    logging.info("发起Get请求,获取接口参数")
    Rque=requests.get(url,Param) # 发起Get请求
     
    logging.info("请求成功")
    #测试数据
    data={
        "Interface":"获取服务器验证码", #接口名称
        "time":time.strftime('%Y-%m-%d_%H:%M:%S', time.localtime(time.time())), #测试时间,这里使用格式化时间,
        "StatusCode":[Rque.status_code] ,#接口响应状态码
        "Responseime":[Rque.elapsed.total_seconds()],#接口响应时间
        "Response DATA": Rque.text, #响应的数据,这里建议使用text,因为不是每个接口都返回json格式
        "Request body": Rque.request.body,  # 发送的数据,get请求的数据会在url中
        "Url": Rque.url,  # 请求的url
        #更多参数请自行添加
     }

    logging.info("测试数据写入csv文件中")

    #写入csv中,以下两行代码建议封装成函数
    dataCSV = pandas.DataFrame(data)
    dataCSV.to_csv("chen.csv", index=False, mode="a", header=False, encoding="GBK")
    
    logging.info("写入csv文件成功")

if __name__ == '__main__':
    logging.basicConfig(
        filename='./example.log',
        level=logging.DEBUG,
        datefmt='[%Y-%m-%d %H:%M:%S]',
        format='%(asctime)s %(levelname)s %(filename)s [%(lineno)d] %(threadName)s : %(message)s',
    )
    GetTest()

运行结果:

f9ad0555d6473507fe19b19dffc1c3db.png

说明一下:

在记录日志过程中,需要配置日志文件的输出路径,输出格式这些参数。如果只是单个py文件,则可以直接写在函数里面,但是项目分为多个模块时,不可能每个函数都配置一次,这样是不利于代码维护的。因此,在主函数中设置即可,logging只需在主函数中设置一次即可,而那些被调用的模块不需要设置,所以在主文件的if __name__ =='__main__':里面把配置信息设置即可,其他模块只需直接导入使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值