前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ChatGPT教你python日志记录

ChatGPT教你python日志记录

原创
作者头像
用户10443079
发布2023-04-25 14:55:13
5790
发布2023-04-25 14:55:13
举报
文章被收录于专栏:测试技术干活测试技术干活

请访问智造喵免费GPT地址:https://chat.plexpt.com/i/511440

Python自动化测试之自定义日志及其封装

日志的左右主要有以下4点 1 调试程序 2 了解系统程序运行的情况是否正常 3 系统程序运行故障分析和问题定位 4 用来做用户行为分析和数据统计

日志相关概念 1 日志收集器 2 日志级别 debug info warning error critical 3 输出渠道(Handel) 控制台输出: StreamHandle 将日志信息保存在文件中:FileHandle 4 日志格式 日志时间-日志名称-日志级别名称-文件名称-日志信息 # 设置日志输出格式 fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s" formatter = logging.Formatter(fmt) 在python-logging模块中,默认的是root日志收集器,默认的输出级别为:WARNING

自定义日志的操作流程 1 导入logging模块:import logging 2 创建日志收集器:logger = logging.getLogger(“日志收集器的name”) 3 设置日志收集器的日志级别:logger.setLevel(logging.INFO) #设置收集器的级别为INFO 4 给日志收集器创建输出渠道(根据第一部分的内容知:日志输出渠道包含控制台输出和文件输出):下面以控制台输出为例进行介绍,文件输出与之类似 4.1 创建日志的输出渠道:handle1 = logging.StreamHandle() 4.2 可以单独设置日志输出渠道的级别:handle1.setLevel(logging.ERROR) 此步骤可选 【特殊说明】 4.3 在未设置日志输出渠道的日志级别时,默认使用日志收集器设置的Level 4.4 若需单独设置日志输出渠道的日志级别,则它的日志级别需高于日志收集器级别,否则设置无效。 设置日志输出的内容格式 5 设置日志输出的内容格式 # 设置日志的输出格式 fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s" formatter = logging.Formatter(fmt) 6 将设置的日志格式绑定到创建的输出渠道中,即将日志格式与输出渠道关联起来 handler1.setFormatter(formatter) 7 将设置好的输出渠道,添加到日志收集器 logger.addHandler(handle1) 补充将日志信息输出到文件的操作流程与之类似,只是在step4上有一点区别而已 handel2 = logging.FileHandler(filename="xxx.log",encoding="utf-8") 日志代码参考如下: import logging

# 1、创建日志收集器 logger = logging.getLogger(name="login_test")

# 2、设置日志收集器的级别:警告级别 logger.setLevel(logging.WARN)

# 3、设置日志的输出渠道 # 3.1 控制台日志输出 handler1 = logging.StreamHandler() # 3.2 文件日志输出 handler2 = logging.FileHandler(filename="my_log.log",encoding="utf-8") # 单独设置输出渠道的日志级别 handler1.setLevel(logging.ERROR) ? ?# 可选

# 4、设置日志的输出格式 fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s" formatter = logging.Formatter(fmt)

# 5、关联3和4 handler1.setFormatter(formatter) handler2.setFormatter(formatter)

# 6、关联1和5 logger.addHandler(handler1) logger.addHandler(handler2)

# 测试 logger.warning("登录失败警告") logger.error("登录debug出错")

********************************************************************************************** 自定义日志的封装 由于自定义日志的操作流程相对比较固定,因此我们可以将自定义的日志封装成一个类,当我们需要使用时,只需引入该模块即可 1 通过查看源码知,封装的类需要继承logging.Logger类,这样就可以继承父类的debug()、info()等函数; 2 从第二部分的操作流程知,不同的用户在引入该模块时,可能会设置不同日志名称、日志级别以及日志文件信息,因此这些参数可以让用户在实例化日志对象对象时进行初始化设置; 3 当我们需要使用自定义的日志类时,引入这一模块即可。 import logging

# 对日志的操作进行封装 class MyLogger(logging.Logger):

