史上最细,自动化测试-logging日志采集详细实战(一)

2023-11-01


前言

日志概述

1、日志作用
在项目开发或测试过程中,项目运行一旦出现问题,记录日志信息就显得尤为重要。主要通过日志来定位问题,就好比侦探人员要根据现场留下的线索来推断案情。

2、日志级别
代码在运行的过程中会出现不同的情况,如调试信息、警告信息、报错等,那么采集日志时就需要对这些日志区分级别管理,这样才能更精确地定位问题。

日志级别一般分类如下(以严重程度递增排序):

级别 何时使用
DEBUG 调试信息,也是最详细的日志信息
INFO 证明事情按预期工作
WARNING 表明发生了一些意外,或不久的将来会发生问题(如磁盘满了),软件还是正常工作
ERROR 由于更严重的问题,软件已经不能执行一些工作了
CRITICAL 严重错误,表明软件已经不能继续运行了

日志级别排序为:CRITICAL > ERROR > WARNING > INFO > DEBUG

日志采集时设置低级别的日志,能采集到更高级别的日志,但不能采集到更低级别的日志。

例如:设置的日志级别为info级别,就只能采集到info、warning、error、critical级别的日志,不能采集到debug级别的日志。设置的日志级别为debug级别的话则能采集到所有级别的日志。默认设置级别为WARNING。

在自动化测试项目中,通常在一般情况时使用info日志,预计报错则使用error日志。

3、日志格式
将日志格式化是为了提高日志的可阅读性,比如:时间+模块+行数+日志级别+日志具体信息 的日志格式。如果输出的日志信息杂乱无章,就不利于问题的定位。如下所示就是日志格式化输出,非常便于阅读查看。

2023-08-08 10:45:05,119 logging_test.py[line:7] DEBUG this is debug message.
2023-08-08 10:45:05,119 logging_test.py[line:9] INFO this is info message.
2023-08-08 10:45:05,119 logging_test.py[line:11] WARNING this is warning message.
2023-08-08 10:45:05,120 logging_test.py[line:13] ERROR this is error message.
2023-08-08 10:45:05,120 logging_test.py[line:15] CRITICAL this is critical message.

4、日志位置
通常,在一个项目中会有很多的日志采集点,日志采集点的设置必须结合业务来确定。

比如在执行修改登录密码用例前插入“开始执行修改登录密码用例…”的日志信息。再比如在登录代码执行前可以插入“准备登录…”日志信息。

如果在登录完成后,再设置登录的提示日志就会给人造成误解,无法判断到底是登录之前的问题还是登录之后的问题,因此日志采集点的位置很重要。

logging 日志模块

logging为python自带的日志模块,提供了通用的日志系统,包括不同的日志级别。

logging可使用不同的方式记录日志,如使用文件,HTTP GET/POST,SMTP,Socket等方式记录。通常情况下,我们使用文件记录日志信息,文件格式一般为.txt或.log文件。

logging 第一种使用方法

简单配置使用

1、使用方法

logging.basicConfig(**kwargs)

2、basicConfig()部分参数说明
filename 指定日志名称或完整路径,如:E:/app-ui-autotest/log/log.txt

filemode 指定打开文件的模式(如果文件打开模式未指定,则默认为’a’)

常见的文件读写方式:
w 以写的方式打开;
W 清空后写入(文件已存在);
r 以读的方式打开;
a 以追加模式打开(即在文件原有的数据后面添加);
format 指定日志输出格式;

level 将根记录器级别设置为指定级别

3、示例1:
日志打印至控制台

import logging

