Python自动化测试实战系列之WiFi测试二

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本期介绍用测试中比较重要的log模块

上期介绍了Python的一些基本配置,本期将介绍一下本人认为在编码和测试中很重要的一个点,那就是log。log可以记录我们的所有痕迹,所谓“燕过留痕,风过留声”,log不仅可以记录bug信息,通过log分析还可以知道我们设计的逻辑是否正确。有时候经常会出现一种情况,开发的自己明明是这么想的,执行的时候输出的结果却和我们想象中的不一样,这个时候我们就可以通过log去一步步debug,看看代码是怎么运行的,结果是如何一步步呈现给我们的,从中我们可以找到出现错误的根源,因为有时候并不一定是代码出了问题,可能是我们设计的逻辑出了问题,这时候用IDE的debug方式并不好用。

Python标准库里的logging库是Python 的日志记录工具,这里推荐使用logging模块的主要好处是所有的Python模块都可以参与日志记录,并且有很多功能比较灵活。官方文档参考地址:logging --- Python 的日志记录工具 — Python 3.10.12 文档。可以选择不同版本去查阅。先举个简单例子:

>>>importlogging>>>logging.warning('Watch out!')
WARNING:root:Watchout!

上面例子里就是logging的基础用法,先引入模块,然后根据不同的级别输出log信息。logging记录日志分级别,分别是critical > error > warning > info > debug,一共五个等级,级别越高打印的日志越少,反之亦然,可以参考如下详细说明:

  • debug : 打印全部的日志
  • info : 打印 info, warning, error, critical 级别的日志
  • warning : 打印 warning, error, critical 级别的日志
  • error : 打印 error, critical 级别的日志
  • critical : 打印 critical 级别

比如上面例子里的level是warning级别的日志,当日志等级设置在warning之前时,日志就会打印,默认不设置级别的情况下只打印大于等于warning级别的日志。

logging模块提供两种记录日志的方式,第一种是使用logging提供的模块级别的函数,第二种是使用logging的四大组件。

先看Logging 定义的模块级别函数,通过logging.basicConfig()函数设置日志级别和输出格式,并且需要在开头就设置,在中间设置不起作用。


logging.basicConfig(filename='./log.log',level=logging.DEBUG)

在上面例子中,除了设置level外,还定义了将日志记录到文件,在根目录下会生成一个log.log的文件,里面会记录日志信息。

如果有多个模块,可以在一个模块中import另一个模块用日志来显示另一个模块的信息。简单举例:

a.py模块


importloggingimportblogging.basicConfig(filename='a.log',level=logging.DEBUG)
logging.info('Welcome')
b.run()
logging.info('Done')

b.py模块



importlogginglogging.info('Go')

执行a.py模块会打印相应的日志,在日志文件a.log中会显示信息如下:


INFO:root:WelcomeINFO:root:GoINFO:root:Done

另外可以根据实际需求修改日志显示的格式,比如加入日期时间信息。


importlogginglogging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S')
logging.warning('Warning')

    执行结果:


07/20/202305:51:27Warning

再来说说logging模块的四大组件,日志器Logger,处理器Handler,过滤器Filter,格式器Formatter。

Logger是通过模块级函数logging.getLogger(name)来实例化,创建方法:


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

推荐加上日志记录的模块名,多次使用相同name调用getLogger方法会返回同一个logger对象,即相同的log会记录多次。

Handler处理器类型有很多种,常用的有StreamHandler,FileHandler。可以用StreamHandler输出日志到控制台,用FileHandler写入日志文件,用setFormatter分别设置合适的格式,并将两个处理器加入logger实例中。


