全网最牛,Python自动化测试-日志Log处理(超细)一篇打通...

news2024/11/24 12:04:10

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

日志就是用于记录系统运行时的信息,对一个事件的记录;也称为Log。

日志作用

调试程序;
了解系统程序运行的情况,是否正常;
系统程序运行故障分析与问题定位;
用来做用户行为分析和数据统计;

日志级别

日志级别是指日志信息的优先级、重要性或者严重程度。
常见的日志级别:
DEBUG → 调试级别,打印非常详细的日志信息,通常用于对代码的调试
INFO → 信息级别,打印一般的日志信息,突出强调程序的运行过程
WARNING → 警告级别,打印警告日志信息,表明会出现潜在错误的情形,一般不影响软件的正常使用

ERROR → 错误级别,打印错误异常信息,该级别的错误可能会导致系统的一些功能无法正常使用
CRITICAL → 严重错误级别,一个严重的错误,这表明系统可能无法继续运行、

DEBUG < INFO < WARNING < ERROR< CRITICAL

当为程序指定一个日志级别后,程序会记录所有日志级别大于或等于指定日志级别的日志信息,而不是仅仅记录指定级别的日志信息。

日志的基本用法

可以使用logging模块:
Python中有一个标准库模块logging可以直接记录日志。

import logging

logging.debug("这是一条调试信息")
logging.info("这是一条普通信息")
logging.warning("这是一条警告信息")
logging.error("这是一条错误信息")
logging.critical("这是一条严重错误信息")

设置日志级别:
logging中默认的日志级别为WARNING,程序中大于等于该级别的日志才能输出,小于该级别的日志不会被打印出来。

logging.basicConfig(level=logging.DEBUG)

如何选择日志级别:
1)开发环境和测试环境
为了尽可能详细的查看程序的运行状态来保证上线后的稳定性,可以使用DEBUG或INFO级别的日志获取详细的日志信息。

2)生产环境
通常只记录程序的异常信息、错误信息等,可以设置成WARNING或ERROR级别。

设置日志格式:

logging.basicConfig(format="%(levelname)s:%(name)s:%(message)s")

format参数中可能用到的格式化信息:

%(name)s  →  Logger的名字
%(levelno)s  →  数字形式的日志级别
%(levelname)s  →  文本形式的日志级别
%(pathname)s  →  调用日志输出函数的模块的完整路径名,可能没有
%(filename)s  →  调用日志输出函数的模块的文件名
%(module)s  →  调用日志输出函数的模块名
%(funcName)s  →  调用日志输出函数的函数名
%(lineno)d  →  调用日志输出函数的语句所在的代码行
%(created)f  →  当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d  →  输出日志信息时的,自Logger创建以来的毫秒数
%(asctime)s  →  字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896%(thread)d  →  线程ID。可能没有
%(threadName)s  →  线程名。可能没有
%(process)d  →  进程ID。可能没有
%(message)s  →  用户输出的消息

示例代码:

import logging

fmt = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - % (message)s'
logging.basicConfig(level=logging.INFO, format=fmt)

logging.debug("这是一条调试信息")
logging.info("这是一条普通信息")
logging.warning("这是一条警告信息")
logging.error("这是一条错误信息")

将日志信息输出到文件中:

logging.basicConfig(filename="a.log")

日志的高级用法:
ogging日志模块四大组件
日志器 → Logger → 提供了程序使用日志的入口;
处理器 → Handler → 将logger创建的日志记录发送到合适的目的输出;
格式器 → Formatter → 决定日志记录的最终输出格式;
过滤器 → Filter → 提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录;

Logger类
Logger对象的任务:
向程序暴露记录日志的方法;
基于日志级别或Filter对象来决定要对哪些日志进行后续处理;
将日志消息传送给所有感兴趣的日志handlers;

logger = logging.getLogger() 
logger = logging.getLogger("myLogger")

logging.getLogger()方法有一个可选参数name,该参数表示将要返回的日志器的名称标识,如果不提供该参数,则返回root日志器对象。 若以相同的name参数值多次调用getLogger()方法,将会返回指向同一个logger对象的引用。

