第8章 日志電子課件_第1頁(yè)
第8章 日志電子課件_第2頁(yè)
第8章 日志電子課件_第3頁(yè)
第8章 日志電子課件_第4頁(yè)
第8章 日志電子課件_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章日志《自動(dòng)化測(cè)試應(yīng)用教程(Web+App)》學(xué)習(xí)目標(biāo)/Target了解日志的簡(jiǎn)介,能夠闡述日志的概念和作用熟悉logging模塊中的日志級(jí)別,能夠歸納日志級(jí)別的特點(diǎn)掌握l(shuí)ogging模塊中日志級(jí)別函數(shù)的使用,能夠輸出不同級(jí)別的日志掌握l(shuí)ogging模塊中配置日志函數(shù)的使用,能夠設(shè)置日志的格式和級(jí)別掌握l(shuí)ogging模塊中日志的4大組件,能夠完成對(duì)日志的處理章節(jié)概述/Summary在測(cè)試一個(gè)Web項(xiàng)目的過(guò)程中,如果測(cè)試程序突然崩潰,此時(shí)測(cè)試人員就需要去查看程序輸出的日志信息,根據(jù)日志信息定位程序出錯(cuò)的位置,并分析出錯(cuò)的原因。此外,如果測(cè)試程序正在進(jìn)行持續(xù)集成,且是無(wú)人值守的情況下,就需要通過(guò)記錄日志信息明確測(cè)試執(zhí)行的過(guò)程和結(jié)果。為了讓讀者能夠掌握和使用日志信息,本章將對(duì)日志簡(jiǎn)介、logging模塊中的日志、實(shí)戰(zhàn)演練——每分鐘生成一個(gè)日志文件進(jìn)行講解。目錄/Contents01日志簡(jiǎn)介02logging模塊中的日志03實(shí)戰(zhàn)演練——每分鐘生成一個(gè)日志文件日志簡(jiǎn)介8.18.1.1日志的概念

先定一個(gè)小目標(biāo)!了解日志的概念,能夠闡述日志的概念8.1.1日志的概念在計(jì)算機(jī)中,所有軟件或系統(tǒng)運(yùn)行過(guò)程中的信息都需要被記錄,這些被記錄的信息被稱為日志(Log)。日志是對(duì)一個(gè)事件的記錄。日志中包含軟件或系統(tǒng)運(yùn)行過(guò)程中的日期、時(shí)間、警告、異常、錯(cuò)誤等信息,開發(fā)人員或測(cè)試人員通過(guò)查看日志信息可以很清晰地知道程序或系統(tǒng)在每個(gè)時(shí)間段發(fā)生的事件。8.1.2日志的作用

先定一個(gè)小目標(biāo)!了解日志的作用,能夠說(shuō)出日志的4個(gè)作用8.1.2日志的作用開發(fā)人員或測(cè)試人員通過(guò)記錄和分析日志可以了解軟件或系統(tǒng)的運(yùn)行情況是否正常,也可以根據(jù)日志信息快速定位程序出現(xiàn)的問題。8.1.2日志的作用在自動(dòng)化測(cè)試程序中,測(cè)試人員可以調(diào)用記錄日志的相關(guān)函數(shù)或方法來(lái)追蹤測(cè)試過(guò)程中發(fā)生的事件信息,例如,檢驗(yàn)測(cè)試用例是否通過(guò)、測(cè)試時(shí)的網(wǎng)絡(luò)是否通暢等。8.1.2日志的作用在軟件項(xiàng)目的研發(fā)或測(cè)試階段,日志的作用可以簡(jiǎn)單總結(jié)為以下幾點(diǎn)。調(diào)試程序程序或系統(tǒng)運(yùn)行的故障分析與問題定位了解程序或系統(tǒng)運(yùn)行的情況用戶行為分析和數(shù)據(jù)統(tǒng)計(jì)8.1.2日志的作用通過(guò)分析日志,測(cè)試人員或開發(fā)人員能夠及時(shí)發(fā)現(xiàn)問題并快速定位問題,有助于解決問題并降低損失。如果程序的日志信息足夠豐富,還可以通過(guò)分析用戶的操作行為提高商業(yè)利益。logging模塊中的日志8.28.2.1日志級(jí)別

