斷言已經完成了,那么接下來我們就需要加入日志了
斷言可以記錄結果,判斷case運行的成功或者失敗,那么日志的作用就是記錄每一步的操作,可以更清晰的看到是在哪一步產生的錯誤,更有利於我們在出現問題的時候定位問題。
而且有了這個日志之后,是會加到后面的測試報告中的。
日志我們就需要好好的了解一下logging這塊兒了
logger:提供日志接口,供應用代碼使用。logger最長用的操作有兩類:配置和發送日志消息。可以通過logging.getLogger(name)獲取logger對象,如果不指定name則返回root對象,多次使用相同的name調用getLogger方法返回同一個logger對象。 handler:將日志記錄(log record)發送到合適的目的地(destination),比如文件,socket等。一個logger對象可以通過addHandler方法添加0到多個handler,每個handler又可以定義不同日志級別,以實現日志分級過濾顯示。 filter:提供一種優雅的方式決定一個日志記錄是否發送到handler。 formatter:指定日志記錄輸出的具體格式。formatter的構造方法需要兩個參數:消息的格式字符串和日期字符串,這兩個參數都是可選的。與log4j類似,logger,handler和日志消息的調用可以有具體的日志級別(Level),只有在日志消息的級別大於logger和handler的級別。
害,這是我百度的,具體啥意思我也不知道,給你們看看代碼吧,我現在也只是自己邊學邊寫的
# 獲取日志
import logging
class Demo_Log:
def __init__(self):
# 創建日志器
self.logger = logging.getLogger(__name__)
# 設置日志級別
self.logger.setLevel(logging.INFO)
# 創建控制台處理器,代碼運行時能夠在控制台輸出日志
t = logging.StreamHandler()
# 創建文本處理器,代碼運行時將日志寫入自己設置的文件,如果沒有該文件會創建該文件
f = logging.FileHandler('../Log/log.txt', encoding='utf-8')
# 創建格式器,設置輸出的日志的格式
format = logging.Formatter(
'%(asctime)s %(filename)s %(module)s %(funcName)s %(lineno)d %(levelname)s %(message)s')
t.setFormatter(format)
f.setFormatter(format)
self.logger.addHandler(t)
self.logger.addHandler(f)
# 清空日志內容
with open('../Log/log.txt', 'w') as file:
file.truncate()
def get_log(self):
這是固定格式,划重點,除了設置日志級別,變量,文件,寫法是固定的。
DEBUG 詳細信息,只有診斷問題時才需要,就是一般的調試信息
代碼我都有備注就不一一解釋了,這里挑幾個點說一下
1、日志級別
INFO 當程序運行時期望的一些信息
WARNING 軟件運行正常,但是可能會有一些預期之外的事件發生
ERROR 由於一些嚴重問題導致軟件一些功能出現問題
CRITICAL 很嚴重的錯誤直接導致軟件不能繼續運行
默認的級別時WARNING,意味默認的級別下,顯示的日志信息必須時>=WARNING的級別才會進行處理,這里我們通常都是使用的info,debug一般只有在報錯的時候才會使用,就比如你不確定那里是不是正常的,可以試着try一下,把日志級別設置成debug
2、格式器的常用參數
%(acstime)s 時間
%(filename)s 日志文件名
%(funcName)s 調用日志的函數名
%(levelname)s 日志的級別
%(module)s 調用日志的模塊名
%(message)s 日志信息
%(name)s logger的name,不寫的話默認是root
還有一些其他的,用到的話可以參考官方文檔
3、清空日志
上面寫的清空日志的兩行代碼,固定的,文件路徑和文件名可以改,但是寫法不能改,file.truncate()的作用是,每次開始記錄日志的時候,清空上一次的日志信息。
日志模塊了解完之后,就是在代碼中加入我們的日志
import yaml
from practice.Find_Element.Login_Element import UserLoginElement
from practice.Log.Demo_log import DemoLog
from selenium.webdriver.common.by import By
class Login(UserLoginElement):
# 登錄
def get_login(self):
with open('../desired_caps.yaml', 'r', encoding='utf-8') as f:
dl = yaml.load(f, Loader=yaml.FullLoader)
mobile = dl['mobile']
password = dl['password']
log = TanBaoLog().get_log()
log.info('定位**元素,點擊同意')
self.get_service_agreement().click()
log.info('定位**元素,點擊同意')
self.get_personal_center().click()
log.info('定位手機號輸入框,輸入手機號')
self.get_input_mobile().send_keys(mobile)
log.info('定位密碼輸入框,輸入密碼')
self.get_input_password().send_keys(password)
log.info('定位**元素,點擊同意')
self.get_privacy_agreement().click()
log.info('定位登錄按鈕,點擊登錄')
self.get_login_value().click()
el = self.driver.find_element(By.ID, '')
assert '**' in el.text, '未登錄'
這里要注意,需要輸出日志就一定要引用我們已經寫好的獲取日志的方法,獲取日志器之后,在你需要輸出日志的操作的上一行寫入log.info(''),這樣就會輸出你所想要的日志了
運行一下看看結果
控制台日志
寫入文件的日志
