第8章 日志电子课件_第1页
第8章 日志电子课件_第2页
第8章 日志电子课件_第3页
第8章 日志电子课件_第4页
第8章 日志电子课件_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章日志《自动化测试应用教程(Web+App)》学习目标/Target了解日志的简介,能够阐述日志的概念和作用熟悉logging模块中的日志级别,能够归纳日志级别的特点掌握logging模块中日志级别函数的使用,能够输出不同级别的日志掌握logging模块中配置日志函数的使用,能够设置日志的格式和级别掌握logging模块中日志的4大组件,能够完成对日志的处理章节概述/Summary在测试一个Web项目的过程中,如果测试程序突然崩溃,此时测试人员就需要去查看程序输出的日志信息,根据日志信息定位程序出错的位置,并分析出错的原因。此外,如果测试程序正在进行持续集成,且是无人值守的情况下,就需要通过记录日志信息明确测试执行的过程和结果。为了让读者能够掌握和使用日志信息,本章将对日志简介、logging模块中的日志、实战演练——每分钟生成一个日志文件进行讲解。目录/Contents01日志简介02logging模块中的日志03实战演练——每分钟生成一个日志文件日志简介8.18.1.1日志的概念

先定一个小目标!了解日志的概念,能够阐述日志的概念8.1.1日志的概念在计算机中,所有软件或系统运行过程中的信息都需要被记录,这些被记录的信息被称为日志(Log)。日志是对一个事件的记录。日志中包含软件或系统运行过程中的日期、时间、警告、异常、错误等信息,开发人员或测试人员通过查看日志信息可以很清晰地知道程序或系统在每个时间段发生的事件。8.1.2日志的作用

先定一个小目标!了解日志的作用,能够说出日志的4个作用8.1.2日志的作用开发人员或测试人员通过记录和分析日志可以了解软件或系统的运行情况是否正常,也可以根据日志信息快速定位程序出现的问题。8.1.2日志的作用在自动化测试程序中,测试人员可以调用记录日志的相关函数或方法来追踪测试过程中发生的事件信息,例如,检验测试用例是否通过、测试时的网络是否通畅等。8.1.2日志的作用在软件项目的研发或测试阶段,日志的作用可以简单总结为以下几点。调试程序程序或系统运行的故障分析与问题定位了解程序或系统运行的情况用户行为分析和数据统计8.1.2日志的作用通过分析日志,测试人员或开发人员能够及时发现问题并快速定位问题,有助于解决问题并降低损失。如果程序的日志信息足够丰富,还可以通过分析用户的操作行为提高商业利益。logging模块中的日志8.28.2.1日志级别

先定一个小目标!熟悉logging模块中的日志级别,能够归纳日志级别的特点8.2.1日志级别日志级别是指日志信息的优先级、重要性或者严重程度。在软件测试阶段,为了能详细查看程序运行的状态,测试人员需要将测试程序运行过程中的所有日志信息全部记录下来。但记录所有日志的操作会影响程序的性能,当记录的日志信息较多时,不利于排查程序的问题。8.2.1日志级别为了避免记录所有的日志影响程序的性能并且增加排查程序问题的难度,可以通过日志级别对日志信息进行分类,只记录对程序比较重要的日志,例如程序运行过程中的异常信息、错误信息等。8.2.1日志级别日志级别说明DEBUG调试级别,记录非常详细的日志信息,通常记录代码的调试信息INFO信息级别,记录一般的日志信息,主要用于记录程序运行过程中的信息WARNING警告级别,记录警告日志信息,该级别的信息表示会出现潜在错误的情形,一般不影响软件的正常使用ERROR错误级别,记录错误日志信息,该级别的错误可能会导致程序的某些功能无法正常使用CRITICAL严重错误级别,记录程序运行时的严重错误信息,该级别的错误可能会导致整个程序都不能正常运行logging模块中默认定义了5种日志级别,如下表所示。8.2.1日志级别日志级别的优先级由低到高依次为:DEBUG<INFO<WARNING<ERROR<CRITICAL。当在程序中记录某个级别的日志信息时,程序会记录大于或等于指定级别的日志信息,而不是只记录指定级别的日志信息。logging模块中默认的日志级别为WARNING,程序中优先级高于该级别或者是该级别的日志才能输出,低于该级别的日志不会被输出。8.2.2日志级别函数

先定一个小目标!掌握logging模块中日志级别函数的使用,能够输出不同级别的日志8.2.2日志级别函数如果想要在测试程序中输出不同级别的日志信息,可以使用logging模块中提供的日志级别函数。logging模块中提供的日志级别函数是对日志系统中相关类的封装。8.2.2日志级别函数函数说明debug(msg,*args,**kwargs)输出日志级别为DEBUG的日志信息info(msg,*args,**kwargs)输出日志级别为INFO的日志信息warning(msg,*args,**kwargs)输出日志级别为WARNING的日志信息error(msg,*args,**kwargs)输出日志级别为ERROR的日志信息critical(msg,*args,**kwargs)输出日志级别为CRITICAL的日志信息log(level,*args,**kwargs)输出日志级别为level的日志信息,参数level的值为日志级别对应的常量,例如,logging.ERROR(错误级别)、logging.WARNING(警告级别)等logging模块中常用的日志级别函数如下表所示。8.2.2日志级别函数如果要输出的日志中包含变量,可以使用格式字符串描述该日志信息。假设要输出一个警告级别的日志信息,该信息中包含了字符串类型的变量和数值类型的变量,可通过调用warning()方法实现,示例代码如下。logging.warning("我叫%s,我今年%d岁了","Lucy",12)上述示例代码中%s与%d是格式化字符串中的占位符,%s表示输出的内容为字符串,%d表示输出的内容为整数,占位符%s的值是warning()方法中的第2个参数“Lucy”,占位符%d的值是warning()方法中传递的第3个参数12。8.2.2日志级别函数接下来通过一个案例来演示如何使用日志级别函数输出日志,具体代码如下。importlogging#调用logging模块中的日志级别函数输出日志logging.debug("这是一条调试级别的日志")("这是一条信息级别的日志")logging.warning("这是一条警告级别的日志")logging.error("这是一条错误级别的日志")logging.critical("这是一条严重错误级别的日志")logging.log(level=logging.WARNING,msg="这是一条通过log()函数输出的警告级别日志")logging.error("这是一条%s级别的日志,输出了%d次","错误",1)多学一招格式化字符串是指在字符串中用格式化占位符来代替字符串中变化的部分,然后将这些变化部分的具体数据与字符串整合。Python中常见的格式化占位符(为某个数据占据位置)如下表所示。格式化字符串格式化占位符说明%d整数占位符%s字符串占位符%f浮点数占位符,%.Nf表示保留小数点后N位小数。例如,%.2f表示保留小数点后2位小数%c字符占位符多学一招接下来通过一个格式化字符串演示如何使用Python中常见的格式化占位符,具体示例代码如下。格式化字符串msg="我叫%s,我今年%d岁了,我考试成绩为%.2f,我的作文级别为%c"%("小明",12,90.5,'A')上述示例代码中,变量msg的值是一个格式化字符串,该字符串中的%s、%d、%.2f、%c均是字符串中的格式化占位符,最后一个%后面的部分(即"小明",12,90.5,'A')是字符串中每个格式化占位符对应的具体数据,这些具体数据的顺序与格式化占位符的顺序是一一对应的。8.2.3配置日志函数