先定一個(gè)小目標(biāo)!熟悉logging模塊中的日志級(jí)別,能夠歸納日志級(jí)別的特點(diǎn)8.2.1日志級(jí)別日志級(jí)別是指日志信息的優(yōu)先級(jí)、重要性或者嚴(yán)重程度。在軟件測(cè)試階段,為了能詳細(xì)查看程序運(yùn)行的狀態(tài),測(cè)試人員需要將測(cè)試程序運(yùn)行過(guò)程中的所有日志信息全部記錄下來(lái)。但記錄所有日志的操作會(huì)影響程序的性能,當(dāng)記錄的日志信息較多時(shí),不利于排查程序的問題。8.2.1日志級(jí)別為了避免記錄所有的日志影響程序的性能并且增加排查程序問題的難度,可以通過(guò)日志級(jí)別對(duì)日志信息進(jìn)行分類,只記錄對(duì)程序比較重要的日志,例如程序運(yùn)行過(guò)程中的異常信息、錯(cuò)誤信息等。8.2.1日志級(jí)別日志級(jí)別說(shuō)明DEBUG調(diào)試級(jí)別,記錄非常詳細(xì)的日志信息,通常記錄代碼的調(diào)試信息INFO信息級(jí)別,記錄一般的日志信息,主要用于記錄程序運(yùn)行過(guò)程中的信息WARNING警告級(jí)別,記錄警告日志信息,該級(jí)別的信息表示會(huì)出現(xiàn)潛在錯(cuò)誤的情形,一般不影響軟件的正常使用ERROR錯(cuò)誤級(jí)別,記錄錯(cuò)誤日志信息,該級(jí)別的錯(cuò)誤可能會(huì)導(dǎo)致程序的某些功能無(wú)法正常使用CRITICAL嚴(yán)重錯(cuò)誤級(jí)別,記錄程序運(yùn)行時(shí)的嚴(yán)重錯(cuò)誤信息,該級(jí)別的錯(cuò)誤可能會(huì)導(dǎo)致整個(gè)程序都不能正常運(yùn)行l(wèi)ogging模塊中默認(rèn)定義了5種日志級(jí)別,如下表所示。8.2.1日志級(jí)別日志級(jí)別的優(yōu)先級(jí)由低到高依次為:DEBUG<INFO<WARNING<ERROR<CRITICAL。當(dāng)在程序中記錄某個(gè)級(jí)別的日志信息時(shí),程序會(huì)記錄大于或等于指定級(jí)別的日志信息,而不是只記錄指定級(jí)別的日志信息。logging模塊中默認(rèn)的日志級(jí)別為WARNING,程序中優(yōu)先級(jí)高于該級(jí)別或者是該級(jí)別的日志才能輸出,低于該級(jí)別的日志不會(huì)被輸出。8.2.2日志級(jí)別函數(shù)

