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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論