先定一个小目标!掌握logging模块中配置日志函数的使用,能够设置日志的格式与级别8.2.3配置日志函数logging模块中除了日志级别的函数外,还有配置日志的函数basicConfig(),根据该函数中传递的参数可以对日志进行配置,包括设置日志级别、日志格式和输出日志等。basicConfig()函数的语法格式如下。basicConfig(**kwargs)basicConfig()函数中的参数**kwargs(keywordarguments)表示可以指定很多可选的关键字参数,这些参数可以改变日志的默认行为,例如,日志格式、日志级别等。8.2.3配置日志函数参数名称说明filename指定日志文件名称filemode指定日志文件的打开模式,默认为a,表示日志会以追加的形式添加到日志文件中。如果为w,那么每次程序启动时都会创建一个新的日志文件format指定日志输出的格式与内容,根据该参数值的不同可以输出日志的不同信息,例如,该参数值为%(levelno)s,会输出数字格式的日志级别datefmt指定日志的日期或时间格式,例如,datefmt='%Y/%m/%d%H:%M:%S'style如果通过format参数指定了日志输出的格式字符串,则可以使用参数style指定日志格式字符串的类型basicConfig()函数中常用的参数如下表所示。8.2.3配置日志函数参数名称说明level设置日志级别,默认为logging.WARNNINGstream指定日志的输出流,可以指定日志输出到sys.stderr、sys.stdout或者文件,默认输出到sys.stderr,当stream和filename参数同时指定时,stream的指定会失效handlers指定日志处理器,如果根日志器没有执行新的日志处理器,则默认使用该参数配置force如果该参数的值为true,则在执行其他参数指定的配置之前,将删除并关闭附加到日志中的所有处理程序8.2.3配置日志函数通常会使用basicConfig()函数配置日志级别、日志的输出格式和日志的输出文件。假设想要配置日志的级别为DEBUG,日志的输出格式为“日志级别名称日志名称日志”,日志的输出文件为a.log,实现这些配置的示例代码如下。logging.basicConfig(level=logging.DEBUG, format="%(levelname)s:%(name)s:%(message)s", filename='a.log')8.2.3配置日志函数接下来通过一个案例演示如何使用basicConfig()函数对日志进行基本的配置,具体代码如下。importlogging#定义一个格式化字符串fmt='%(asctime)s%(levelname)s[%(name)s]'\

'[%(filename)s(%(funcName)s:%(lineno)d)]-%(message)s'#设置日志级别为INFO(信息级别),日志格式为fmt,输出日志到a.log文件中logging.basicConfig(level=logging.INFO,format=fmt,filename='a.log')logging.debug("这是一条调试级别的日志")("这是一条信息级别的日志")logging.warning("这是一条警告级别的日志")logging.error("这是一条错误级别的日志")logging.critical("这是一条严重错误级别的日志")多学一招如果需要调用basicConfig()函数输出更加详细的日志,则需要学习该函数中的format参数,该参数通过设置日志的格式,让程序输出更加详细的日志。format参数常用的格式化字符串如下表所示。format参数常用的格式化字符串格式化字符串说明%(name)s输出日志名称%(levelno)s输出日志级别的数值%(levelname)s输出日志级别的名称%(pathname)s输出当前程序的路径%(filename)s输出程序执行的模块名称,例如log.py%(module)s输出程序执行的模块名称,该名称不带后缀名,例如log多学一招format参数常用的格式化字符串格式化字符串说明%(funcName)s输出日志函数的名称%(lineno)d输出日志函数语句所在的代码行数%(created)f输出当前时间,用UNIX标准的时间的浮点数%(relativeCreated)d输出日志信息的时间%(asctime)s输出字符串形式的当前时间,年-月-日时:分:秒,毫秒%(thread)d输出线程ID%(process)d输出进程ID%(threadName)s输出线程名称%(processName)d输出进程名称%(message)s输出程序中设置的消息8.2.4日志的四大组件

先定一个小目标!掌握logging模块中日志的四大组件,能够完成对日志的处理8.2.4日志的四大组件logging模块提供了日志的四大组件来完成日志的处理,该四大组件分别是日志器、处理器、过滤器和格式器。8.2.4日志的四大组件日志器是程序使用日志的入口。在logging模块中,日志器对应的类是Logger,Logger类中常用的方法如下表所示。方法说明