先定一個(gè)小目標(biāo)!掌握l(shuí)ogging模塊中日志級(jí)別函數(shù)的使用,能夠輸出不同級(jí)別的日志8.2.2日志級(jí)別函數(shù)如果想要在測(cè)試程序中輸出不同級(jí)別的日志信息,可以使用logging模塊中提供的日志級(jí)別函數(shù)。logging模塊中提供的日志級(jí)別函數(shù)是對(duì)日志系統(tǒng)中相關(guān)類的封裝。8.2.2日志級(jí)別函數(shù)函數(shù)說(shuō)明debug(msg,*args,**kwargs)輸出日志級(jí)別為DEBUG的日志信息info(msg,*args,**kwargs)輸出日志級(jí)別為INFO的日志信息warning(msg,*args,**kwargs)輸出日志級(jí)別為WARNING的日志信息error(msg,*args,**kwargs)輸出日志級(jí)別為ERROR的日志信息critical(msg,*args,**kwargs)輸出日志級(jí)別為CRITICAL的日志信息log(level,*args,**kwargs)輸出日志級(jí)別為level的日志信息,參數(shù)level的值為日志級(jí)別對(duì)應(yīng)的常量,例如,logging.ERROR(錯(cuò)誤級(jí)別)、logging.WARNING(警告級(jí)別)等logging模塊中常用的日志級(jí)別函數(shù)如下表所示。8.2.2日志級(jí)別函數(shù)如果要輸出的日志中包含變量,可以使用格式字符串描述該日志信息。假設(shè)要輸出一個(gè)警告級(jí)別的日志信息,該信息中包含了字符串類型的變量和數(shù)值類型的變量,可通過(guò)調(diào)用warning()方法實(shí)現(xiàn),示例代碼如下。logging.warning("我叫%s,我今年%d歲了","Lucy",12)上述示例代碼中%s與%d是格式化字符串中的占位符,%s表示輸出的內(nèi)容為字符串,%d表示輸出的內(nèi)容為整數(shù),占位符%s的值是warning()方法中的第2個(gè)參數(shù)“Lucy”,占位符%d的值是warning()方法中傳遞的第3個(gè)參數(shù)12。8.2.2日志級(jí)別函數(shù)接下來(lái)通過(guò)一個(gè)案例來(lái)演示如何使用日志級(jí)別函數(shù)輸出日志,具體代碼如下。importlogging#調(diào)用logging模塊中的日志級(jí)別函數(shù)輸出日志logging.debug("這是一條調(diào)試級(jí)別的日志")("這是一條信息級(jí)別的日志")logging.warning("這是一條警告級(jí)別的日志")logging.error("這是一條錯(cuò)誤級(jí)別的日志")logging.critical("這是一條嚴(yán)重錯(cuò)誤級(jí)別的日志")logging.log(level=logging.WARNING,msg="這是一條通過(guò)log()函數(shù)輸出的警告級(jí)別日志")logging.error("這是一條%s級(jí)別的日志,輸出了%d次","錯(cuò)誤",1)多學(xué)一招格式化字符串是指在字符串中用格式化占位符來(lái)代替字符串中變化的部分,然后將這些變化部分的具體數(shù)據(jù)與字符串整合。Python中常見的格式化占位符(為某個(gè)數(shù)據(jù)占據(jù)位置)如下表所示。格式化字符串格式化占位符說(shuō)明%d整數(shù)占位符%s字符串占位符%f浮點(diǎn)數(shù)占位符,%.Nf表示保留小數(shù)點(diǎn)后N位小數(shù)。例如,%.2f表示保留小數(shù)點(diǎn)后2位小數(shù)%c字符占位符多學(xué)一招接下來(lái)通過(guò)一個(gè)格式化字符串演示如何使用Python中常見的格式化占位符,具體示例代碼如下。格式化字符串msg="我叫%s,我今年%d歲了,我考試成績(jī)?yōu)?.2f,我的作文級(jí)別為%c"%("小明",12,90.5,'A')上述示例代碼中,變量msg的值是一個(gè)格式化字符串,該字符串中的%s、%d、%.2f、%c均是字符串中的格式化占位符,最后一個(gè)%后面的部分(即"小明",12,90.5,'A')是字符串中每個(gè)格式化占位符對(duì)應(yīng)的具體數(shù)據(jù),這些具體數(shù)據(jù)的順序與格式化占位符的順序是一一對(duì)應(yīng)的。8.2.3配置日志函數(shù)

