概述

  在自动化测试中,如果测试失败需要对错误的错误的代码或者测试case进行分析,进行分析时最好的方法是在项目中添加日志文件,通过日志文件的分析定位出现错误的原因。

  这样可以保持自动化测试用例的健壮性,异常的捕获及处理

思路

  将生成日志文件封装,然后在执行用例时调用

  生成的结果日志文件进行统一管理

生成日志文件

 # coding=utf-8

 import logging
import datetime
import os class AutoTestLog:
def __init__(self):
self.logger = logging.getLogger() # 创建一个logger
self.logger.setLevel(logging.DEBUG) #指定日志级别 # 以时间命名log文件名
base_path = os.path.dirname(os.path.abspath(__file__)) # 当前文件路径
log_path = base_path + '/../logs/' # log文件路径
file_name = datetime.datetime.now().strftime("%y-%m-%d %H:%M") + '.log' #以时间命名文件名
log_name = log_path + file_name # log文件名 # 将日志写入磁盘
self.file_handle = logging.FileHandler(log_name,'a',encoding='utf-8')
self.file_handle.setLevel(logging.DEBUG)
"""
设置日志格式
%(asctime)s 日志事件发生的时间
%(filename)s pathname的文件名部分,包含文件后缀
%(funcName)s 调用日志记录函数的函数名
%(levelname)s 该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
%(message)s 日志记录的文本内容
"""
file_formatter = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(levelname)s - %(message)s')
self.file_handle.setFormatter(file_formatter)
# 给logger添加handler
self.logger.addHandler(self.file_handle) def get_log(self):
return self.logger # 关闭handle
def close_handle(self):
self.logger.removeHandler(self.file_handle)
self.file_handle.close()

进行简单的封装

对于封装的可以进行简单的验证

在执行时添加打印message即可,如下

 if __name__ == '__main__':
AutoTest = AutoTestLog()
log = AutoTest.get_log()
log.debug('test')
AutoTest.close_handle()

将封装的日志文件进行使用

将上面封装的函数导入case文件,然后将生成的日志文件单独存放,进行统一管理

以百度首页跳转链接case为例

 from auto_learning.log.AutoTestLog import AutoTestLog
import unittest
from selenium import webdriver
import time class TestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.log = AutoTestLog()
cls.logger = cls.log.get_log() @classmethod
def tearDownClass(cls):
cls.log.close_handle() def setUp(self):
self.logger.info("--start test --")
base_url = 'https://www.baidu.com'
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(10)
self.driver.get(base_url) def tearDown(self):
self.driver.close()
self.driver.quit()
self.logger.info("--test end--") def test_baidu_news(self):
u"""百度新闻"""
driver = self.driver
driver.find_element_by_link_text('新闻').click()
time.sleep(1)
self.assertIn(driver.title, u'百度新闻——全球最大的中文新闻平台') def test_baidu_hao123(self):
u"""hao123"""
driver = self.driver
driver.find_element_by_link_text('hao123').click()
time.sleep(1)
self.assertEqual(driver.title, u'hao123_上网从这里开始') def test_baidu_tieba(self):
u"""百度贴吧"""
driver = self.driver
driver.find_element_by_link_text('贴吧').click()
time.sleep(1)
# 错误的断言
self.assertTrue(driver.find_element_by_link_text('全吧搜索+1')) if __name__ == '__main__':
unittest.main()

运行后生成的log文件

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

最新文章

  1. 30分钟学会反向Ajax
  2. jquery插件之拖拽
  3. E2 2014.5.8 更新日志
  4. python获取文件时间
  5. HDU Destroy Transportation system(有上下界的可行流)
  6. 新版本ubuntu13.10软件安装
  7. Oracle start with.connect by prior子句实现递归查询
  8. mysql数据库操作语句大全
  9. JavaScript权威指南学习笔记5
  10. log4j.properties配置说明
  11. jquery实时获取时间
  12. Arduino IDE for ESP8266 项目(3)创建AP+STA
  13. 机器学习 - 开发环境安装pycharm + pyspark + spark集成篇
  14. 灯光探测器LightProbe[Unity]
  15. python3中的mysql数据库操作
  16. JVM内存模型以及垃圾回收
  17. SQL Server 查询分析器键盘快捷方式
  18. 线程池(Linux实现)
  19. Android开发之自己定义TabHost文字及背景(源码分享)
  20. go——切片

热门文章

  1. netty之NioEventLoopGroup源码分析二
  2. HTML 练习显示隐藏
  3. IIS网站部署后,程序常见错误记录
  4. 【English】20190428
  5. Dubbo 支持哪些序列化协议?
  6. spring集成shiro登陆流程(上)
  7. PHP全栈学习笔记15
  8. Python + PyQt5 实现美剧爬虫可视工具
  9. ToastCustom【自定义显示风格的Toast】
  10. ReentrantLock是如何基于AQS实现的