file_handler=logging.FileHandler('./log.log, mode='w')console_handler=logging.StreamHandler()
file_handler.setFormatter(logging.Formatter(fmt='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',datefmt='%Y-%m-%d %H:%M:%S'))
console_handler.setFormatter(logging.Formatter(fmt='%(asctime)s - %(levelname)s: %(message)s',datefmt='%Y-%m-%d %H:%M:%S'))
logger.addHandler(file_handler)
logger.addHandler(console_handler)

Filter比较少用,引用一下官方解释,感兴趣可以去阅读文档。

Filters 可被 Handlers 和 Loggers 用来实现比按层级提供更复杂的过滤操作。 基本过滤器类只允许低于日志记录器层级结构中低于特定层级的事件。 例如,一个用 'A.B' 初始化的过滤器将允许 'A.B', 'A.B.C', 'A.B.C.D', 'A.B.D' 等日志记录器所记录的事件。 但 'A.BB', 'B.A.B' 等则不允许。 如果用空字符串初始化,则所有事件都会通过。

https://docs.python.org/zh-cn/3.10/library/logging.html#filter-objects

Formatter可以让我们自己定义日志信息的输出规则,结构和内容,可以结合实际情况来设置,一般日期,模块名之类的都推荐加进来,这样便于查看日志时了解事件发生的时间和地点。

四个组件之间都是相互关联的,可以简单的理解一下,logger是建立一个接口,handler用来干实事儿,filter和formatter来制定一些规则。从上面的例子还可以看出,logger可以包含多个handler,日志级别可以分开设置并继承,比如对于记录到log文件的日志,我们级别可以设置为debug,把全部日志都记录下来,但是对于输出到控制器的日志,只需要输出info级别的就可以了,这样可以大大减少平时不需要的一些日志信息。

到这里logging模块对我们来说已经够用了,还有一些日志配置相关的内容基本上可以不用关注,本期结束!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
11天前
|
敏捷开发 测试技术 持续交付
探索软件测试中的自动化与持续集成
在快速迭代的软件开发环境中,自动化测试和持续集成(CI)已成为确保产品质量和加速交付的关键策略。本文将深入探讨自动化测试的基本原理、实施步骤以及它如何与持续集成流程相结合,以提高软件开发的效率和可靠性。我们将通过实际案例分析,展示自动化测试和CI的最佳实践,以及它们如何帮助企业实现更快的市场响应时间和更高的客户满意度。
51 16
|
12天前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成:提升效率与质量的关键
在快节奏的软件开发环境中,自动化测试和持续集成已经成为不可或缺的部分。本文将探讨自动化测试和持续集成的重要性,以及它们如何协同工作以提高软件开发的效率和质量。通过分析自动化测试的策略、工具选择以及持续集成的实践,我们将揭示这些技术如何帮助开发团队快速响应变化,减少错误,并加速产品上市时间。
|
12天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
38 4
|
12天前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
17天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
18天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
63 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
7天前
|
敏捷开发 Java 测试技术
软件测试中的自动化策略与实践
在快速迭代的软件开发周期中,自动化测试是确保产品质量和提升开发效率的关键。本文将深入探讨自动化测试的重要性,介绍实用的自动化测试框架,并通过一个具体的代码示例,说明如何实现一个简单的自动化测试脚本。
30 12
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
智能化软件测试:AI驱动的自动化测试策略与实践####
本文深入探讨了人工智能(AI)在软件测试领域的创新应用,通过分析AI技术如何优化测试流程、提升测试效率及质量,阐述了智能化软件测试的核心价值。文章首先概述了传统软件测试面临的挑战,随后详细介绍了AI驱动的自动化测试工具与框架,包括自然语言处理(NLP)、机器学习(ML)算法在缺陷预测、测试用例生成及自动化回归测试中的应用实例。最后,文章展望了智能化软件测试的未来发展趋势,强调了持续学习与适应能力对于保持测试策略有效性的重要性。 ####
|
9天前
|
开发者 Python
使用Python实现自动化邮件通知:当长时程序运行结束时
本文介绍了如何使用Python实现自动化邮件通知功能,当长时间运行的程序完成后自动发送邮件通知。主要内容包括:项目背景、设置SMTP服务、编写邮件发送函数、连接SMTP服务器、发送邮件及异常处理等步骤。通过这些步骤,可以有效提高工作效率,避免长时间等待程序结果。
47 9
|
8天前
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。
下一篇
无影云桌面