先定一個(gè)小目標(biāo)!掌握l(shuí)ogging模塊中配置日志函數(shù)的使用,能夠設(shè)置日志的格式與級(jí)別8.2.3配置日志函數(shù)logging模塊中除了日志級(jí)別的函數(shù)外,還有配置日志的函數(shù)basicConfig(),根據(jù)該函數(shù)中傳遞的參數(shù)可以對(duì)日志進(jìn)行配置,包括設(shè)置日志級(jí)別、日志格式和輸出日志等。basicConfig()函數(shù)的語(yǔ)法格式如下。basicConfig(**kwargs)basicConfig()函數(shù)中的參數(shù)**kwargs(keywordarguments)表示可以指定很多可選的關(guān)鍵字參數(shù),這些參數(shù)可以改變?nèi)罩镜哪J(rèn)行為,例如,日志格式、日志級(jí)別等。8.2.3配置日志函數(shù)參數(shù)名稱說(shuō)明filename指定日志文件名稱filemode指定日志文件的打開模式,默認(rèn)為a,表示日志會(huì)以追加的形式添加到日志文件中。如果為w,那么每次程序啟動(dòng)時(shí)都會(huì)創(chuàng)建一個(gè)新的日志文件format指定日志輸出的格式與內(nèi)容,根據(jù)該參數(shù)值的不同可以輸出日志的不同信息,例如,該參數(shù)值為%(levelno)s,會(huì)輸出數(shù)字格式的日志級(jí)別datefmt指定日志的日期或時(shí)間格式,例如,datefmt='%Y/%m/%d%H:%M:%S'style如果通過(guò)format參數(shù)指定了日志輸出的格式字符串,則可以使用參數(shù)style指定日志格式字符串的類型basicConfig()函數(shù)中常用的參數(shù)如下表所示。8.2.3配置日志函數(shù)參數(shù)名稱說(shuō)明level設(shè)置日志級(jí)別,默認(rèn)為logging.WARNNINGstream指定日志的輸出流,可以指定日志輸出到sys.stderr、sys.stdout或者文件,默認(rèn)輸出到sys.stderr,當(dāng)stream和filename參數(shù)同時(shí)指定時(shí),stream的指定會(huì)失效handlers指定日志處理器,如果根日志器沒有執(zhí)行新的日志處理器,則默認(rèn)使用該參數(shù)配置force如果該參數(shù)的值為true,則在執(zhí)行其他參數(shù)指定的配置之前,將刪除并關(guān)閉附加到日志中的所有處理程序8.2.3配置日志函數(shù)通常會(huì)使用basicConfig()函數(shù)配置日志級(jí)別、日志的輸出格式和日志的輸出文件。假設(shè)想要配置日志的級(jí)別為DEBUG,日志的輸出格式為“日志級(jí)別名稱日志名稱日志”,日志的輸出文件為a.log,實(shí)現(xiàn)這些配置的示例代碼如下。logging.basicConfig(level=logging.DEBUG, format="%(levelname)s:%(name)s:%(message)s", filename='a.log')8.2.3配置日志函數(shù)接下來(lái)通過(guò)一個(gè)案例演示如何使用basicConfig()函數(shù)對(duì)日志進(jìn)行基本的配置,具體代碼如下。importlogging#定義一個(gè)格式化字符串fmt='%(asctime)s%(levelname)s[%(name)s]'\

