selenium-日志文件的使用(十二)


概述

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

 

 

原文發布在 軟件羊皮卷 微信公眾號中,歡迎大家關注


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM