概述

  在自动化测试中,如果测试失败需要对错误的错误的代码或者测试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文件

 

 

原文发布在 软件羊皮卷 微信公众号中,欢迎大家关注

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!