自动化测试框架搭建-日志-2
生活随笔
收集整理的這篇文章主要介紹了
自动化测试框架搭建-日志-2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? 在上一節的自動化測試框架搭建-【配置】的基礎上為框架加上日志log,既然用到了log類,可以學習Python-logging進行學習,在utils中創建一個log.py文件,Python有很方便的logging庫,對其進行簡單的封裝,使框架可以很簡單地打印日志(輸出到控制臺以及日志文件)。
? ? 對于logger模塊,有幾篇自己在學習過程中覺得可以值得學習的博客:Python logging模塊詳解和logger模塊詳解;值得學習和借鑒。
#coding:utf-8 '''log.py output the log'''import logging from logging.handlers import TimedRotatingFileHandler from Framework.utils.config import LOG_PATHclass Logger():def __init__(self,logger_name = 'framework'):#創建一個logger實例,如果參數為空則返回root loggerself.logger = logging.getLogger(logger_name)logging.root.setLevel(logging.NOTSET)self.log_file_name = 'test.log'self.backup_count = 5#日志輸出級別self.console_output_level = 'WARNING'self.file_output_level = 'DEBUG'#日志輸出格式self.formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')def get_logger(self):'''在logger日志中添加日志句柄并返回,如果logger句柄已經存在,則直接返回'''if not self.logger.handlers:console_handler = logging.StreamHandler()console_handler.setFormatter(self.formatter)console_handler.setLevel(self.console_output_level)self.logger.addHandler(console_handler)#每天重新創建一個日志文件,最多保留backup_count份file_handler = TimedRotatingFileHandler(filename=LOG_PATH + self.log_file_name,when='D',interval=1,backupCount=self.backup_count,delay=True,encoding='utf-8')file_handler.setFormatter(self.formatter)file_handler.setLevel(self.file_output_level)self.logger.addHandler(file_handler)return self.loggerlogger = Logger().get_logger()if __name__ == '__main__':print logger修改test_baidu3.py模塊,將輸出日志功能加入到方法中,同時為了使用類方法實現測試方法的共享測試數據初始化和回收工作,從而使用@classmethod只需要初始化一次測試環境并且在測試用例執行完成后進行環境恢復。
#coding:utf-8 '''test_baidu3 This moudle has a logger function'''import time import unittest from selenium import webdriver from selenium.webdriver.common.by import By from Framework.utils.config import Config,DRIVER_PATH from Framework.utils.log1 import loggerclass TestBaiDu(unittest.TestCase):URL = Config().get('URL')locator_kw = (By.ID, 'kw')locator_su = (By.ID, 'su')locator_result = (By.XPATH, '//div[contains(@class, "result")]/h3/a')@classmethod#def setUp(self):def setUp(cls):cls.driver = webdriver.Chrome(executable_path=DRIVER_PATH + '\chromedriver.exe')cls.driver.get(cls.URL)@classmethod#def tearDown(self):def tearDown(cls):cls.driver.quit()def test_search_0(self):self.driver.find_element(*self.locator_kw).send_keys('selenium')self.driver.find_element(*self.locator_su).click()time.sleep(2)links = self.driver.find_elements(*self.locator_result)for link in links:#print(link.text)logger.info(link.text)def test_search_1(self):self.driver.find_element(*self.locator_kw).send_keys('Python selenium')self.driver.find_element(*self.locator_su).click()time.sleep(2)links = self.driver.find_elements(*self.locator_result)for link in links:#print(link.text)logger.info(link.text)if __name__ == '__main__':unittest.main()在工程Framework下生成了一個logtest.log日志,輸出結果:
之后,由于log.py模塊中有很多設置,將其放置到config.yaml中
URL: http://www.baidu.com log:file_name: test.logbackup: 5console_level: WARNINGfile_level: DEBUGpattern: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'同時修改log1.py,讀取config,如果config中有,則采用文件中的設置,否則,采用默認設置
#coding:utf-8 '''log1.py output the log''' """ 日志類。通過讀取配置文件,定義日志級別、日志文件名、日志格式等。 一般直接把logger import進去 from utils.log import logger logger.info('test log') """import logging from logging.handlers import TimedRotatingFileHandler from Framework.utils.config import LOG_PATH,Configclass Logger():def __init__(self,logger_name = 'framework'):#創建一個logger實例,如果參數為空則返回root loggerself.logger = logging.getLogger(logger_name)logging.root.setLevel(logging.NOTSET)c = Config().get('log')self.log_file_name = c.get('file_name') if c and c.get('file_name') \else 'test.log' #日志文件self.backup_count = c.get('backup') if c and c.get('backup') else 5 # 保留的日志數量#日志輸出級別self.console_output_level = c.get('console_level') if c and \c.get('console_level') else 'WARNING'self.file_output_level = c.get('file_level') if c and c.get('file_level') else 'DEBUG'# 日志輸出格式pattern = c.get('pattern') if c and c.get('pattern') \else '%(asctime)s - %(name)s - %(levelname)s - %(message)s'self.formatter = logging.Formatter(pattern)def get_logger(self):"""在logger中添加日志句柄并返回,如果logger已有句柄,則直接返回我們這里添加兩個句柄,一個輸出日志到控制臺,另一個輸出到日志文件。兩個句柄的日志級別不同,在配置文件中可設置。"""if not self.logger.handlers:console_handler = logging.StreamHandler()console_handler.setFormatter(self.formatter)console_handler.setLevel(self.console_output_level)self.logger.addHandler(console_handler)#每天重新創建一個日志文件,最多保留backup_count份file_handler = TimedRotatingFileHandler(filename=LOG_PATH + self.log_file_name,when='D',interval=1,backupCount=self.backup_count,delay=True,encoding='utf-8')file_handler.setFormatter(self.formatter)file_handler.setLevel(self.file_output_level)self.logger.addHandler(file_handler)return self.loggerlogger = Logger().get_logger()if __name__ == '__main__':print logger由于這里的日志模塊為log1.py,因此在test_baidu3.py做如下修改
from Framework.utils.log1 import logger總結
以上是生活随笔為你收集整理的自动化测试框架搭建-日志-2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自动化测试框架搭建-配置-1
- 下一篇: 自动化测试框架搭建-参数化-3