debug()打印调试级别的日志info()打印信息级别的日志warning()打印警告级别的日志error()打印错误级别的日志critical()打印严重错误级别的日志setLevel()设置日志器将会处理的日志的最低严重级别addHandler()添加一个处理器对象addFilter()添加一个过滤器对象1.日志器8.2.4日志的四大组件如果想要获取一个日志器对象,可以调用logging模块中的getLogger()函数来实现,该函数的语法格式如下。getLogger(name=None)getLogger()函数中传递了参数name,该参数的值是日志器的名称。参数name为可选参数,默认值为None。当getLogger()函数中传递了参数时,该函数的返回值是日志器的名称;如果没有传递参数或参数name的值为None,该函数的返回值为root。如果多次调用getLogger()函数且函数的参数值相同,则调用getLogger()函数获取的日志器对象是同一个。8.2.4日志的四大组件假设想要获取一个日志器名称为“myLogger”的日志器对象,则示例代码如下。logger=logging.getLogger("myLogger")getLogger()函数中的参数“myLogger”为日志器的名称。8.2.4日志的四大组件处理器用于将日志器创建的日志信息输出到指定的位置,例如控制台、文件、网络、邮件等。日志器对象可以调用addHandler()方法添加多个处理器对象。在logging模块中,处理器对应的类是Handler。在程序中不能直接实例化Handler类和使用Handler类的实例,因为Handler类是一个基类,它只定义了一些处理器需要的接口。2.处理器8.2.4日志的四大组件实现类说明logging.StreamHandler将日志信息发送到控制台logging.FileHandler将日志信息发送到磁盘文件,默认情况下文件大小会无限增大logging.handlers.RotatingFileHandler将日志信息发送到磁盘文件,并支持日志文件按文件大小切割logging.hanlders.TimedRotatingFileHandler将日志信息发送到磁盘文件,并支持日志文件按文件生成的时间切割logging.handlers.HTTPHandler将日志信息以GET或POST方式发送给HTTP服务器logging.handlers.SMTPHandler将日志信息发送给指定的Email地址

在程序中通常使用Handler类的实现类来创建处理器对象,logging模块中常用的Handler类的实现类如下表所示。8.2.4日志的四大组件方法说明setLevel()设置处理的日志级别setFormatter()设置一个格式器对象addFilter()添加一个过滤器对象Handler实现类中常用的方法如下表所示。8.2.4日志的四大组件过滤器用于在输出日志的过程中,提供更细颗粒度的日志过滤功能,输出符合指定条件的日志。在logging模块中,过滤器对应的类是Filter,Filter是一个过滤器基类,可以与Logger类和Handler类一起使用,并输出更精确且复杂的日志。当初始化Filter类时,需要调用Filter()方法,该方法的语法格式如下。Filter(name='')Filter()方法中的参数name是日志器的名称,假设参数name的值传递为a.log,则实例化后的Filter对象只允许符合日志器名称为a.log规则的日志通过过滤器过滤。3.过滤器8.2.4日志的四大组件filter=logging.Filter(name='')如果想要过滤日志器名称为空字符串的日志,则创建filter对象的示例代码如下。上述示例代码中创建的filter对象允许所有的日志通过过滤器过滤。Filter类中还定义了filter()方法,该方法用于控制传递的日志器是否通过过滤器过滤,该方法的语法格式如下。filter(record)filter()方法中的参数record表示日志记录对象。当filter()方法的返回值为0时,表示日志器未通过过滤器过滤;当filter()方法的返回值不为0时,表示日志器已通过过滤器过滤。8.2.4日志的四大组件格式器用于配置日志的最终输出格式。在logging模块中,格式器对应的类是Formatter。创建formatter对象的语法格式如下。formatter=logging.Formatter(fmt=None,datefmt=None,style='%',validate=True)fmt:用于指定日志格式化字符串,默认值为None。datefmt:用于指定日期格式的字符串,默认值为None。style:用于指定日志的风格,默认

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论