概述
在自動化測試中,如果測試失敗需要對錯誤的錯誤的代碼或者測試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文件
原文發布在 軟件羊皮卷 微信公眾號中,歡迎大家關注