# -*-coding:utf-8 -*- # # --------------------------------------------------------------------------- # ProjectName: test63 # FileName: __init__.py # Author: lao_zhao # Datetime: 2024/11/5 14:02 # Description: # # --------------------------------------------------------------------------- import functools import logging import os import time """ 每个用户有独立的数据配置层,每个用户有自己的配置文件-config.ini--->这个文件名称不能改变文件名---需要单独读取---ReadUserIni 接口自动化框架有公共的配置文件---config.ini--->这个文件名称不能改变文件名---ReadBasicIni 在用例层-每个用户都有自己独立的测试层--用户的测试层中的__init__.py文件中需要配置用户存放数据的目录名称 """ """ pytest: 报告插件:pytest-html ---> pip install pytest-html 输出报告的命令:pytest -vv 用例模块/用例包 --html=报告存放的路径 --self-contained-html 失败重跑插件:pytest-rerunfailures --> pip install pytest-rerunfailures 输出报告的命令:pytest -vv 用例模块/用例包 --html=报告存放的路径 --self-contained-html --reruns 失败重跑的次数 --reruns-delay 失败重跑间隔时间 allure生成报告: 需要下pytest的插件:pip install allure-pytest 1:使用pytest执行用例,生成执行结果的json文件 pytest 用例模块/用例包 --alluredir=存放json文件的目录 --clean-alluredir --reruns 失败重跑的次数 --reruns-delay 失败重跑间隔时间 2: 根据第一步测试结果的json文件生成报告。 i: 本地生成测试报告服务 allure serve 第一步存放测试结果json文件的目录 ii: 生成静态的报告 allure generate 第一步存放测试结果json文件的目录 -o 静态报告存放的目录 打开静态的报告:allure open 静态报告存放的目录 """ def api_log(): # 创建Logger对象 root logger = logging.getLogger() # 设置级别 logger.level = logging.INFO # 日志文件存放的路径 log_dir_path = os.path.join(os.path.join(os.path.dirname(__file__), "report"), "log") log_file_name = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) + ".log" log_path = os.path.join(log_dir_path, log_file_name) # 创建日志文件的Handler对象 handler = logging.FileHandler(filename=log_path, mode="a", encoding="utf-8") # 设置日志显示的格式 # formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s') formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s') # 给Handler设置日志的格式 handler.setFormatter(formatter) # 给Logger添加Handler对象 logger.addHandler(handler) return logger log = api_log() def logor(func_name): @functools.wraps(func_name) # 装饰器返回内部函数时,沿用被装饰者的名称 def inner(*args, **kwargs): # __code__: 返回函数或方法的对象,可以获取函数或者方法的属性。 # __code__.co_filename:获取函数或方法所在的py文件 # __code__.co_firstlineno:获取函数或方法所在的py文件开始行号 log.info(f"执行的功能为:{func_name.__name__}, 功能描述为:{func_name.__doc__}, 所在的py文件为:{func_name.__code__.co_filename}, 所在的行为:{func_name.__code__.co_firstlineno}行,形参的值为:{args}或{kwargs}") try: result = func_name(*args, **kwargs) except Exception as e: log.error(f"执行的功能为:{func_name.__name__}, 功能描述为:{func_name.__doc__}, 所在的py文件为:{func_name.__code__.co_filename}, 所在的行为:{func_name.__code__.co_firstlineno}行,形参的值为:{args}或{kwargs}" f"错误的类型为:{type(e)}, 错误的描述为:{e}") raise e else: return result return inner