'[%(filename)s(%(funcName)s:%(lineno)d)]-%(message)s'#設(shè)置日志級(jí)別為INFO(信息級(jí)別),日志格式為fmt,輸出日志到a.log文件中l(wèi)ogging.basicConfig(level=logging.INFO,format=fmt,filename='a.log')logging.debug("這是一條調(diào)試級(jí)別的日志")("這是一條信息級(jí)別的日志")logging.warning("這是一條警告級(jí)別的日志")logging.error("這是一條錯(cuò)誤級(jí)別的日志")logging.critical("這是一條嚴(yán)重錯(cuò)誤級(jí)別的日志")多學(xué)一招如果需要調(diào)用basicConfig()函數(shù)輸出更加詳細(xì)的日志,則需要學(xué)習(xí)該函數(shù)中的format參數(shù),該參數(shù)通過(guò)設(shè)置日志的格式,讓程序輸出更加詳細(xì)的日志。format參數(shù)常用的格式化字符串如下表所示。format參數(shù)常用的格式化字符串格式化字符串說(shuō)明%(name)s輸出日志名稱%(levelno)s輸出日志級(jí)別的數(shù)值%(levelname)s輸出日志級(jí)別的名稱%(pathname)s輸出當(dāng)前程序的路徑%(filename)s輸出程序執(zhí)行的模塊名稱,例如log.py%(module)s輸出程序執(zhí)行的模塊名稱,該名稱不帶后綴名,例如log多學(xué)一招format參數(shù)常用的格式化字符串格式化字符串說(shuō)明%(funcName)s輸出日志函數(shù)的名稱%(lineno)d輸出日志函數(shù)語(yǔ)句所在的代碼行數(shù)%(created)f輸出當(dāng)前時(shí)間,用UNIX標(biāo)準(zhǔn)的時(shí)間的浮點(diǎn)數(shù)%(relativeCreated)d輸出日志信息的時(shí)間%(asctime)s輸出字符串形式的當(dāng)前時(shí)間,年-月-日時(shí):分:秒,毫秒%(thread)d輸出線程ID%(process)d輸出進(jìn)程ID%(threadName)s輸出線程名稱%(processName)d輸出進(jìn)程名稱%(message)s輸出程序中設(shè)置的消息8.2.4日志的四大組件

先定一個(gè)小目標(biāo)!掌握l(shuí)ogging模塊中日志的四大組件,能夠完成對(duì)日志的處理8.2.4日志的四大組件logging模塊提供了日志的四大組件來(lái)完成日志的處理,該四大組件分別是日志器、處理器、過(guò)濾器和格式器。8.2.4日志的四大組件日志器是程序使用日志的入口。在logging模塊中,日志器對(duì)應(yīng)的類是Logger,Logger類中常用的方法如下表所示。方法說(shuō)明

debug()打印調(diào)試級(jí)別的日志info()打印信息級(jí)別的日志warning()打印警告級(jí)別的日志error()打印錯(cuò)誤級(jí)別的日志critical()打印嚴(yán)重錯(cuò)誤級(jí)別的日志setLevel()設(shè)置日志器將會(huì)處理的日志的最低嚴(yán)重級(jí)別addHandler()添加一個(gè)處理器對(duì)象addFilter()添加一個(gè)過(guò)濾器對(duì)象1.日志器8.2.4日志的四大組件如果想要獲取一個(gè)日志器對(duì)象,可以調(diào)用logging模塊中的getLogger()函數(shù)來(lái)實(shí)現(xiàn),該函數(shù)的語(yǔ)法格式如下。getLogger(name=None)getLogger()函數(shù)中傳遞了參數(shù)name,該參數(shù)的值是日志器的名稱。參數(shù)name為可選參數(shù),默認(rèn)值為None。當(dāng)getLogger()函數(shù)中傳遞了參數(shù)時(shí),該函數(shù)的返回值是日志器的名稱;如果沒有傳遞參數(shù)或參數(shù)name的值為None,該函數(shù)的返回值為root。如果多次調(diào)用getLogger()函數(shù)且函數(shù)的參數(shù)值相同,則調(diào)用getLogger()函數(shù)獲取的日志器對(duì)象是同一個(gè)。8.2.4日志的四大組件假設(shè)想要獲取一個(gè)日志器名稱為“myLogger”的日志器對(duì)象,則示例代碼如下。logger=logging.getLogger("myLogger")getLogger()函數(shù)中的參數(shù)“myLogger”為日志器的名稱。8.2.4日志的四大組件處理器用于將日志器創(chuàng)建的日志信息輸出到指定的位置,例如控制臺(tái)、文件、網(wǎng)絡(luò)、郵件等。日志器對(duì)象可以調(diào)用addHandler()方法添加多個(gè)處理器對(duì)象。在logging模塊中,處理器對(duì)應(yīng)的類是Handler。在程序中不能直接實(shí)例化Handler類和使用Handler類的實(shí)例,因?yàn)镠andler類是一個(gè)基類,它只定義了一些處理器需要的接口。2.處理器8.2.4日志的四大組件實(shí)現(xiàn)類說(shuō)明logging.StreamHandler將日志信息發(fā)送到控制臺(tái)logging.FileHandler將日志信息發(fā)送到磁盤文件,默認(rèn)情況下文件大小會(huì)無(wú)限增大logging.handlers.RotatingFileHandler將日志信息發(fā)送到磁盤文件,并支持日志文件按文件大小切割logging.hanlders.TimedRotatingFileHandler將日志信息發(fā)送到磁盤文件,并支持日志文件按文件生成的時(shí)間切割logging.handlers.HTTPHandler將日志信息以GET或POST方式發(fā)送給HTTP服務(wù)器logging.handlers.SMTPHandler將日志信息發(fā)送給指定的Email地址