Logger常用的方法:

方法描述
logger.debug()打印调试级别的日志消息
logger.info()打印信息级别的日志消息
logger.warning()打印警告级别的日志消息
logger.error()打印错误级别的日志消息
logger.critical()打印严重错误级别的日志消息
logger.setLevel()设置日志器将会处理的日志消息的最低严重级别
logger.addHandler()为该logger对象添加一个handler对象
logger.addFilter()为该logger对象添加一个filter对象

Handler类:
Handler对象的作用是将消息分发到handler指定的位置,比如:控制台、文件、网络、邮件等。
使用Handler实现类来创建对象,logging中内置的常用的Handler包括:

Handler描述
logging.StreamHandler将日志消息发送到输出到Stream,如std.out,std.err或任何file-like对象。
logging.FileHandler将日志消息发送到磁盘文件,默认情况下文件大小会无限增长
logging.handlers.RotatingFileHandler将日志消息发送到磁盘文件,并支持日志文件按大小切割
logging.handlers.TimedRotatingFileHandler将日志消息发送到磁盘文件,并支持日志文件按时间切割
logging.handlers.HTTPHandler将日志消息以GET或POST的方式发送给一个HTTP服务器
logging.handlers.SMTPHandler将日志消息发送给一个指定的email地址

Handler常用的方法:

方法描述
handler.setLevel()设置handler将会处理的日志消息的最低严重级别
handler.setFormatter()为handler设置一个格式器对象
handler.addFilter()为handler添加一个过滤器对象

Formatter类:

formatter = logging.Formatter(fmt=None, datefmt=None, style='%')     
    # fmt:指定消息格式化字符串,如果不指定该参数则默认使用message的原始值 
    # datefmt:指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S" 
    # style:Python 3.2新增的参数,可取值为 '%', '{'和 '$',如果不指定该参数则默认使用'%'

日志的高级用法示例:
将日志信息同时输出到控制台和文件中

import logging

# 定义日志格式
fmt =  '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - % (message)s'
formatter = logging.Formatter(fmt)

# 把日志输出到控制台中
logger = logging.getLogger()
sh = logging.StreamHandler()
sh.setFormatter(formatter)
logger.addHandler(sh)

# 把日志输出到文件中
fh = logging.FileHandler("./b.log")
fh.setFormatter(formatter)
logger.addHandler(fh)

每日生成一个日志文件:
将日志信息记录到文件中,以特定的时间间隔切换日志文件。

fh = logging.handlers.TimedRotatingFileHandler(filename, when='h', interval=1, backupCo unt=0)

说明:
filename:日志文件名
when:时间单位,可选参数
S - Seconds
M - Minutes
H - Hours
D - Days
midnight - roll over at midnight
W{0-6} - roll over on a certain day; 0 - Monday
interval:时间间隔
backupCount:日志文件备份数量。如果backupCount大于0,那么当生成新的日志文件时,将只保留backupCount个文件,删除最老的文件。

示例代码:

import logging.handlers

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 定义日志格式
fmt = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - % (message)s'
formatter = logging.Formatter(fmt)

# 输出到文件,每日一个文件
fh = logging.handlers.TimedRotatingFileHandler("./a.log", when='MIDNIGHT', interval=1, backupCount=3)
fh.setFormatter(formatter)
fh.setLevel(logging.INFO)
logger.addHandler(fh)
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

坚持努力,每一次的付出都是为了追逐梦想的路上更近一步。无论遭遇怎样的困难和挫折,只要心中燃烧着希望之火,就能创造属于自己的辉煌。相信自己,勇往直前,收获将会超乎想象。

只有拼尽全力,才能创造出不可思议的成就;只有坚定信念,才能战胜困难和挑战。相信自己的实力,勇往直前,不停奋斗,你将创造属于自己的辉煌!

只有拼尽全力,方能超越自己的极限;只有坚持不懈,才能达到心中的目标;奋斗的道路上有汗水,有泪水,更有成功的喜悦等待着你,勇往直前,创造辉煌!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/745676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何安装本地Go Tour教程(或者叫A Tour of Go离线版),以及中文版安装不了该怎么办