logging.basicConfig(filename='./log.txt', level=logging.DEBUG,
                  format='%(asctime)s %(filename)s[line:%(lineno)d]
                   %(levelname)s %(message)s')

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
logging.error('This is error message')
logging.critical('This is critical message')

控制台输出结果:

2023-08-08 10:45:05,119 logging_test.py[line:7] DEBUG This is debug message.
2023-08-08 10:45:05,119 logging_test.py[line:9] INFO This is info message.
2023-08-08 10:45:05,119 logging_test.py[line:11] WARNING This is warning message.
2023-08-08 10:45:05,120 logging_test.py[line:13] ERROR This is error message.
2023-08-08 10:45:05,120 logging_test.py[line:15] CRITICAL This is critical message.

4、示例2
日志保存至文件

logging.basicConfig(filename='log.txt', level=logging.INFO, 
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')

logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
logging.error('This is error message')
logging.critical('This is critical message')

输出格式:

2023-08-08 10:45:05,119 logging_test.py[line:9] INFO This is info message.
2023-08-08 10:45:05,119 logging_test.py[line:11] WARNING This is warning message.
2023-08-08 10:45:05,120 logging_test.py[line:13] ERROR This is error message.
2023-08-08 10:45:05,120 logging_test.py[line:15] CRITICAL This is critical message.

注意:
相较于控制台打印日志,文件保存日志的区别在于basicConfig()方法中加入了filename参数(即文件的完整路径)。

保存日志至文件示例中,因为参数level=logging.INFO,所以DEBUG级别的日志未输出

logging 第二种使用方法

日志流处理流程

1、logging四大组件介绍
logging模块包括Logger,Handler,Filter,Formatter四个部分。

Logger 记录器,用于设置日志采集。
Handler 处理器,将日志记录发送至合适的路径。
Filter 过滤器,提供了更好的粒度控制,它可以决定输出哪些日志记录。
Formatter 格式化器,指明了最终输出中日志的格式。

2、Logger 记录器
使用日志流采集日志时,须先创建Logger实例,即创建一个记录器(如果没有显式的进行创建,则默认创建一个root logger,并应用默认的日志级别WARNING,Handler和Formatter)

然后做以下三件事:
为程序提供记录日志的接口;
根据过滤器设置的级别对日志进行过滤;
将过滤后的日志根据级别分发给不同handler;

3、Handler 处理器
Handler处理器作用是,将日志记录发送至合适的路径。如发送至文件或控制台,此时需要使用两个处理器,用于输出控制台的处理器,另一个是用于输出文件的处理器。通过 addHandler() 方法添加处理器 。常用的处理器类型有以下两种:

StreamHandler
将日志信息发送至sys.stdout、sys.stderr或任何类似文件流对象,如在Pycharm IDE上显示的日志信息。

构造函数为:StreamHandler(strm)。参数strm是一个文件对象,默认是sys.stderr。

FileHandler
将日志记录输出发送至磁盘文件。 它继承了StreamHandler的输出功能,不过FileHandler会帮你打开这个文件,用于向一个文件输出日志信息。

构造函数为:FileHandler(filename, mode)。参数filename为文件名(文件完整路径),参数mode为文件打开方式,默认为’a’即在文末追加。

自动化测试使用这两种类型就够了,其他还有RotatingFileHandler、TimedRotatingFileHandler、NullHandler等处理器,有兴趣可以查找资料了解。

4、Filter 过滤器
顾名思义是用于过滤,Handlers 与 Loggers 使用 Filters 可以完成比级别更复杂的过滤。不多做介绍,有兴趣可以查找资料了解。

5、Formatter 格式化器
Formatter用于设置日志的格式与内容,默认的时间格式为%Y-%m-%d %H:%M:%S,更多格式如下:

%(levelno)s		# 打印日志级别的数值
%(levelname)s	#打印日志级别的名称
%(pathname)s	#打印当前执行程序的路径
%(filename)s	#打印当前执行程序的名称
%(funcName)s	#打印日志的当前函数
%(lineno)d		#打印日志的当前行号
%(asctime)s		#打印日志的时间
%(thread)d		#打印线程ID
%(threadName)s	#打印线程名称
%(process)d		#打印进程ID
%(message)s		#打印日志信息

6、使用示例:将日志输出至控制台,同时保存至文件

根据logging的模块化来编写代码,思路参考如下。
目录结构

A1

logging_test.py

import logging

# 第一步,创建日志记录器
# 1,创建一个日志记录器logger
logger = logging.getLogger()
# 2,设置日志记录器的日志级别,这里的日志级别是日志记录器能记录到的最低级别,区别于后面Handler里setLevel的日志级别
logger.setLevel(logging.DEBUG)

# 第二步,创建日志处理器Handler。这里创建一个Handler,用于将日志写入文件
# 3,创建一个Handler,用于写入日志文件,日志文件的路径自行定义
logFile = './log.txt'
fh = logging.FileHandler(logFile, mode='a', encoding='utf-8')
# 4,设置保存至文件的日志等级
fh.setLevel(logging.INFO)

# 第三步,定义Handler的输出格式
# 5,日志输出格式定义如下
format= logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
# 6,设置 写入日志文件的Handler 的日志格式
fh.setFormatter(format)

# 第四步,将Handler添加至日志记录器logger里
logger.addHandler(fh)

# 同样的,创建一个Handler用于控制台输出日志
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
ch.setFormatter(format)
logger.addHandler(ch)

# 输出日志
logger.info("This is info message")
logger.warning("This is warning message")
logger.error("This is error message")
logger.critical("This is critical message")

Pycharm运行logging_test.py模块,log.txt以及Pycharm控制台得到如下结果:

2023-08-08 15:54:04,752 test.py[line:3] INFO This is info message
2023-08-08  15:54:04,752 test.py[line:4] WARNING This is warning message
2023-08-08  15:54:04,752 test.py[line:5] ERROR This is error message
2023-08-08  15:54:04,752 test.py[line:6] CRITICAL This is critical message
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

不惧困难,不畏挑战,在每一次奋斗中磨砺自己,只有坚持不懈的努力,才能让梦想如雄鹰展翅,飞向辽阔的天空。勇敢地追逐,默默耕耘,你终将收获理想的果实,成就璀璨人生。

不管有多遥远,不管有多艰辛,只要心怀梦想,脚踏实地,努力奋斗,就能驶向成功的彼岸。每一次的坚持都是一次进步,每一次的努力都是一份成长,让我们勇敢地追逐,创造属于自己的辉煌人生。

在人生的征途上,只有燃烧自己的激情与勇气,才能谱写出无悔的篇章;不论身处何境,只有坚持奋斗,才能开辟通向成功的道路。相信自己,坚定前行,你将绽放出灿烂的光芒。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

史上最细,自动化测试-logging日志采集详细实战(一) 的相关文章

  • APP端网络测试与弱网模拟

    当前APP网络环境比较复杂 网络制式有2G 3G 4G网络 还有越来越多的公共Wi Fi 不同的网络环境和网络制式的差异 都会对用户使用app造成一定影响 另外 当前app使用场景多变 如进地铁 上公交 进电梯等 使得弱网测试显得尤为重要
  • 测试工程师能否作为一份「终身职业」?30岁+怎么办?

    讨论 测试工程师可否作为一份终生的职业 这是我在论坛看到的一个讨论 你的答案是什么呢 我希望大家能认真思考后给出一个属于自己的答案 无论你是新手入门 还是资深专家 回答这个问题请不要凭一腔热血 也不用过分消极 别总和钱挂钩 平心而论即可 就
  • 基于Loadrunner的性能分析及调优经验分享

    公司某个系统的微信端计划将开放给几百上千的人员登录查询 并且登录账号为同一账号多人使用 后台服务能够支撑起多用户的并发操作以及成百上千人登录微信端对生产数据库或者登录查询的性能效率高成为交付可靠生产环境的必要条件 因此 项目组决定提交测试
  • 软件测试|使用Python轻松裁剪视频

    简介 裁剪视频是在视频编辑和处理中常见的任务之一 Python提供了多种库和工具 可以用来裁剪视频 在本文中 我们将详细讨论如何使用Python来裁剪视频 并提供示例代码 步骤1 环境准备 首先 我们要安装必要的Python库 我们将使用
  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML YAML Ain t Markup Language 是一种可读的数据序列化格式 它常用于配置文件和数据交换 Python 提供了许多库来处理 YAML 文件 在本文中 我们将探讨如何使用 PyYAML 库来读取和写入 YA
  • 软件测试|Python数据可视化神器——pyecharts教程(九)

    使用pyecharts绘制K线图进阶版 简介 K线图 Kandlestick Chart 又称蜡烛图 是一种用于可视化金融市场价格走势和交易数据的图表类型 它是股票 外汇 期货等金融市场中最常用的技术分析工具之一 可以提供关于价格变动 趋势
  • 软件测试|使用matplotlib绘制多种柱状图

    简介 在数据可视化领域 Matplotlib是一款强大的Python库 它可以用于创建多种类型的图表 包括柱状图 本文将介绍如何使用Matplotlib创建多种不同类型的柱状图 并提供示例代码 创建基本柱状图 首先 让我们创建一个基本的柱状
  • 测开和测试平台是否有存在的必要?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 如何写好一个错误报告

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯式性能指标监听

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试中的白盒测试,这些技巧你知道吗?

    对于很多刚开始学习软件测试的小伙伴来说 如果能尽早将黑盒 白盒测试弄明白 掌握两种测试的结论和基本原理 将对自己后期的学习有较好的帮助 今天 我们就来聊聊黑盒 白盒测试的相关话题 1 黑盒测试的方法和小结 最常见黑盒测试方法包括 边界值 等
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • Python常用的自动化小脚本!

    一 list转json string转json 可以使用Python内置的 json 模块将列表 List 和字符串 String 转换成JSON格式 List转JSON假设我们有一个列表 List my list apple banana
  • 2024拒绝行业内卷!八年软件测试20K*16薪行业心得 想入行必看

    目前工作做软件测试工作8年 属于高级测试员那个级别吧 现在看到各行各业的人都在转行学习软件测试 想给大家一些学习建议和忠告 很多粉丝都跟我说今年行情很差 找不到工资 真的找不到工作了吗 我们常在网上看到的 程序员饱和 程序员过剩 其实一般是
  • 15:00面试,15:06就出来了,问的问题有点变态。。。

    从小厂出来 没想到在另一家公司又寄了 到这家公司开始上班 加班是每天必不可少的 看在钱给的比较多的份上 就不太计较了 没想到9月一纸通知 所有人不准加班 加班费不仅没有了 薪资还要降40 这下搞的饭都吃不起了 还在有个朋友内推我去了一家互联
  • Web自动化测试 —— cookie复用

    一 cookie简介 cookie是一些数据 存储于用户电脑的文本文件中 当web服务器想浏览器发送web页面时 在链接关闭后 服务端不会记录用户信息 二 为什么要使用Cookie自动化登录 复用浏览器仍然在每次用例开始都需要人为介入 若用
  • 深入解析 YAML 配置文件:从语法到最佳实践

    一 认识YAML YAML YAML Ain t Markup Language 是一种人类可读的数据序列化语言 它的设计目标是使数据在不同编程语言之间交换和共享变得简单 YAML采用了一种简洁 直观的语法 以易于阅读和编写的方式表示数据结
  • 用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

    自动化关键数据记录 简介 关键数据记录是 Web 自动化测试中的关键部分 它们提供了关于系统行为和执行过程的详细信息 有助于验证用例的正确性 排查问题和确保应用程序的质量 行为日志 行为日志是一种用于记录系统或应用程序的操作和事件的技术 它

随机推荐

  • git clone 使用用户名和密码

    git clone 使用用户名和密码 一般git仓库的用户 都是用户名和密码登录 git clone命令如下 模板 git clone http 邮箱 或用户名 密码 仓库 git clone http username password
  • Java读取和写入Excel表格

    Java读取和写入Excel表格 1 绪论 2 JXL篇之程序范例 2 1 JXL 创建低版本Excel文件 2 2 JXL 读取低版本Excel文件 3 POI篇之程序范例 3 1 POI 创建低版本Excel文件 3 2 POI 读取低
  • 阿里云移动测试

    阿里云移动测试 买服务 上传APP 勾选需要的服务 提交之后 阿里云帮进行测试 这个是自动的还是人工的
  • [SQL]经典的sql语句

    一 基础 1 说明 创建数据库 CREATE DATABASE database name 2 说明 删除数据库 drop database dbname 3 说明 备份sql server 创建 备份数据的 device USE mast
  • getClass().getClassLoader()为null

    想获取resources下的文件 之前用过this getClass getClassLoader getResourceAsStream path 可以获取到 但最近的一个工程中需要在一个静态方法中获取该文件 没有了this 我直接用了C
  • Qt使用OpenGL实现立方体贴图

    效果如下 实现代码3个文件 TestWidget h TestWidget cpp main cpp TestWidget h ifndef TESTWIDGET H define TESTWIDGET H include
  • STM32F103-时钟树

    STM32F1 时钟树 参考 野火 零死角玩转STM32 F103指南者 时钟源 HSI 高速内部时钟 RC振荡器 频率为8MHz HSE 高速外部时钟 可接石英 陶瓷谐振器 或者接外部时钟源 频率范围为4MHz 16MHz LSI 低速内
  • redis 优缺点 使用场景

    1 使用redis有哪些好处 1 速度快 因为数据存在内存中 类似于HashMap HashMap的优势就是查找和操作的时间复杂度都是O 1 2 支持丰富数据类型 支持string list set sorted set hash 3 支持
  • BootStrap----table

    项目场景 需要涉及到BootStrap table表格的 因为最后也没有使用bootstrap 现在只是简单的整理一下搜集到的资料 问题描述 提示 对于参数信息的涉及和查阅 参考 8条消息 bootstrapTable常用参数与方法 王小小
  • ubuntu18.04在vscode中配置c++环境

    1 安装gcc g sudo apt install gcc sudo apt install g 检查是否安装成功 gcc verison g version 2 在vscode商店中安装c 插件 3 在根目录创建 vscode文件夹 然
  • 常见查找算法-JAVA实现

    package org nxt algorithm search the bean of comparable author nanxiaotao public class ComparableBean implements Compara
  • csrf攻击原理及防范

    CSRF 全拼为 Cross Site Request Forgery 跨站请求伪造 CSRF指的是攻击者盗用了你的身份 以你的名义发送恶意的请求 给你造成个人隐私泄露及财产安全 CSRF攻击的原理 用户正常登录A银行网站 A网站返回coo
  • k8s四层负载均衡之Service

    为什么要有Service 在kubernetes中 Pod是有生命周期的 如果Pod重启它的IP很有可能会发生变化 如果我们的服务都是将Pod的IP地址写死 Pod挂掉或者重启 和刚才重启的pod相关联的其他服务将会找不到它所关联的Pod
  • 【python基础知识】10.用Python实现石头剪刀布小游戏-函数实操篇

    文章目录 引言 游戏规则 练习目标 步骤拆解 双方出拳 双方亮拳 判断胜负 判断输赢逻辑优化 具体实现 引入random模块 创建选项列表 验证用户输入 计算机随机选择 判断胜负关系 完整代码 运行示例 总结 结语 引言 石头剪刀布是一款经
  • 集成测试策略

    集成测试的基础策略有很多 通常分为两种 非增量式集成测试策略和增量式集成测试策略 第一种 非增量式集成测试策略 非增量式集成测试策略也叫做大爆炸集成 一次性集成 即在最短的时间内把所有的系统组件一次性集成到被测系统中 并通过最少的用例来验证
  • 【前端】如何像取数组一样地取对象

    目标 例如 a a b c 可以通过a 0 得到 a 那么info success text yes warning text wrong url home 能不能通过类似info 0 的方式对应到 text yes 呢 当然是可以的 实现
  • 金币问题解析

    金币问题 本人小白 望各位大佬批评指正 谢谢 题目 国王将金币作为工资 发放给忠诚的骑士 第一天 骑士收到一枚金币 之后两天 第二天和第三天 每天收到两枚金币 之后三天 第四 五 六天 每天收到三枚金币 之后四天 第七 八 九 十天 每天收
  • 利用油猴Tampermonkey自动登录

    当然也可以用 Chrome User Script Handler 插件 function 获取元素 function getElementByXpath path return document evaluate path documen
  • gdb test

    gdb test b main b 8 b hello cpp 9 b hello cpp add tb 9 r 可以带参数 c n s bt info b info local info args info display l l hel
  • 史上最细,自动化测试-logging日志采集详细实战(一)

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