在程序中通常使用Handler類的實(shí)現(xiàn)類來(lái)創(chuàng)建處理器對(duì)象,logging模塊中常用的Handler類的實(shí)現(xiàn)類如下表所示。8.2.4日志的四大組件方法說(shuō)明setLevel()設(shè)置處理的日志級(jí)別setFormatter()設(shè)置一個(gè)格式器對(duì)象addFilter()添加一個(gè)過(guò)濾器對(duì)象Handler實(shí)現(xiàn)類中常用的方法如下表所示。8.2.4日志的四大組件過(guò)濾器用于在輸出日志的過(guò)程中,提供更細(xì)顆粒度的日志過(guò)濾功能,輸出符合指定條件的日志。在logging模塊中,過(guò)濾器對(duì)應(yīng)的類是Filter,F(xiàn)ilter是一個(gè)過(guò)濾器基類,可以與Logger類和Handler類一起使用,并輸出更精確且復(fù)雜的日志。當(dāng)初始化Filter類時(shí),需要調(diào)用Filter()方法,該方法的語(yǔ)法格式如下。Filter(name='')Filter()方法中的參數(shù)name是日志器的名稱,假設(shè)參數(shù)name的值傳遞為a.log,則實(shí)例化后的Filter對(duì)象只允許符合日志器名稱為a.log規(guī)則的日志通過(guò)過(guò)濾器過(guò)濾。3.過(guò)濾器8.2.4日志的四大組件filter=logging.Filter(name='')如果想要過(guò)濾日志器名稱為空字符串的日志,則創(chuàng)建filter對(duì)象的示例代碼如下。上述示例代碼中創(chuàng)建的filter對(duì)象允許所有的日志通過(guò)過(guò)濾器過(guò)濾。Filter類中還定義了filter()方法,該方法用于控制傳遞的日志器是否通過(guò)過(guò)濾器過(guò)濾,該方法的語(yǔ)法格式如下。filter(record)filter()方法中的參數(shù)record表示日志記錄對(duì)象。當(dāng)filter()方法的返回值為0時(shí),表示日志器未通過(guò)過(guò)濾器過(guò)濾;當(dāng)filter()方法的返回值不為0時(shí),表示日志器已通過(guò)過(guò)濾器過(guò)濾。8.2.4日志的四大組件格式器用于配置日志的最終輸出格式。在logging模塊中,格式器對(duì)應(yīng)的類是Formatter。創(chuàng)建formatter對(duì)象的語(yǔ)法格式如下。formatter=logging.Formatter(fmt=None,datefmt=None,style='%',validate=True)fmt:用于指定日志格式化字符串,默認(rèn)值為None。datefmt:用于指定日期格式的字符串,默認(rèn)值為None。style:用于指定日志的風(fēng)格,默認(rèn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論