__init__.py 3.65 KB
Newer Older
壹贰叁 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName:   test60
# FileName:      __init__.py
# Author:       lao_zhao
# Datetime:     2024/5/20 15:40
# Description:
# 
# ---------------------------------------------------------------------------
import functools
import logging
import os
import time

log_dir_path = os.path.join(os.path.join(os.path.dirname(__file__), "report"), "log")
if not os.path.exists(log_dir_path):
    # makedirs(c:\c\d\a)  os.mkdir
    os.makedirs(log_dir_path)

log_file_name = os.path.join(log_dir_path, time.strftime("%Y_%m_%d_%H_%M_%S") + ".log")


def log():
    # 创建logger对象
    logger = logging.getLogger()
    # 设置日志的级别
    logger.level = logging.ERROR
    # 设置日志文件
    handler = logging.FileHandler(log_file_name, mode="a", encoding="utf-8")
    # 设置日志的格式
    formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
    # 将格式添加到handler中
    handler.setFormatter(formatter)
    # 将handler添加到logger对象中
    logger.addHandler(handler)
    return logger


log = log()


def log_decorator(func_name):
    @functools.wraps(func_name)
    def inner(*args, **kwargs):
        try:
            # 写入info级别的日志
            """
            __init__(): 构造方法,初始化对象
            __new__(): 为对象分配内存空间
            __del__(): 析构方法,回收对象
            __enter__()/__exit__(): 实现上下文管理器
            
            __mro__: 查看继承顺序
            __file__: 获取文件的路径
            __name__: 获取功能/类/方法/模块的名称
            __iter__(): 创建迭代器
            __next__(): 迭代器和生成器取值
            
            __code__: 获取功能的code属性
                    func.__code__.co_filename: 获取func所在的py文件名称
                    func.__code__.co_firstlineno: 获取func所在的py文件中行号
            __doc__:获取功能的描述
            """
            log.info(f"执行的功能为:{func_name.__name__}, 功能的描述为:{func_name.__doc__}, 所在的文件为:"
                     f"{func_name.__code__.co_filename}, 所在行为:{func_name.__code__.co_firstlineno}")
            # 执行功能
            return func_name(*args, **kwargs)
        except Exception as e:
            # 如果发生错误,写入一个错误的日志
            log.error(f"执行的功能为:{func_name.__name__}, 功能的描述为:{func_name.__doc__}, 所在的文件为:"
                     f"{func_name.__code__.co_filename}, 所在行为:{func_name.__code__.co_firstlineno}, 错误为:{e}")
            raise e
    return inner



# 报告输出
"""

    pytest-html----> pip install pytest-html
    生成报告的命名:
        pytest 用例层目录名称 -vv --html=存放报告的路径/报告名称.html --self-contained-html
            -vv: 终端执行显示详细结果
            --html: 存放报告的路径/报告名称.html
            --self-contained-html: 报告生成单独的html文件
"""
# allure
"""
    allure-pytest --- > pip install allure-pytest

    第一步:生成测试结果的json文件:pytest 用例模块/包 --alluredir=存放json文件的路径 --clean-alluredir
    第二步:
        生成一个服务:allure serve 第一步存放json文件的路径
        生成静态报告:allure generate 第一步存放json文件的路径 -o 存放报告的路径
            打开allure的静态报告:allure open 存放报告的路径
    
"""
"""
    失败重跑插件:pytest-rerunfailures ---> pip install pytest-rerunfailures

"""