# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName:   test66
# FileName:      __init__.py
# Author:       lao_zhao
# Datetime:     2025/5/9 11:10
# Description:
# 
# ---------------------------------------------------------------------------
import functools
import logging
import os
import time


def __loger(file_path):
    # 获取Logger对象
    logger = logging.getLogger()
    # 设置日志写入文件中的级别
    logger.level = logging.INFO
    # 创建日志文件的handler
    handler = logging.FileHandler(file_path, mode="a", encoding="utf-8")
    # 设置日志在文件中的写入格式
    formatter = logging.Formatter('时间：%(asctime)s - 日记级别：%(levelname)s, 日志信息：%(message)s')
    # 设置日志文件的日志格式
    handler.setFormatter(formatter)
    # 给Logger对象添加日志文件的handler
    logger.addHandler(handler)
    return logger

# 获取日志存放的目录
log_dir = os.path.join(os.path.join(os.path.dirname(__file__), "report"), "log")
# 设置日志文件的名称
log_name = "BPMAPITest" + time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) + ".log"
# 日志文件拼接路径
log_path = os.path.join(log_dir, log_name)

__log = __loger(log_path)

# 定义日志的装饰器
def log_decorator(param):
    # param使用被装饰对象的名称
    @functools.wraps(param)
    def inner(*args, **kwargs):
        __log.info(
            f"执行的功能为：{param.__name__}, 功能的描述为：{param.__doc__}, 所在的文件为：{param.__code__.co_filename}, 所在的行为：{param.__code__.co_firstlineno}")
        try:
            res = param(*args, **kwargs)
        except Exception as e:
            __log.error(
                f"执行的功能为：{param.__name__}, 功能的描述为：{param.__doc__}, 所在的文件为：{param.__code__.co_filename}, 所在的行为：{param.__code__.co_firstlineno}.报错，错误为：{type(e)}, 错误的描述为：{e}")
            raise e
        else:
            return res
    return inner



"""
    失败重跑的插件：pip install pytest-rerunfailures
"""

"""
    pytest生成报告：
        1：使用pytest插件：pytest-html生成报告
             pip install pytest-html
            
            生成报告的命令为：
                pytest -vv 用例层名称 --html=报告存放的路径 --self-contained-html [--reruns 失败重跑的次数 --reruns-delay=每次失败重跑的间隔时间]
        
        2: 使用allure生成测试报告
            需要下载allure-pytest插件：pip install allure-pytest
            a: 需要先生成测试结果的json文件
                pytest 用例层名称 --alluredir=存放json文件的目录 --clean-alluredir
            b：根据第一步的json文件生成测试报告
                allure serve 第一步存放json文件的目录：生成测试报告的web服务
                allure generate 第一步存放json文件的目录 -o 静态报告的存放目录: 生成静态报告
"""