概述
在自动化测试中,如果测试失败需要对错误的错误的代码或者测试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文件
原文发布在 软件羊皮卷 微信公众号中,欢迎大家关注
原文:https://www.cnblogs.com/tynam/p/10388636.html