Table of Contents
Web 自动化测试课程
第 6 章 - 日志收集
日志相关概念
日志的基本用法
日志的高级用法
Web 自动化测试课程
序号
章节
知识点
1
第一章 Web 自动化入门
1. 认识自动化及自动化测试
2. 自动化测试工具选择
3. 环境搭建
2
第二章 Selenium-API 操作
1. 元素定位方式
2. 元素和浏览器的操作方法
3. 鼠标和键盘操作
4. 元素等待
5. HTML 特殊元素处理
6. 窗口截图
7. 验证码处理
3
第三章 UnitTest 框架
1. UnitTest 基本使用
2. UnitTest 断言
3. 参数化
4. 生成 HTML 测试报告
4
第四章 PO 模式
1. 方法封装
2. PO 模式介绍
3. PO 模式实战
5
第五章 数据驱动
1. JSON 读写
2. 数据驱动介绍
3. 数据驱动实战
6
第六章 日志收集
1. 日志相关概念
2. 日志的基本方法
3. 日志的高级方法
7
第七章 项目实战
1. 自动化测试流程
2. 项目实战演练
课程目标
1. 掌握使用 Selenium 进行 Web 自动化测试的流程和方法,并且能够完成自动化测试脚本的编写。
2. 掌握如何通过 UnitTest 管理用例脚本,并生成 HTML 测试报告。
3. 掌握使用 PO 模式来设计自动化测试代码的架构。
4. 掌握使用数据驱动来实现自动化测试代码和测试数据的分离。
5. 掌握使用 logging 来实现日志的收集。
6- 日志收集
目标
1. 理解日志的相关概念
2. 掌握日志的基本用法
3. 掌握日志的高级用法
日志相关概念
目标
1. 了解日志的概念
2. 理解日志的作用
3. 掌握常见的日志级别
1. 日志
概念:日志就是用于记录系统运行时的信息,对一个事件的记录;也称为 Log 。
1.1 日志的作用
- 调试程序
- 了解系统程序运行的情况,是否正常
- 系统程序运行故障分析与问题定位
- 用来做用户行为分析和数据统计
1.2 日志级别
思考:是否系统记录的所有日志信息的重要性都一样?
日志级别:是指日志信息的优先级、重要性或者严重程度
常见的日志级别
日志级别
描述
DEBUG
调试级别,打印非常详细的日志信息,通常用于对代码的调试
INFO
信息级别,打印一般的日志信息,突出强调程序的运行过程
WARNING
警告级别,打印警告日志信息,表明会出现潜在错误的情形,一般不影响软件的正常使用
ERROR
错误级别,打印错误异常信息,该级别的错误可能会导致系统的一些功能无法正常使用
CRITICAL
严重错误级别,一个严重的错误,这表明系统可能无法继续运行
说明
上面列表中的日志级别是从上到下依次升高的,即: DEBUG < INFO < WARNING < ERROR < CRITICAL ;
当为程序指定一个日志级别后,程序会记录所有日志级别大于或等于指定日志级别的日志信息,而不是仅仅记
录指定级别的日志信息;
一般建议只使用 DEBUG 、 INFO 、 WARNING 、 ERROR 这四个级别
日志的基本用法
目标
1. 掌握如何设置日志级别
2. 掌握如何设置日志格式
3. 掌握如何将日志信息输出到文件中
1. logging 模块
Python 中有一个标准库模块 logging 可以直接记录日志
1.1 基本用法
import logging
logging.debug( " 这是一条调试信息 " )
logging.info( " 这是一条普通信息 " )
logging.warning( " 这是一条警告信息 " )
logging.error( " 这是一条错误信息 " )
logging.critical( " 这是一条严重错误信息 " )
1.1 设置日志级别
logging 中默认的日志级别为 WARNING ,程序中大于等于该级别的日志才能输出,小于该级别的日志不会被打印出
来。
设置日志级别
logging.basicConfig(level=logging.DEBUG)
如何选择日志级别
在开发环境和测试环境中,为了尽可能详细的查看程序的运行状态来保证上线后的稳定性,可以使用 DEBUG
或 INFO 级别的日志获取详细的日志信息,这是非常耗费机器性能的。
在生产环境中,通常只记录程序的异常信息、错误信息等(设置成 WARNING 或 ERROR 级别),这样既可以
减小服务器的 I/O 压力,也可以提高获取错误日志信息的效率和方便问题的排查。
1.2 设置日志格式
默认的日志的格式为:
日志级别 :Logger 名称 : 日志内容
自定义日志格式:
logging.basicConfig(format= "%(levelname)s:%(name)s:%(message)s" )
format 参数中可能用到的格式化信息:
占位符
描述
%(name)s
Logger 的名字
%(levelno)s
数字形式的日志级别
%(levelname)s
文本形式的日志级别
%(pathname)s
调用日志输出函数的模块的完整路径名,可能没有
%(filename)s
调用日志输出函数的模块的文件名
%(module)s
调用日志输出函数的模块名
%(funcName)s
调用日志输出函数的函数名
%(lineno)d
调用日志输出函数的语句所在的代码行
%(created)f
当前时间,用 UNIX 标准的表示时间的浮 点数表示
%(relativeCreated)d
输出日志信息时的,自 Logger 创建以来的毫秒数
%(asctime)s
字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”
%(thread)d
线程 ID 。可能没有
%(threadName)s
线程名。可能没有
%(process)d
进程 ID 。可能没有
%(message)s
用户输出的消息
示例代码:
import logging
fmt = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'
logging.basicConfig(level=logging.INFO, format=fmt)
logging.debug( " 调试 " )
logging.info( " 信息 " )
logging.warning( " 警告 " )
logging.error( " 错误 " )
1.3 将日志信息输出到文件中
默认情况下 Python 的 logging 模块将日志打印到了标准输出中(控制台)
将日志信息输出到文件中:
logging.basicConfig(filename= "a.log" )
示例代码:
import logging
fmt = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'
logging.basicConfig(filename= "a.log" , level=logging.INFO, format=fmt)
logging.debug( " 调试 " )
logging.info( " 信息 " )
logging.warning( " 警告 " )
logging.error( " 错误 " )
日志的高级用法
目标
1. 了解 logging 日志模块四大组件
2. 掌握如何讲日志输出到多个 Handler 中
思考:
1. 如何将日志信息同时输出到控制台和日志文件中?
2. 如何将不同级别的日志输出到不同的日志文件中?
3. 如何解决日志文件过大的问题?
1. logging 日志模块四大组件
组件名称
类名
功能描述
日志器
Logger
提供了程序使用日志的入口
处理器
Handler
将 logger 创建的日志记录发送到合适的目的输出
格式器
Formatter
决定日志记录的最终输出格式
过滤器
Filter
提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录
logging 模块就是通过这些组件来完成日志处理的
1.1 组件之间的关系
日志器( logger )需要通过处理器( handler )将日志信息输出到目标位置,如:文件、 sys.stdout 、网络等;
不同的处理器( handler )可以将日志输出到不同的位置;
日志器( logger )可以设置多个处理器( handler )将同一条日志记录输出到不同的位置;
每个处理器( handler )都可以设置自己的格式器( formatter )实现同一条日志以不同的格式输出到不同的地
方。
每个处理器( handler )都可以设置自己的过滤器( filter )实现日志过滤,从而只保留感兴趣的日志;
简单点说就是:日志器( logger )是入口,真正干活儿的是处理器( handler ),处理器( handler )还可以通过过
滤器( filter )和格式器( formatter )对要输出的日志内容做过滤和格式化等处理操作。
1.2 Logger
Logger 对象的任务:
向程序暴露记录日志的方法
基于日志级别或 Filter 对象来决定要对哪些日志进行后续处理
将日志消息传送给所有感兴趣的日志 handlers
如何创建Logger对象
logger = logging.getLogger()
logger = logging.getLogger( "myLogger" )
logging.getLogger() 方法有一个可选参数 name ,该参数表示将要返回的日志器的名称标识,如果不提供该参数,则
返回 root 日志器对象。 若以相同的 name 参数值多次调用 getLogger() 方法,将会返回指向同一个 logger 对象的引
用。
Logger 常用的方法
方法
描述
logger.debug()
logger.info()
logger.warning()
logger.error()
logger.critical()
打印日志
logger.setLevel()
设置日志器将会处理的日志消息的最低严重级别
logger.addHandler()
为该 logger 对象添加一个 handler 对象
logger.addFilter()
为该 logger 对象添加一个 filter 对象
1.3 Handler
Handler 对象的作用是将消息分发到 handler 指定的位置,比如:控制台、文件、网络、邮件等。 Logger 对象可以
通过 addHandler() 方法为自己添加多个 handler 对象。
如何创建 Handler 对象
在程序中不应该直接实例化和使用 Handler 实例,因为 Handler 是一个基类,它只定义了 Handler 应该有的接口。 应
该使用 Handler 实现类来创建对象, logging 中内置的常用的 Handler 包括:
Handler
描述
logging.StreamHandler
将日志消息发送到输出到 Stream ,如 std.out, std.err 或任何
file-like 对象。
logging.FileHandler
将日志消息发送到磁盘文件,默认情况下文件大小会无限增
logging.handlers.RotatingFileHandler
将日志消息发送到磁盘文件,并支持日志文件按大小切割
logging.hanlders.TimedRotatingFileHandler
将日志消息发送到磁盘文件,并支持日志文件按时间切割
logging.handlers.HTTPHandler
将日志消息以 GET 或 POST 的方式发送给一个 HTTP 服务器
logging.handlers.SMTPHandler
将日志消息发送给一个指定的 email 地址
Handler 常用的方法
方法
描述
handler.setLevel()
设置 handler 将会处理的日志消息的最低严重级别
handler.setFormatter()
为 handler 设置一个格式器对象
handler.addFilter()
为 handler 添加一个过滤器对象
1.4 Formatter
Formatter 对象用于配置日志信息的格式。
如何创建 Formatter 对象
formatter = logging.Formatter(fmt=None, datefmt=None, style='%')
fmt :指定消息格式化字符串,如果不指定该参数则默认使用 message 的原始值
datefmt :指定日期格式字符串,如果不指定该参数则默认使用 "%Y-%m-%d %H:%M:%S"
style : Python 3.2 新增的参数,可取值为 '%', '{' 和 '$' ,如果不指定该参数则默认使用 '%'
2. 将日志信息同时输出到控制台和文件中
实现步骤分析
1. 创建日志器对象
2. 创建控制台处理器对象
3. 创建文件处理器对象
4. 创建格式化器对象
5. 把格式化器添加到处理器中
6. 把处理器添加到日志器中
定义日志格式
fmt = '%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'
formatter = logging.Formatter(fmt)
把日志输出到控制台
logger = logging.getLogger()
sh = logging.StreamHandler()
sh.setFormatter(formatter)
logger.addHandler(sh)
把日志输出到文件中
fh = logging.FileHandler( "./b.log" )
fh.setFormatter(formatter)
logger.addHandler(fh)
3. 每日生成一个日志文件
定义 Handler 对象
fh = logging.handlers.TimedRotatingFileHandler(filename, when= 'h' , interval= 1 , backupCount= 0 )
将日志信息记录到文件中,以特定的时间间隔切换日志文件。
filename: 日志文件名
when: 时间单位,可选参数
S - Seconds
M - Minutes
H - Hours
D - Days
midnight - roll over at midnight
W{ 0-6 } - roll over on a certain day; 0 - Monday
interval: 时间间隔
backupCount: 日志文件备份数量。如果 backupCount 大于 0 ,那么当生成新的日志文件时,
将只保留 backupCount 个文件,删除最老的文件。
示例代码:
import logging.handlers
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# 日志格式
fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
formatter = logging.Formatter(fmt)
# 输出到文件,每日一个文件
fh = logging.handlers.TimedRotatingFileHandler( "./a.log" , when= 'MIDNIGHT' , interval= 1 , backupCount= 3 )
fh.setFormatter(formatter)
fh.setLevel(logging.INFO)
logger.addHandler(fh)

