概述
在自動化測試中,如果測試失敗需要對錯誤的錯誤的程式碼或者測試case進行分析,進行分析時最好的方法是在專案中新增日誌檔案,通過日誌檔案的分析定位出現錯誤的原因。
這樣可以保持自動化測試用例的健壯性,異常的捕獲及處理
思路
將生成日誌檔案封裝,然後在執行用例時呼叫
生成的結果日誌檔案進行統一管理
生成日誌檔案
1 # coding=utf-8 2 3 import logging 4 import datetime 5 import os 6 7 8 class AutoTestLog: 9 def __init__(self): 10 self.logger = logging.getLogger() # 建立一個logger 11 self.logger.setLevel(logging.DEBUG) #指定日誌級別 12 13 # 以時間命名log檔名 14 base_path = os.path.dirname(os.path.abspath(__file__)) # 當前檔案路徑 15 log_path = base_path + '/../logs/' # log檔案路徑 16 file_name = datetime.datetime.now().strftime("%y-%m-%d %H:%M") + '.log' #以時間命名檔名 17 log_name = log_path + file_name # log檔名 18 19 # 將日誌寫入磁碟 20 self.file_handle = logging.FileHandler(log_name,'a',encoding='utf-8') 21 self.file_handle.setLevel(logging.DEBUG) 22 """ 23 設定日誌格式 24 %(asctime)s 日誌事件發生的時間 25 %(filename)s pathname的檔名部分,包含檔案字尾 26 %(funcName)s 呼叫日誌記錄函式的函式名 27 %(levelname)s 該日誌記錄的文字形式的日誌級別('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL') 28 %(message)s 日誌記錄的文字內容 29 """ 30 file_formatter = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(levelname)s - %(message)s') 31 self.file_handle.setFormatter(file_formatter) 32 # 給logger新增handler 33 self.logger.addHandler(self.file_handle) 34 35 def get_log(self): 36 return self.logger 37 38 # 關閉handle 39 def close_handle(self): 40 self.logger.removeHandler(self.file_handle) 41 self.file_handle.close()
進行簡單的封裝
對於封裝的可以進行簡單的驗證
在執行時新增列印message即可,如下
1 if __name__ == '__main__': 2 AutoTest = AutoTestLog() 3 log = AutoTest.get_log() 4 log.debug('test') 5 AutoTest.close_handle()
將封裝的日誌檔案進行使用
將上面封裝的函式匯入case檔案,然後將生成的日誌檔案單獨存放,進行統一管理
以百度首頁跳轉連結case為例
1 from auto_learning.log.AutoTestLog import AutoTestLog 2 import unittest 3 from selenium import webdriver 4 import time 5 6 7 class TestCase(unittest.TestCase): 8 @classmethod 9 def setUpClass(cls): 10 cls.log = AutoTestLog() 11 cls.logger = cls.log.get_log() 12 13 @classmethod 14 def tearDownClass(cls): 15 cls.log.close_handle() 16 17 def setUp(self): 18 self.logger.info("--start test --") 19 base_url = 'https://www.baidu.com' 20 self.driver = webdriver.Chrome() 21 self.driver.implicitly_wait(10) 22 self.driver.get(base_url) 23 24 def tearDown(self): 25 self.driver.close() 26 self.driver.quit() 27 self.logger.info("--test end--") 28 29 def test_baidu_news(self): 30 u"""百度新聞""" 31 driver = self.driver 32 driver.find_element_by_link_text('新聞').click() 33 time.sleep(1) 34 self.assertIn(driver.title, u'百度新聞——全球最大的中文新聞平臺') 35 36 def test_baidu_hao123(self): 37 u"""hao123""" 38 driver = self.driver 39 driver.find_element_by_link_text('hao123').click() 40 time.sleep(1) 41 self.assertEqual(driver.title, u'hao123_上網從這裡開始') 42 43 def test_baidu_tieba(self): 44 u"""百度貼吧""" 45 driver = self.driver 46 driver.find_element_by_link_text('貼吧').click() 47 time.sleep(1) 48 # 錯誤的斷言 49 self.assertTrue(driver.find_element_by_link_text('全吧搜尋+1')) 50 51 52 if __name__ == '__main__': 53 unittest.main()
執行後生成的log檔案
原文釋出在 軟體羊皮卷 微信公眾號中,歡迎大家關注