Go 官方是有一个在线教程 A Tour of Go&#xff0c;可以在线学习 Go 的编程&#xff0c;并且有中文版。英文原版页面如下&#xff1a; 出人意料的是&#xff0c;Go 提供了离线版&#xff08;各个语言都有&#xff09;&#xff0c;下载安装之后就可以在本地编译运行查看结果&a…

python subprocess.run() subprocess.Popen()(执行系统命令、启动新的进程、连接到子进程的输入/输出管道)

文章目录 python subprocess基本函数subprocess.runsubprocess.Popensubprocess.Popen参数解释- args&#xff1a;要执行的命令及其参数。可以是一个字符串或一个字符串列表。- bufsize&#xff1a;指定缓冲区的大小。默认值为-1&#xff0c;表示使用系统默认的缓冲区大小。- e…

Redis基本全局命令(含key过期策略)

Redis基本全局命令 KEYEXISTSDELEXPIRETTLRedis的key过期策略TYPE KEY 返回所有满⾜样式&#xff08;pattern&#xff09;的key。⽀持如下统配样式。 h?llo 匹配 hello , hallo 和 hxlloh*llo 匹配 hllo 和 heeeelloh[ae]llo 匹配 hello 和 hallo 但不匹配 hilloh[^e]llo 匹配…

opencv-图像处理基础-二值图像

opencv学习01_图像处理基础_二值图像 1&#xff0e;二值图像 二值图像是指仅仅包含黑色和白色两种颜色的图像。 在计算机中&#xff0c;通过一个栅格状排列的数据集&#xff08;矩阵&#xff09;来表示和处理图像。例如&#xff0c;图 2-1 是 一个字母 A 的图像&#xff0c;计算…

【优选算法题练习】day4

文章目录 一、3. 无重复字符的最长子串1.题目简介2.解题思路3.代码4.运行结果 二、1004. 最大连续1的个数 III1.题目简介2.解题思路3.代码4.运行结果 三、1658. 将 x 减到 0 的最小操作数1.题目简介2.解题思路3.代码4.运行结果 总结 一、3. 无重复字符的最长子串 1.题目简介 …

Java设计模式之结构型-代理模式(UML类图+案例分析)

目录 一、基础概念 二、UML类图 1、静态代理类图 2、动态代理类图 三、角色设计 四、案例分析 1、静态代理 2、JDK动态代理 3、Cglib动态代理 五、总结 一、基础概念 代理模式是一种结构型设计模式&#xff0c;它用一个代理对象来封装一个目标对象&#xff0c;通常…

Java的运算符

运算符介绍 运算符是一种特殊的符号&#xff0c;用以表示数据的运算、赋值和比较等。 运算符介绍 算术运算符赋值运算符关系运算符 [比较运算符]逻辑运算符位运算符 [需要二进制基础]三元运算符 算术运算符 介绍 算术运算符是对数值类型的变量进行运算的&#xff0c;在 Ja…

学习记录——Transformer、ViT、Swin-Transformer、SegFormer、TopFormer、Seaformer

Transformer 2017 Computation and Language Google Self-Attention、Multi-Head Attention 位置编码 原理参考链接 ransformer网络结构&#xff1a; ViT 2020 ICLR 将transformer引入到cv领域 将输入图片224x224x3按照16x16x3大小的Patch进行划分&#xff0c;接着通过…

JAVA+Selenium最简单的处理登录弹窗的方式

在做自动化测试遇到需要处理登录弹窗情况&#xff0c;例如我的用户名为admin, 密码为admin, 那么想要登录http://10.10.168.1, 只需要使用以下链接访问即可立即登录, 并免除弹窗: http://账号:密码网址

sys V 进程间通信之共享内存

note 1.使用shmget将在内核创建一个共享内存区 2.使用shmctl才可以删除内核创建的共享内存区 3.使用shmat给当前进程开辟与内核共享内存对应的内存区p&#xff0c;用户态对p的操作会作用到内核共享内存区 code #include <stdio.h> #include <stdlib.h> #inclu…

ROS:Rviz中控制机器人模型运动