Web自动化测试06相关推荐

  1. 电商网站Web自动化测试实战( 编写京东搜索脚本python+selenium框架)

    电商网站Web自动化测试实战( 编写京东搜索脚本) 1,打开京东页 京东首页地址:https://www.jd.com/,故进入京东首页如下: 2,打开浏览器开发者模式 定位元素前需先打开浏览器开发者 ...

  2. 开源 软件测试自动化工具,开源Web自动化测试工具Selenium IDE

    Selenium IDE(也有简写SIDE的)是一款开源的Web自动化测试工具,支持测试用例的录制与回放. 只要在浏览器里装一下插件,就可以开始使用,简直是"开箱即用".我们相信测 ...

  3. 基于python的界面自动化测试-基于Selenium+Python的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  4. web自动化测试---概述

    最早的时候是做功能测试,web都是自己手工点击看看有没问题,没有系统的进行测试,更别说自动化测试了,那是一段不堪回首的往事,就是因为这,很多问题都流出去了,这是作为测试人员的一大失职,痛定思痛,开始学 ...

  5. web python 自动化是什么_Selenium 凭什么成为 Web 自动化测试的首选?(内附源码)...

    原标题:Selenium 凭什么成为 Web 自动化测试的首选?(内附源码) 自动化 · 工具 1.QTP QTP是一个商业化的功能测试工具,收费,支持web,桌面自动化测试. 2. Selenium ...

  6. web自动化测试常见面试题

    一.找不到元素可能出现的原因: 1.元素表达式错误 2.不在指定的frame 3.等待时间短,页面加载速度慢 4.执行脚本打开了新的页面,不在指定的窗口中 二.优化web自动化测试效率 避免使用强制等 ...

  7. Web自动化测试理论知识

    Web 自动化理论知识 1.自动化测试概述 概念:用工具代替/辅助人工完成完成软件测试活动的过程 特点:     可以对程序的新版本自动执行回归测试     可以执行一些手工测试困难或不可能进行的测试 ...

  8. docker+selenium web自动化测试环境的部署

    docker+selenium web自动化测试环境的部署 1.使用SecureCRT或Docker Quickstart Terminal打开docker终端. 2.下载selemiunUI测试需要 ...

  9. 使用C#+Edge (Chromium)进行Web自动化测试

    今天看到了VisualStudio中现在已经自带了Web单元测试项目模板,便试了一下,发现还比较好用,它默认的是Selenium实现的,测试组在用Selenium+Python来写过自动化测试,原来它 ...

