python自动化测试添加日志_Python自动化测试之日志记录

前言:

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

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("程序错误时的记录,比如网络请求过慢等")

运行结果:

部份参数说明:

"""

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()

运行结果:

说明一下:

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

你可能感兴趣的:(python自动化测试添加日志)