# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName:   test64
# FileName:      __init__.py
# Author:       lao_zhao
# Datetime:     2024/12/26 10:50
# Description:
# 
# ---------------------------------------------------------------------------
import functools
import logging
import os
import time


"""
    pytest的插件：pytest-html  / allure-pytest
    
            pip install pytest-html
            命令：
                pytest -vv 用例层名称 --html=报告存放的路径 --self-contained-html
                    -vv：执行时显示详细结果
                    --html:报告存放的路径
                    --self-contained-html：生成独立html报告
                    
        pytest-rerunfailures
        
            pytest -vv 用例层名称 --html=报告存放的路径 --self-contained-html --reruns 失败重跑的次数 --reruns-delay 失败重跑的间隔时间
            
    allure-pytest: pip install allure-pytest
    
    allure生成报告的流程：
        1: 使用pytest工具，执行用例，将执行的结果生成json文件。
            pytest 用例层名称 --alluredir=json文件保存的路径 --clean-alluredir
        2: 使用第一步生成的json文件生成测试报告：
            i): 生成本地报告的服务
                allure serve 第一步生成的json文件的保存路径 
            ii): 生成静态报告
                allure generate 第一步生成的json文件的保存路径 -o 静态报告保存的路径
                本地打开静态报告：allure open 静态报告保存的路径
"""




log_path = os.path.join(os.path.join(os.path.join(os.path.dirname(__file__), "report"), "log"), time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime())+".log")


# def pro_log(log_file):
#     # 创建Logger对象
#     logger = logging.getLogger()
#     # 设置日志的级别
#     logger.setLevel("INFO")
#     # 创建日志文件的handler
#     handler = logging.FileHandler(log_file, mode='a', encoding="utf-8")
#     # 设置日志显示的格式
#     formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")
#     # 给日志文件添加日志的格式
#     handler.setFormatter(formatter)
#     # 给Logger对象添加handler
#     logger.addHandler(handler)
#     return logger
#
# log = pro_log(log_path)

def project_log(log_file):
    # 创建Logger对象
    logger = logging.getLogger()
    # 设置日志的级别
    logger.setLevel("INFO")
    # 创建日志文件的handler
    handler = logging.FileHandler(log_file, mode='a', encoding="utf-8")
    # 设置日志显示的格式
    formatter = logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
    # 给日志文件添加日志的格式
    handler.setFormatter(formatter)
    # 给Logger对象添加handler
    logger.addHandler(handler)
    return logger


project_log = project_log(log_path)


def log_decorator(func_name):
    @functools.wraps(func_name)
    def inner(*args, **kwargs):
        try:
            project_log.info(f"执行的功能为：{func_name.__name__}, 功能的描述为：{func_name.__doc__}, 所在的文件路径为：{func_name.__code__.co_filename}, 所做的行为：{func_name.__code__.co_firstlineno}")
            res = func_name(*args, **kwargs)
        except Exception as e:
            project_log.error(f"执行的功能为：{func_name.__name__}, 功能的描述为：{func_name.__doc__}, 所在的文件路径为：{func_name.__code__.co_filename}, 所做的行为：{func_name.__code__.co_firstlineno}, 产生错误，错误的类型为：{type(e)}, 错误的描述为：{e}")
            raise e
        else:
            return res
    return inner