概述

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

  1. Spark RDD/Core 编程 API入门系列之动手实战和调试Spark文件操作、动手实战操作搜狗日志文件、搜狗日志文件深入实战(二)

    1.动手实战和调试Spark文件操作 这里,我以指定executor-memory参数的方式,启动spark-shell. 启动hadoop集群 spark@SparkSingleNode:/usr/ ...

  2. 文件操作(十二)——open,read,close,write,seek,truncate

    open函数 #!/usr/bin/env python #-*- coding:utf8 -*- f = open('xxx','r',encoding='utf-8') data = f.read ...

  3. Unity3D研究院之IOS&Android收集Log文件(六十二)

    开发项目的时候尤其在处理与服务器交互这块,如果服务端程序看不到客户端请求的Log信息,那么无法修改BUG.在Windows上Unity会自动讲Log文件写入本地,但是在IOS和Android上确没有这 ...

  4. log4j每天,每小时产生一日志文件

    log4j每天,每小时产生一日志文件 2016年08月05日 14:14:33 阅读数:6254 一.之前的文章中有log4j的相关配置以及属性的介绍,下面我们先把配置列出来:   log4j.roo ...

  5. 日志文件迁移至OSS

    一台服务器在用阿里云ECS,因为穷,磁盘空间有限,服务器日志文件每天都在增长,需要定期清理释放磁盘空间,想到几种解决方案: 写任务定时备份到本地服务器 直接下载到本地用移动硬盘备份 备份到阿里云OSS ...

  6. 使用logstash的input file filter收集日志文件

    使用logstash的input file filter收集日志文件 一.需求 二.实现步骤 1.前置知识 2.编写pipeline文件 3.Input 中 file 插件的部分参数解释: 4.启动l ...

  7. ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件

    应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用. ASP.NET ...

  8. 第十二篇 Integration Services:高级日志记录

    本篇文章是Integration Services系列的第十二篇,详细内容请参考原文. 简介在前一篇文章我们配置了SSIS内置日志记录,演示了简单和高级日志配置,保存并查看日志配置,生成自定义日志消息 ...

  9. Java进阶(五十二)利用LOG4J生成服务日志

    Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...

随机推荐

  1. 基于Vue2-Calendar改进的日历组件(含中文使用说明)

    一,前言 我是刚学Vue的菜鸟,在使用过程中需要用到日历控件,由于项目中原来是用jQuery写的,因此用了bootstarp的日历控件,但是配合Vue实在有点蛋疼,不够优雅…… 于是网上搜了好久找到了 ...

  2. ArcGIS API for JavaScript 4.9 & 3.26 发布与新特性

    应该是中文首发?我只想说:更新太TMD快了 QAQ Part I -- JsAPI 4.9 主题1:在2D中默认启用WebGL渲染 在要素图层.CSV图层.流图层中是使用WebGL渲染的,这个任务由M ...

  3. linux、shell一些操作指令

    1.cd $(dirname $0)   shell脚本里面添加这个命令就可以进入此sh目录下,不用写绝对路径 2.strMac=`ifconfig eth0 | grep "HWaddr& ...

  4. Docker 创建 Crowd3.3.2 以及打通 Jira Software7.12.3和Confluence6.12.2 SSO 单点登录

    目录 目录 1.介绍 1.1.什么是Crowd? 2.Crowd 的官网在哪里? 3.如何下载安装? 4.对 Crowd 进行配置 4.1.破解 Crowd 第一步 4.2.破解 Crowd 第二步, ...

  5. DataPipeline丨瓜子二手车基于Kafka的结构化数据流

    文 |彭超 瓜子大数据架构师 交流微信 | datapipeline2018 一.为什么选择Kafka   为什么选Kafka?鉴于庞大的数据量,需要将其做成分布式,这时需要将Q里面的数据分到许多机器 ...

  6. Socket深度探索 4 PHP(转)

    [连载] Socket 深度探索 4 PHP (一) [连载] Socket 深度探究 4 PHP (二) [连载] Socket 深度探究 4 PHP (三)

  7. Sql中CHARINDEX用法

    CHARINDEX作用 写SQL语句我们经常需要判断一个字符串中是否包含另一个字符串,但是SQL SERVER中并没有像C#提供了Contains函数,不过SQL SERVER中提供了一个叫CHAEI ...

  8. AMBARI Blueprint 使用文档

    Introduction Notable JIRAs API Resources and Syntax Blueprint Usage Overview Step 0: Prepare Ambari ...

  9. Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译

    前言 本系列教程为pytorch官网文档翻译.本文对应官网地址:https://pytorch.org/tutorials/intermediate/seq2seq_translation_tutor ...

  10. Eureka源码探索(一)-客户端服务端的启动和负载均衡

    1. Eureka源码探索(一)-客户端服务端的启动和负载均衡 1.1. 服务端 1.1.1. 找起始点 目前唯一知道的,就是启动Eureka服务需要添加注解@EnableEurekaServer,但 ...