最新文章

  1. linux sed给空文件首行插入_Linux系统中sed命令在文件某行前后添加内容的用法
  2. 8道Python基础面试练习题
  3. 在SQL2005/SQL2008中CTE用法差异
  4. 巧用PowerShell维护Win2008服务器作业
  5. Icon+启动图尺寸
  6. secp256k1 php,区块链中的数学-secp256k1 签名可锻性以及解决方案
  7. linux系统 安装mysql,在linux系统中安装MySQL
  8. 基于深度学习的植物病害表征新视角
  9. 第一期站立会议2(11.16)
  10. 计算机网络 Kurose 第二章 应用层 2.5 P2P文件分发 2.6 视频流和内容分发网
  11. kali linux 怎么攻击IP,Kali Linux实战篇:Ettercap 使用教程 DNS欺骗攻击实战
  12. kali实现ARP断网
  13. 猜数游戏,随机生成一个1~100的数进行猜测。
  14. MATLAB必看书籍推荐
  15. 手机app 与pc 软件测试区别,1,web测试,Android测试,Ios测试的共同点与
  16. 小窍门解决大问题(绝对值得收藏)
  17. 手机端页面rem自适应脚本
  18. FTP-----局域网内部远程桌面
  19. 外包程序员面试遭HR鄙视,称:外包就是程序员的“职业污点”?
  20. Python数据分析入门与实践

热门文章

  1. web开发技术栈(框架)总结
  2. 配置目标跟踪开源项目traj_gen_vis踩过的坑
  3. 腾讯云身份证信息识别API
  4. SQL*Plus 系统变量之37 - PAU[SE]
  5. ntoskrnl.exe导致Win10蓝屏的解决方案(转载)
  6. 如何查看linux时钟是否同步,Linux系统时钟与同步
  7. ES6 Promise的理解
  8. websphere服务五:导出ear包的几种方法
  9. 关于报表开发Cognos工具的使用与总结
  10. 【Python-word相关转换】