? ? def __init__(self,name,level,file=None): ? ? ? ? super().__init__(name,level) ? ? ? ? # 设置日志的输出渠道 ? ? ? ? handler1 = logging.StreamHandler() ? ? ? ? # 设置日志的输出格式 ? ? ? ? fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s" ? ? ? ? formatter = logging.Formatter(fmt) ? ? ? ? handler1.setFormatter(formatter) ? ? ? ? # 添加日志的输出渠道 ? ? ? ? self.addHandler(handler1)

? ? ? ? if file: ? ? ? ? ? ? handler2 = logging.FileHandler(filename=file,encoding="utf-8") ? ? ? ? ? ? handler2.setFormatter(formatter) ? ? ? ? ? ? self.addHandler(handler2) ? ? ? ? ? ? pass ? ? ? ? pass ? ? pass ***********************************************************************************

Python自动化测试之excel数据驱动 使用python对excel进行操作之前,需要了解excel的组成 工作薄workbook 工作表sheet 单元格cell 所以对excel的操作,实际上就是对excel中workbook、sheet、cell的操作

操作流程 1 使用excel提前将测试用例准备好 2 导入操作excel需要使用的模板 openpyxl 3 工作薄的加载 wb = load_workbook("excel的存放路径") 4 获取存放测试用例的表单 sh=wb["表单名称"] 5 获取表单中所有的数据,并使用列表保存-按行获取

rows = list(sh.rows) 说明:使用sh.rows获取的每一行是一个元组,元组中的成员是cell

6 遍历行:获取每一行中所有数据,此时我们需要区分一下表头数据和非表头数据 * 使用字典存放每一行的测试用例 * 遍历的表头行数据,可以用作dict中的key * 遍历的非表头行数据,可以用作dict中的value * 对于非表头行,每一行就是一个测试用例数据 * 将存放每一行测试用例的dict,添加到存放所有测试用例的列表中

***************************************************** # 读取excel中的测试用例,并使用列表进行保存,使用zip将表头信息与行中的信息已字典的形式关联 # 使用zip import os from openpyxl import load_workbook

file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"login_case.xlsx")

datas_case = [] ? ? ?#用于保存测试用例

wb = load_workbook(file_path) ? ?# 获取工作簿workBook sh = wb["login"] ? ?# 获取工作表 rows = list(sh.rows) ? # 获取工作表中所有行,行中的元素以元组的形式进行存放

titles = [] ? # 用户存放表头信息 for key in rows[0]: ? # 遍历表头 ? ? titles.append(key.value) ? ? pass

# 遍历非表头行 for row in rows[1:]: ? ? values = [] ? # 用于存放行中元素 ? ? for cel in row: ?# 遍历行中的单元格 ? ? ? ? values.append(cel.value) ? ? ? ? pass ? ? res = dict(zip(titles,values)) ? # 将行中的元素与表头信息组合,形成测试用例 ? ? res["expected"] = eval(res["expected"]) ?# 将字符串转换成字典 ? ? datas_case.append(res) ? ?# 将测试用例存放在列表中 ? ? pass ? ? print(datas_case)

#使用原生方式 import os from openpyxl import load_workbook

file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"login_case.xlsx")

datas_case = [] ? ? ?#用于保存测试用例

wb = load_workbook(file_path) ? ?# 获取工作簿workBook sh = wb["login"] ? ?# 获取工作表 rows = list(sh.rows) ? # 获取工作表中所有行,行中的元素以元组的形式进行存放

titles = [] ? # 用户存放表头信息 for key in rows[0]: ? # 遍历表头 ? ? titles.append(key.value) ? ? pass

# 遍历非表头行 for row in rows[1:]: ? ? row_dict = {} ? # 将行中的信息用字典保存 ? ? for item in range(len(row)): ? ? ? ? row_dict[titles[item]] = row[item].value ? ? ? ? pass ? ? row_dict["expected"] = eval(row_dict["expected"]) ?# 将字符串转换成字典 ? ? datas_case.append(row_dict) ? ?# 将测试用例存放在列表中 ? ? pass

print(datas_case)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网络流日志
网络流日志(Flow Logs,FL)为您提供全时、全流、非侵入的流量采集服务,您可对网络流量进行实时的存储、分析,助力您解决故障排查、架构优化、安全检测以及合规审计等问题,让您的云上网络更加稳定、安全和智能。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com