# %(asctime)s 字符串形式的当前时间。
# %(levelname)s 文本形式的日志级别
# %(name)s Logger的名字
# %(filename)s 调用日志输出函数的模块的文件名
# %(funcName)s 调用日志输出函数的函数名
# %(lineno)d 调用日志输出函数的语句所在的代码行
# %(message)s 用户输出的消息
#导包
import logging
#定义获取logging函数
def get_logging():
# 自定义日志格式:
fm = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s'"
# 设置日志级别level=logging.DEBUG
# 将日志信息输出到文件中:filename
logging.basicConfig(level=logging.DEBUG,filename="../log/log1.log",format=fm)
return logging
logging日志模块四大组件
Logger (日志器)
:提供了程序使用日志的入口
:提供了程序使用日志的入口
Handler (处理器
):将
logger
创建的日志记录发送到合适的目的输出
):将
logger
创建的日志记录发送到合适的目的输出
Formatter( 格式器
):决定日志记录的最终输出格式
):决定日志记录的最终输出格式
Filter (过滤器
):提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录
):提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录
Logger常用方法
1.打印日志 : logger.debug() 、logger.info() 、logger.warning() 、logger.error() 、logger.critical()
2.logger.setLevel() :设置日志器将会处理的日志消息的最低严重级别
3.logger.addHandler() :为该logger对象添加一个handler对象
4.logger.addFilter() :为该logger对象添加一个filter对象
Handler处理器 类型:
1. 控制台处理器 StreamHandler()
2. 文件处理器 fileHandler()
3. 根据大小切割 RotatingFileHandler()
4. 根据时间切割 TimedRotatingFileHandler()
import logging
import logging.handlers
# 获取logger
logger = logging.getLogger()
# 修改名称
logger = logging.getLogger("user")
# 设置级别
logger.setLevel(logging.INFO)
# 获取控制台 处理器
sh = logging.StreamHandler()
# 或取文件处理器
# 根据时间切割
# when:时间单位
# interval: 时间间隔
# backupcount: 保留的备份数量
th = logging.handlers.TimedRotatingFileHandler(filename="../log/logtime.log", when="S", interval=1, backupCount=3)
# 设置处理器级别,只有error级别才能输入文件
th.setLevel(logging.ERROR)
# 添加格式器
fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
fm = logging.Formatter(fmt)
# 将格式器 添加到处理器中
sh.setFormatter(fm)
th.setFormatter(fm)
# 将处理器添加到logger
logger.addHandler(sh)
logger.addHandler(th)
# 输入信息
logger.debug("debug..")
logger.info("info..")
logger.warning("warning....")
logger.error("err....")
封装
# 导包
import logging.handlers
class GetLogger:
logger = None
@classmethod
def get_logger(cls):
#判断是否为空
if cls.logger is None:
# 获取日志器
cls.logger = logging.getLogger()
# 设置日志器级别
cls.logger.setLevel(logging.INFO)
# 获取控制台 处理器
sh = logging.StreamHandler()
# 获取文件 处理器
th = logging.handlers.TimedRotatingFileHandler(filename="../log/logtime.log", when='midnight', interval=1,
backupCount=30, encoding='utf-8')
# 设置格式器
fmt = "%(asctime)s %(levelname)s [%(name)s] [%(filename)s (%(funcName)s:%(lineno)d] - %(message)s"
fm = logging.Formatter(fmt)
# 将格式器添加到处理器中
sh.setFormatter(fm)
th.setFormatter(fm)
# 将处理器添加到 日志器
cls.logger.addHandler(th)
cls.logger.addHandler(sh)
return cls.logger
调用
import time
import unittest
from time import sleep
from parameterized import parameterized
from selenium import webdriver
from selenium.webdriver.common.by import By
from day07.cal.tool.fz_log import GetLogger
logger = GetLogger().get_logger()
class TestCalc(unittest.TestCase):
driver = None
@classmethod
def setUpClass(cls):
logger.info("正在初始化driver...")
# 实例化浏览器
cls.driver = webdriver.Chrome()
# 打开浏览器
url = 'http://cal.apple886.com/'
cls.driver.get(url)
cls.driver.maximize_window()
@classmethod
def tearDownClass(cls):
logger.info("正在关闭driver...")
# 关闭
cls.driver.quit()
cls.driver = None
# 加法
def test_Add(self, num1=20, num2=10, expect=30):
logger.info("正在遍历传进来的第一个数字...")
# 遍历传进来的数字,并强制转换为字符串
# 第一个数
for n in str(num1):
# 拆开单个按钮的定位方式
logger.info("正在点击数字:{}".format(n))
self.driver.find_element(By.CSS_SELECTOR, "#simple{}".format(n)).click()
logger.info("正在点击加法按钮...")
# 点击加法按钮
self.driver.find_element(By.CSS_SELECTOR, "#simpleAdd").click()
logger.info("正在遍历传进来的第二个数字...")
# 第二个数
for n in str(num2):
# 拆开单个按钮的定位方式
logger.info("正在点击数字:{}".format(n))
self.driver.find_element(By.CSS_SELECTOR, "#simple{}".format(n)).click()
logger.info("正在点击等号按钮...")
# 点击等号
self.driver.find_element(By.CSS_SELECTOR, "#simpleEqual").click()
logger.info("正在获取结果...")
# 获取结果
result = self.driver.find_element(By.CSS_SELECTOR, "#resultIpt").get_attribute("value")
print("实际结果:{},预期结果:{}".format(result, expect))
try:
logger.info("正在断言...")
# 断言
self.assertEqual(result, str(expect))
except AssertionError:
logger.info("正在截图...")
# 如果实际结果不等于预期结果 截图
self.driver.get_screenshot_as_file('./{}.png'.format(time.strftime("%Y_%m_%d %H_%M_%S")))
结果
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/48778.html