news 2026/4/23 6:43:54

从零搭建完整python自动化测试框架logging日志模块详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零搭建完整python自动化测试框架logging日志模块详解
前言

logging: 看作一个办公室

logger: 看作办公室的一台打印机

FileHandler: 看作薄文件纸

StreamHandler: 看作厚文件纸

认识了以上几个东西,就好办了,要写日志,就是要打印文件,先从办公室获取打印机,再从办公室获取薄文件纸和厚文件纸,然后把文件纸格式处理下,放到打印机里面,最后开始打印信息就行了。

下面我们就来详细分析一下logging日志模块

一、logging模块介绍

是Python内置的标准模块,主要用于输出运行日志

为什么要使用日志?

日志: 系统在运行过程中的一些信息,系统日志、运行日志、错误日志、用户操作等等

要求:1. 所有日志需要可查,所有的日志需要保留下来,可以查看

2.日志需要分级别设置

二、输出日志到日志文件

控制台日志

import logging logger = logging.getLogger(__name__) logger.setLevel(level=logging.INFO) #创建一个控制台输出的日志对象 console=logging.StreamHandler() #设置日志的格式 formatter=logging.Formatter(‘%(asctime)s – %(filename)s[line:%(lineno)d] – %(levelname)s: %(message)s’) console.setFormatter(formatter) logger.addHandler(console) logger.debug('—–调试信息[debug]—–') logger.info(‘—–有用的信息[info]—–‘) logger.warning('—–警告信息[warning]—–') logger.error('—–错误信息[error]—–') logging.critical('—–严重错误信息[critical]—–')

输出日志到log文件

import os import logging #设置日志路径 current_path=os.path.dirname(__file__) log_path=os.path.join(current_path,‘../logs/test.log’) #创建logger日志对象 logger = logging.getLogger(__name__) logger.setLevel(level=logging.INFO) #创建一个文件输出的日志对象 file_log=logging.FileHandler(log_path) #设置日志格式 formatter=logging.Formatter(‘file:%(asctime)s – %(filename)s[line:%(lineno)d] – %(levelname)s: %(message)s’) file_log.setFormatter(formatter) #把文件输出的日志对象 传给logger日志对象 logger.addHandler(file_log) logger.debug(''—–调试信息[debug]—–'') logger.info(''—–有用的信息[info]—–'') logger.warning(''—–警告信息[warning]—–'') logger.error(''—–错误信息[error]—–'') logger.critical(''—–严重错误信息[critical]—–'') logger.info(‘Hello word!!!’)

把控制台输出日志,文件输出日志放一起

encoding: utf-8 # @author: newdream_daliu # @file: log_demo2.py # @time: 2022-10-06 17:03 # @desc: 输出日志到文件 import os import logging #设置log日志文件的存放位置 current_path=os.path.dirname(__file__) log_path=os.path.join(current_path,‘../logs/2022_10_06_test.log’) # print(log_path) logger=logging.getLogger(__name__) logger.setLevel(level=logging.INFO) #控制台日志 console=logging.StreamHandler() formatter=logging.Formatter(‘%(asctime)s – %(filename)s[line:%(lineno)d] – %(levelname)s: %(message)s’) console.setFormatter(formatter) logger.addHandler(console) #文件日志 #创建一个log文件日志对象 file_log=logging.FileHandler(log_path,encoding=‘utf-8’) #设置文件日志输出格式 formatter=logging.Formatter(‘file:%(asctime)s – %(filename)s[line:%(lineno)d] – %(levelname)s: %(message)s’) file_log.setFormatter(formatter) logger.addHandler(file_log) logger.info(''——-新梦想IT职业教育———–'') logger.error(''———测试失败,元素识别失败————-'') logger.debug(''—–调试信息[debug]—–'') logger.info(''—–有用的信息[info]—–'') logger.warning(''—–警告信息[warning]—–'') logger.error(''—–错误信息[error]—–'') logger.critical(''—–严重错误信息[critical]—–'')
三、日志级别的讲解及设置

DEBUG:调试信息
INFO:有用的信息
WARNING:警告信息 (默认日志级别)
ERROR:错误信息
CRITICAL:严重错误信息
NOTSET:非级别,表示不设置,按照父logger级别来过滤日志

方式1:

日志级别关系:

NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL

备注:如果把log的级别设置为INFO, 那么小于INFO级别的日志都不输出, 大于等于INFO级别的日志都输出。也就是说,日志级别越高,打印的日志越不详细。

方式2:

log日志级别 NOTSET=0,DEBUG=10 INFORO=20 WARNING=30 ERROR=40 CRITICAL=50

找到setLevel,设置为具体的数字

logger.setLevel(level=40)

最后:下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 21:01:15

自动化测试 | 多个自动化测试用例?多个自动化测试数据怎么管理?资深测试总结

前言 自动化测试因其节约成本、提高效率、减少手动干预等优势已经日渐成为测试人员的“潮流”。 自动化测试的流行和诸多优势并不意味着它是灵丹妙药&#xff0c;定制型项目、周期短、测试易用性等情况并不适合自动化测试。 一些公司没有如设想的一般从自动化实施中受益&…

作者头像 李华
网站建设 2026/4/16 22:22:55

JMeter 常用的几种断言方法,你会了吗?

在使用Jmeter进行性能测试或者接口自动化测试工作中&#xff0c;经常会用到的一个功能&#xff0c;就是断言。断言是在请求的返回层面增加一层判断机制。因为请求成功了&#xff0c;并不代表结果一定正确&#xff0c;因此需要判断机制提高测试准确性。本文 主要介绍3种常用的断…

作者头像 李华
网站建设 2026/4/18 19:17:51

Moltbot 部署至 Azure Web App 完整指南:从本地到云端的安全高效跃迁

对于开发者而言&#xff0c;将 Moltbot 从本地环境部署至 Azure Web App&#xff0c;实现云端安全落地&#xff0c;是破解本地部署安全隐患、达成生产级应用就绪的关键一步。Azure 全托管服务以简单便捷的特性&#xff0c;精准匹配开发者对安全运行环境的核心需求&#xff0c;让…

作者头像 李华
网站建设 2026/3/27 23:24:40

《Netcode框架灵活与性能协同设计指南》

Netcode框架的设计是既要让拓扑形态摆脱固定模式的束缚&#xff0c;适配从多人实时协作到跨边缘节点交互的多元场景&#xff0c;又要让序列化过程在兼容动态数据结构的同时&#xff0c;抵御网络波动带来的延迟与带宽压力。这种协同并非简单的功能叠加&#xff0c;而是通过底层逻…

作者头像 李华