1.Logging日志器生成
# 日志: 日记 记录作用
# 日志作用:系统运行信息
# 学习日志
# 几个组件
# loggers:日志器 程序的入口 别的文件想要调用就用日志器
# handlers处理器:日志信息 输出到你想要的位置 控制台处理器 文本文件处理器
# formatter格式器:处理日志格式 格式比较好看
# filter过滤器
# 日志级别:
# 1.debug级别: 调试级别 1 10
# 2.info级别: 正常级别 2 20
# 3.warning警告: 有问题但不影响程序运行 3
# 4.error级别: 错误的 4
# 5.critical:严重的 程序崩溃 5
# 输出日志信息
import logging
def test_log():
# 设置日志级别 默认级别 warning警告
fmt = '%(asctime)s %(filename)s %(funcName)s %(levelname)s %(message)s'
logging.basicConfig(level = logging.INFO,format = fmt,filename='log.txt')
return logging
log = test_log()
log.info('aaaaaa')
# 打印日志信息
# try..except 你用info调用的日志信息就是打印正常的日志信息
# 你用error调用的日志信息就是错误的日志信息
# logging.debug('调试的日志信息')
# logging.info('正常日志信息')
# logging.warning('警告的日志信息')
# logging.error('错误的日志信息')
# logging.critical('严重的日志信息')
# 日志信息很像print
# 用日志信息可以自己设置格式,可以保存到文本文件
# 什么时间生成的日志 在哪个文件生成的日志 在哪个函数生成的日志
# basicConfig 生成日志文件很简单
# 有缺点:控制台,日志信息保存在文件中后,会显示在文本里面控制台里面就没有。不会同时存在
# 中文会乱码,需要到basicConfig的底层去修改utf-8
# 没怎么用,自己封装下日志
2.ini文件
[loggers]
keys = root
[handlers]
keys = fh,sh
[formatters]
keys = simpleFormatter
;具体应用 日志器里面有日志信息,设置日志级别 设置显示在哪里
[logger_root]
level = INFO
handlers = fh,sh
;控制台处理器 创建控制台处理器设置格式
[handler_sh]
class=StreamHandler
formatter=simpleFormatter
;文本处理器 创建具体的文本处理器 设置格式
[handler_fh]
class=FileHandler
formatter=simpleFormatter
args=('log2.txt','a','utf-8')
;创建具体的格式
[formatter_simpleFormatter]
format = '%(asctime)s %(filename)s %(funcName)s %(levelname)s %(message)s'
3.Logging日志配置应用
# webdriver用日志信息
import time
# from selenium import webdriver
from class16.demo1 import test_log
# log = test_log()
from class16.demo2 import test_log2
# a = test_log2()
import logging.config
# ini文件调用
logging.config.fileConfig('log.ini')
a=logging.getLogger()
class BasePage:
# driver = webdriver.Chrome()
def __init__(self,driver):
self.driver = driver
def open(self,txt):
# log.info()
try:
a.info(f'访问{txt}')
self.driver.get(txt)
except Exception as e:
a.error('没有访问到网址')
def locator(self,name,value):
return self.driver.find_element(name,value)
# 想要把输入的操作记录下来 调用info或者error
# 不可能每次都记录正确的,错误了 用error
# 用日志 先拿到你封装的日志, 再用info或者error调用
# 用不用日志取决于自己 想把这个步骤记录下来 就像print一样
# 登录流程
# try:
# 输入账户名 输入密码 登录
# log.info()
# except:
# log.error()
def on_input(self,name,value,txt):
try:
# log.info(f'通过{name}{value}输入{txt}')
a.info(f'通过{name}{value}输入{txt}')
self.locator(name,value).send_keys(txt)
except Exception as e:
# log.error('输入错误了%s'%e)
a.error('输入错误了%s'%e)
def on_click(self,name,value):
# log.info(f'通过{name}{value}进行点击')
a.info(f'通过{name}{value}进行点击')
self.locator(name, value).click()
def wait(self):
time.sleep(3)
def close(self):
self.driver.quit()
4.日志器封装
# loggers:日志器 程序的入口 别的文件想要调用就用日志器
# handlers处理器:日志信息 输出到你想要的位置 控制台处理器 文本文件处理器
# formatter格式器:处理日志格式 格式比较好看
# filter过滤器
# 两种封装 一个是basicConfig,一个是自己封装的
# 意思:使日志信息 格式是我们想要的,日志能保存在控制台 能保存在文本文件
import logging
def test_log2():
# 创建日志器 这个日志器就写入了日志信息
logger = logging.getLogger('root')
# 显示日志信息全面 设置日志级别
logger.setLevel(logging.INFO)
# 日志信息显示在控制台 你不加这句话
if not logger.handlers:
# 需要控制台处理器
sh = logging.StreamHandler()
# 日志信息放入控制台中
logger.addHandler(sh)
# 保存在文件中 文件处理器
fh = logging.FileHandler('log1.txt',encoding = 'utf-8')
logger.addHandler(fh)
# 日志比较丑,设置格式 创建格式器
fmt = '%(asctime)s %(filename)s %(funcName)s %(levelname)s %(message)s'
formatter1 = logging.Formatter(fmt)
# 给谁加格式
# 给控制台加格式
sh.setFormatter(formatter1)
fh.setFormatter(formatter1)
return logger
# 要用的时候才调用info 封装一下
# logger.debug('调试的日志信息')
# logger.info('正常日志信息')
# logger.warning('警告的日志信息')
# logger.error('错误的日志信息')
# logger.critical('严重的日志信息')
# 封装日志 有三种方式 1.basicConfig 2.自定义函数封装 3.ini文件封装
# 使用的话 拿到封装文件.info()或者拿到封装文件.error
# 这种方式用的多
# 重要 重要 项目 加上日志 不重要 封装一次 后续只要使用即可
# 我们还是要会
# 再有一个不用你们封装的日志 直接拿来用的日志
5.Logging日志装饰器应用——luckylog
# 1.安装pip install luckylog 导包
# 2.给一个路径 日志信息放在哪个文件的路径
# 3.把哪些信息保存在luckylog.txt文件里面
# 4.设置错误的路径
import time
# from selenium import webdriver
from luckylog.luckylog import Logger,logger
from luckylog import luckylog
# 正确的日志信息
luckylog.path='logSuccess.txt'
luckylog.module = 'success'
# 错误的日志信息
luckylog.debug_file='logError.txt'
#想要日志信息更加的详细
luckylog.Debug = True
class BasePage:
# driver = webdriver.Chrome()
def __init__(self,driver):
self.driver = driver
@logger(success='成功打开网址',fail = '失败网址')
def open(self,txt):
self.driver.get(txt)
def locator(self,name,value):
return self.driver.find_element(name,value)
# 想要把输入的操作记录下来 调用info或者error
# 不可能每次都记录正确的,错误了 用error
# 用日志 先拿到你封装的日志, 再用info或者error调用
# 用不用日志取决于自己 想把这个步骤记录下来 就像print一样
# 登录流程
# try:
# 输入账户名 输入密码 登录
# log.info()
# except:
# log.error()
@logger(success='成功输入内容',fail='失败输入内容')
def on_input(self,name,value,txt):
self.locator(name,value).send_keys(txt)
@logger(success='成功点击', fail='失败点击')
def on_click(self,name,value):
self.locator(name, value).click()
def wait(self):
time.sleep(3)
def close(self):
self.driver.quit()
6.调用
from selenium import webdriver
# from class16.base import BasePage
from class16.base1 import BasePage
a = BasePage(webdriver.Chrome())
a.open('http://www.baidu.com')
a.on_input('id','kw','秋水')
a.wait()
a.on_click('id','su')
a.wait()
a.close()
# 小的项目 记录每一步操作 日志去记录
# 用 日志怎么用?
# 日志信息 记录每一步操作
# 打开了浏览器
# 访问了百度
# 输入了秋水
# 点击了搜索按钮
# 关闭