# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName:   test61
# FileName:      __init__.py
# Author:       lao_zhao
# Datetime:     2024/7/12 17:33
# Description:
# 
# ---------------------------------------------------------------------------
import functools
import logging
import os
import time

# from APIAutoTest_v3_1.common.log import get_log
#
# log = get_log()


"""
    pip install pytest-html  用例生成html报告
    
    pytest -vv 用例层目录 --html=报告路径 --self-contained-html
    
    先安装3.2.0的版本，卸载掉，再安装3.1.0版本

"""
"""
    失败重跑：pip install pytest-rerunfailures
    
    pytest 用例层目录 --reruns 失败重跑的次数 --reruns-delay 失败重跑的间隔时间

"""

"""

    allure生成测试报告的步骤：
        1： 生成测试结果的json文件---json非常多
            pytest 测试模块 --alluredir=存放json文件的目录 --clean-alluredir
        2：根据第一步生成的json文件来生成测试报告：
            a): 生成web服务
                allure serve 第一步存放的json文件目录
            b): 生成静态报告
                allure generate 第一步存放的json文件目录 -o 存放静态报告的目录
                打开静态报告：allure open 静态报告存放的目录
"""


def get_logs():
    # 将日志写入到文件中---流程
    # 创建logger
    logger = logging.getLogger()
    # 设置日志文件中写入的级别
    logger.setLevel(level=logging.DEBUG)
    # 需要设置日志的名称
    log_name = time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime(time.time())) + ".log"
    # 获取日志的目录
    log_dir = os.path.join(os.path.join(os.path.dirname(__file__), "report"), "result_log")
    # 日志路径拼接
    log_path = os.path.join(log_dir, log_name)
    # 设置日志文件
    file_handler = logging.FileHandler(log_path, mode="a", encoding="utf-8")
    # 设置日志在文件中显示的格式
    log_format = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
    # 将日志设置格式添加到日志文件中
    file_handler.setFormatter(log_format)
    # 将日志文件的handler添加到logger对象中
    logger.addHandler(file_handler)

    return logger


log = get_logs()


# 装饰器
def log_decorator(func_name):
    @functools.wraps(func_name)  # 让被装饰对象使用它原来的名称，不要使用inner
    def inner(*arg, **kwargs):
        try:
            log.info(f"执行的功能名称为：{func_name.__name__}, 功能所在的文件为：{func_name.__code__.co_filename}, 所在的行为：{func_name.__code__.co_firstlineno}")
            value = func_name(*arg, **kwargs)
        except Exception as e:
            log.error(f"执行的功能名称为：{func_name.__name__}, 功能所在的文件为：{func_name.__code__.co_filename}, 所在的行为：{func_name.__code__.co_firstlineno}报错，错误为：{e}")
            raise e
        else:
            return value
    return inner