接口自动化测试框架实战-4-日志方法封装

上一小节我们讲解了文件读写方法的封装方法,本小节我们完成一下框架日志的封装方法。

首先我们讲解一下日志封装和日志记录有哪些用处?

  1. 更加方便的设置日志的格式和输出方式
  2. 全局方法可以各个类/函数中都能统一调用
  3. 分类记录接口用例执行日志,方便嵌入测试报告
  4. 错误日志提示,方便代码调试或者做群消息告警

新建log.py

#log.py
import logging
import os
from datetime import datetimeclass LoggerHandler(logging.Logger):def __init__(self, name, level, format_string=None):super().__init__(name, level=level)self._set_format(format_string)self._add_file_handler(level)self._add_stream_handler(level)def _set_format(self, format_string):"""设置日志格式"""formatter = logging.Formatter(format_string or "%(asctime)s - %(levelname)s - %(message)s")for handler in self.handlers:handler.setFormatter(formatter)def _add_file_handler(self, level):"""添加文件处理器"""# 获取脚本所在目录的根路径root = os.path.dirname(os.path.realpath(os.path.join(os.getcwd(), os.path.dirname(__file__))))# 创建日志目录log_directory = os.path.join(root, "logs")os.makedirs(log_directory, exist_ok=True)# 获取当前时间戳,并格式化为字符串current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")# 构造日志文件名log_file_name = f"{current_time}.log"log_file_path = os.path.join(log_directory, log_file_name)file_handler = logging.FileHandler(log_file_path, mode="w", encoding='utf-8')file_handler.setLevel(level)self.addHandler(file_handler)def _add_stream_handler(self, level):"""添加流处理器"""stream_handler = logging.StreamHandler()stream_handler.setLevel(level)self.addHandler(stream_handler)# 初始化LoggerHandler
logger = LoggerHandler(name="Logger",level=logging.INFO,format_string="%(asctime)s -- %(levelname)s -- %(filename)s -- %(funcName)s -- %(message)s"
)# 示例:记录一条日志
logger.info("This is an info message.")

代码逻辑讲解如下:

  1. 一个类LoggerHandler继承python自带的logging模块
  2. _set_format方法用于设置日志的格式,日志格式是一个字符串
  3. _add_file_handler方法用于将日志输出到log文件中记录,具体逻辑是先创建输出的目录路径,再是设置日志文件的名称,最后添加到文件处理器中即可self.addHandler(file_handler)
  4. _add_stream_handler方法用于将日志输出到终端控制台,添加流处理器即可 self.addHandler(stream_handler)

以上就是框架日志的封装方法,大家也可以自己打印一些日志,练习一下!

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

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

相关文章

PHP SimpleXML

PHP SimpleXML PHP的SimpleXML扩展提供了一个非常方便的方式来处理XML数据。它是PHP内置的,因此不需要安装额外的库。SimpleXML可以将XML数据转换成对象,使得操作XML变得简单直观。本文将详细介绍SimpleXML的使用方法,包括加载XML、访问和修…

LLaMA模型量化方法优化:提高性能与减小模型大小

LLaMA模型量化方法优化:提高性能与减小模型大小 LLaMA模型量化方法优化:提高性能与减小模型大小引言新增量化方法性能评估7B模型13B模型 结果分析结论 LLaMA模型量化方法优化:提高性能与减小模型大小 引言 在大型语言模型(LLM)的应用中,模型大小和推理速度一直是关键的挑战。…

【CPS出版】2024年智能计算与数据分析国际学术会议(ICDA 2024,9月6日-8)

为探讨数据科学和计算智能领域的关键问题,促进相关交流,2024年智能计算与数据分析国际学术会议(ICDA 2024)将于2024年9月6日-8日在中国青岛召开。 本届会议拟邀请数据分析和计算智能领域的顶级专家、学者和产业界优秀人才,围绕当前…

【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !

目录 C语言中指针的大小1. 指针大小的基本概念1.1 32位系统1.2 64位系统 2. 指针大小示例2.1 32位系统输出2.2 64位系统输出 3. 指针大小与数据类型无关示例输出示例 4. 跨平台的指针大小示例输出示例 5. 关键点总结5.1 指针大小与平台关系5.2 跨平台编程注意事项 6. 指针大小示…

求教Postgresql在jdbc处理bit(1)字段的预处理解决方案

1.建表语句: CREATE TABLE public.h_user (id serial4 not null,username varchar(50) NULL,"password" varchar(64) NULL,nickname varchar(60) NULL,email varchar(255) NULL,gender bit(1) NULL,height float4 NULL,CONSTRAINT user_pkey PRIMARY KEY (id) );2.使…

【QAC】Dashboard服务端如何配置

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决Dashboard服务端如何配置的问题。 2、 问题场景 客户想使用Dashboard,Dashboard服务端如何配置。 3、软硬件环境 1、软件版本:HelixQAC23.04 2、机器环境:Windows 64bit 3…

arthas在idea和docker中的应用

基于IDEA工具使用 1&#xff0c;安装arthas插件 安装之后重启&#xff0c;然后再代码区域右键如果可以看到如下菜单选项&#xff0c;则说明安装成功 2&#xff0c;pom文件中配置arthas相关jar包 <!-- https://mvnrepository.com/artifact/com.taobao.arthas/arthas-pack…

