selenium-日志文件的使用(十二)
概述
在自动化测试中,如果测试失败需要对错误的错误的代码或者测试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文件

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

selenium-日志文件的使用(十二)的更多相关文章
- Spark RDD/Core 编程 API入门系列之动手实战和调试Spark文件操作、动手实战操作搜狗日志文件、搜狗日志文件深入实战(二)
1.动手实战和调试Spark文件操作 这里,我以指定executor-memory参数的方式,启动spark-shell. 启动hadoop集群 spark@SparkSingleNode:/usr/ ...
- 文件操作(十二)——open,read,close,write,seek,truncate
open函数 #!/usr/bin/env python #-*- coding:utf8 -*- f = open('xxx','r',encoding='utf-8') data = f.read ...
- Unity3D研究院之IOS&Android收集Log文件(六十二)
开发项目的时候尤其在处理与服务器交互这块,如果服务端程序看不到客户端请求的Log信息,那么无法修改BUG.在Windows上Unity会自动讲Log文件写入本地,但是在IOS和Android上确没有这 ...
- log4j每天,每小时产生一日志文件
log4j每天,每小时产生一日志文件 2016年08月05日 14:14:33 阅读数:6254 一.之前的文章中有log4j的相关配置以及属性的介绍,下面我们先把配置列出来: log4j.roo ...
- 日志文件迁移至OSS
一台服务器在用阿里云ECS,因为穷,磁盘空间有限,服务器日志文件每天都在增长,需要定期清理释放磁盘空间,想到几种解决方案: 写任务定时备份到本地服务器 直接下载到本地用移动硬盘备份 备份到阿里云OSS ...
- 使用logstash的input file filter收集日志文件
使用logstash的input file filter收集日志文件 一.需求 二.实现步骤 1.前置知识 2.编写pipeline文件 3.Input 中 file 插件的部分参数解释: 4.启动l ...
- ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件
应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用. ASP.NET ...
- 第十二篇 Integration Services:高级日志记录
本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...
- Java进阶(五十二)利用LOG4J生成服务日志
Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...
随机推荐
- arcgis api 4.x for js 离线部署
在我的GIS之家群里,经常遇到 webgis 开发新手们提问 arcgis api for js 如何本地离线部署,而不是直接调用在线的,因为在线模式依赖互联网以及网速环境因素,受到的限制影响比较大. ...
- 了解git的命令行使用
git现在已经是非常大众的版本管理工具了,如果在windows下用vs这种ide,已经可以很简单的点点鼠标就完成大部分工作了. 但是在某些特殊情况用命令行时,还是需要了解很多命令的. 安装 linux ...
- 重庆3Shape TRIOS都有哪些功能
1.高质量的临床结果高准确度的数字化印模确保高质量的修复体密合度即时制备和印模确认就位修复体时无需多次调整和研磨2.轻松取模无需喷粉扫描无需印模材料,可保持操作台整洁无需重复取模3.更稳健的业务联系加 ...
- windows设置照片查看器为默认的照片查看软件
复制一下内容到记事本中: 文件名:PotoView.bat 文件内容: @echo off set reg_dir=hklm\SOFTWARE\Microsoft\Windows Photo View ...
- Php如何返回json数据,前后端分离的基本解决方案
php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...
- 八问WebSocket协议:为你快速解答WebSocket热门疑问
一.引言 WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持.它使用方面.应用广泛,已经渗透到前后端开发的各种场景中. 对http一问一答 ...
- Java核心技术第五章——1.类、超类、子类(1)
1.定义子类: 关键字extends表明正在构造的新类派生与一个已存在的类.已存在的类称为超类.基类或父类:新类称为子类.派生类或孩子类.超类和子类是Java程序员最常用的两个术语(emmm~~我觉得 ...
- 6. VIM 系列 - 全局搜索(ctrlsf.vim)
目录 全局搜索利器 ag.vim 更强大的全局搜索利器 ctrlsf.vim 全局搜索利器 ag.vim 终端上安装ag: sudo apt install silversearcher-ag vim ...
- DataIntegrityViolationException
今天出现了这个问题: org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch upd ...
- 【重学计算机】计组D2章:数据表示
1.基本概念 真值:+0101,-0100:机器数: [x]原=0101 2.几种机器数 原码:x = -0101,[x]原 = 1101 反码:x = -0101,[x]反 = 1010 补码:x ...