目录 一、Arbotix简介二、安装 Arbotix二、Arbotix使用案例2.1需求2.2流程2.2.1创建新功能包&#xff0c;准备机器人 urdf、xacro 文件2.2.2添加 Arbotix 配置文件2.2.3编写 launch 文件配置 Arbotix2.2.4启动 launch 文件并控制机器人模型运动 一、Arbotix简介 Arbotix 是一款…

Python 标签(便签贴)打印,直接连接打印机打印

前言&#xff1a;一开始试了好多打印方式&#xff0c;图片打印很糊&#xff0c;docx文件打印效果最好&#xff0c;但是每次打印会打开Word 影响效率&#xff0c;PDF也会打开PDF软件&#xff0c;打印效果略差于docx文件&#xff0c;TXT文件又不能设置字体&#xff0c;找了好久&a…

8 Surprising Things You Can Do With ChatGPT 你可以用 ChatGPT 做的 8 件令人惊讶的事情

If you’ve heard about ChatGPT and think it’s just a fancy chatbot, you might be underestimating the range of what it can do. Here are some surprising things you can do with ChatGPT, whether you want to write a resume or have it dungeon-master an epic rol…

第二章(二):Django框架Model之ORM操作数据库:增、删、改、查

系列文章目录 备注&#xff1a;这里是Django系列文章的所有文章的目录 第一章(一) : Django框架之创建项目/应用/templates、连接MYSQL、配置日志LOGGING、启动django项目 第一章(二)&#xff1a;Django框架的模式、路由、视图&#xff1b; 第一章(三)&#xff1a;Django框架的…

Linux14.文件(下)

文件描述符fd&#xff0c;分配到的是从0开始最小的没有被占用的。 2.输出重定向(重定向的本质&#xff0c;就是在操作系统内部更改fd对应的内容的指向)&#xff0c;同时理解输入重定向和追加重定向。 3.重定向函数dup2(oldfd, newfd)&#xff0c;oldfd -> newfd (小技巧:一…

jennkins配置k8s动态slave

一、 首先完成jenkins的部署可参考jenkins部署 二、 如果是在同一个k8s集群下部署的则直接这样配置 在security中agent的端口也配置成50000 如果是虚拟机中部署的jenkins添加k8s需要做如下操作 echo ‘certificate-authority-data-value’ | base64 -d > ./ca.crt &#…

数字化转型中,企业如何做系统设计

随着人工智能、大数据、云计算、区块链等新一代信息化、数字化技术的高速发展&#xff0c;现阶段社会的方方面面都已经有了巨大的改变&#xff0c;各行各业的企业也都开始了新一轮的科技革命和产业革命&#xff0c;可以说是互联网时代之后&#xff0c;又一个能够从各方面影响世…

MySQL物理文件----日志文件(错误日志、通用查询日志、二进制日志、慢查询日志)

文章目录 MYSQL5.7/8.0支持的几种日志文件1、错误日志&#xff08;Error log&#xff09;2、一般或通用查询日志&#xff08;General query log&#xff09;3、二进制日志&#xff08;Binary log&#xff09;3、1 查看是否开启二进制日志3、2二进制日志开启3、3查看二进制文件位…

数据结构05:树与二叉树[C++][并查集]

图源&#xff1a;文心一言 Chat GPT生成&#xff0c;代码的核心思想与王道咸鱼老师的视频虽然类似&#xff0c;但是在具体实现上毕竟还是略有差别~~因此&#xff0c;如果对考研方向的并查集代码感兴趣&#xff0c;可以查看—— 王道咸鱼老师的视频&#xff1a;{5.5_2_并查集_…

会议邀请|思腾合力邀您共赴MICS 2023第十届医学图像计算青年研讨会

医学图像计算青年研讨会 (Medical Imaging Computing Seminar, MICS) 于2014年成立&#xff0c;宗旨是为医学影像分析领域的全球华人学者提供学术交流平台&#xff0c;增进本领域科研人员和医学专家的交流和合作。 第十届医学图像计算青年研讨会 (MICS 2023) 将于2023年7月14-1…