解决小程序web-view两个恶心问题

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 1.web-view覆盖层问题 问题由来 web-view 是一个 web 浏览器组件&#xff0c;可以用来承载网页的容器&#xff0c;会自动铺满整个页面。 所以这得多恶心。。。不仅铺满&…

机会性加密技术:网络安全的新趋势

在当今数字化时代&#xff0c;网络安全已成为各行各业不可忽视的重要议题。随着网络攻击手段的不断演进&#xff0c;传统的加密方式已难以满足复杂多变的安全需求。机会性加密技术&#xff08;Opportunistic Encryption&#xff0c;简称OE&#xff09;&#xff0c;作为一种新兴…

基于微信小程序的健康饮食系统/健康饮食管理系统

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的小程序应运而生&#xff0c;各行各业相继进入信息管理时代&…

Neo4j AuraDB 和本地安装的 Neo4j 数据库 的区别

Neo4j AuraDB 和本地安装的 Neo4j 数据库 的区别 Neo4j AuraDB 和本地安装的 Neo4j 数据库主要在以下几个方面有所不同&#xff1a; 托管与管理&#xff1a; AuraDB&#xff1a;完全托管的服务&#xff0c;Neo4j 负责所有的基础设施管理&#xff0c;包括安装、配置、维护和升级…

[Vulnhub] Acid-Reloaded SQLI+图片数据隐写提取+Pkexec权限提升+Overlayfs权限提升

信息收集 IP AddressOpening Ports192.168.101.158TCP:22,33447 $ nmap -p- 192.168.101.158 --min-rate 1000 -sC -sV Not shown: 65534 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Ubuntu 5ubuntu1.3 (Ubuntu Lin…

折线图时间统计

1、查询本月的数据 2、查询最近一个月数据 1、查询本月数据 Date startTime DateUtil.getStartDayOfMonth();Date endTime DateUtil.getEndDayOfMonth();//获取日期//[2024-07-01, 2024-07-02, 2024-07-03, 2024-07-04, 2024-07-05, 2024-07-06, 2024-07-07, 2024-07-08, 20…

前端面试宝典【Javascript篇】【2】

欢迎来到《前端面试宝典》&#xff0c;这里是你通往互联网大厂的专属通道&#xff0c;专为渴望在前端领域大放异彩的你量身定制。通过本专栏的学习&#xff0c;无论是一线大厂还是初创企业的面试&#xff0c;都能自信满满地展现你的实力。 核心特色&#xff1a; 独家实战案例…

人工智能与机器学习原理精解【8】

文章目录 马尔科夫过程论基础理论函数系的定义、例子和分类一、函数系的定义二、函数系的例子三、函数系的分类 勒贝格积分一、定义二、计算三、例子 参考文献 马尔科夫过程论 基础 如果 α 是 ( G 1 , A 1 ) 到 ( G 2 , A 2 ) 的可测映象&#xff0c; β 是 ( G 2 , A 2 ) 到…

jackson序列化(jackson codec)

Jackson 是一个用于 Java 平台的开源 JSON 库&#xff0c;它提供了灵活且高效的方式来处理 JSON 数据的序列化(Java对象 → JSON字符串)和反序列化(JSON 字符串→ Java对象)。 以下是 Jackson 的一些主要特点和功能&#xff1a; 高性能&#xff1a;Jackson 通过使用基于流的处理…

国内环境,怎么做开源才能兼顾生存和情怀?

回答一个朋友提的问题—— 在国内&#xff0c;开源怎么做呢&#xff1f;老夫结合自己多年在开源和商业领域的经历与见闻聊聊。 首先来说&#xff0c;毋庸置疑&#xff0c;开源是对传统的商业模式的一种颠覆&#xff0c;它以一种免费开放的姿态赢得了Hacker群体的心&#xff0c…

mac OS matplotlib missing from font(s) DejaVu Sans

如果能搜索到这篇文章&#xff0c;我猜你遇到了和我一样的问题&#xff1a;matplotlib绘图中文乱码。如下&#xff1a; 出现这个问题的原因是&#xff1a;matplotlib使用的字体列表中默认没有中文字体。 这里说一种解决方案&#xff1a;我们可以在文件中手动指定matplotlib使用…

微信小程序-使用Component方法代替Page方法构造页面

一.使用Component方法的前提条件 在小程序js文件里使用Component方法代替Page方法需要在json文件里面定义usingComponents属性 {"usingComponents": {} }二.注意事项 1.在page页面里使用的钩子函数和事件监听方法都需要写在methods对象里面 methods:{update(){thi…

WHAT - Web Components 和 Vue、React 的模块化组件

目录 Web Components介绍组件库1. Lit2. Vaadin3. Shoelace4. Stencil5. FAST6. Ionic7. UI5 Web Components8. PatternFly Elements使用和选择指南结论 与 Vue 或 React 组件的区别1. 原生 vs 框架依赖2. 样式和 DOM 隔离3. 使用和学习曲线4. 状态管理和生命周期 专题&#xf…