selenium-日誌檔案的使用(十二)

Tynam.Yang發表於2019-02-16

概述

  在自動化測試中,如果測試失敗需要對錯誤的錯誤的程式碼或者測試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檔案

 

 

原文釋出在 軟體羊皮卷 微信公眾號中,歡迎大家關注

相關文章