网站建设及相关流程网上做网站资金大概多少
2026/4/6 5:44:44 网站建设 项目流程
网站建设及相关流程,网上做网站资金大概多少,提供坪山网站建设,v2ex wordpress主题根据上一个测试用例的执行结果决定某一夹具的使用情况 根据测试用例执行情况#xff0c;决定测试结束要不要将环境下电#xff0c;pytest的夹具实现和python的条件控制好像区别不大的样子 目标效果 目前我是写了一个电源控制的夹具#xff0c;原本的设计思路#xff1a;…根据上一个测试用例的执行结果决定某一夹具的使用情况根据测试用例执行情况决定测试结束要不要将环境下电pytest的夹具实现和python的条件控制好像区别不大的样子目标效果目前我是写了一个电源控制的夹具原本的设计思路将夹具作为参数传入测试用例测试用例执行完就执行控制电源动作。现在由于某些情况测试过程中会出现异常情况我想要根据测试用例的执行情况动态的调整电源的控制情况。假如测试用例失败或者根据某一个参数的变化让测试结束后不要关闭电源。如果测试流程顺利则关闭电源原本的夹具定义 调用此夹具执行需要进行参数传入需要控制的电源名根据电源名进行电源控制 在测试结束时会下发关闭电源的命令 pytest.fixture(scopefunction)defpdu(request):pdu_namerequest.param# 初始化一个电源控制类yieldprint(f关闭电源{pdu_name})# 关闭电源实现思路通过优化夹具逻辑和参数传递实现写一个获取测试结果的钩子函数确保夹具能拿到用例执行状态让夹具支持接收多参数如 PDU 名称、强制保电标识等兼顾 “参数变化” 的判断维度封装核心判断逻辑同时校验 “测试结果” 和 “自定义参数”只有满足 “测试成功 无强制保电” 时才关闭电源。目录结构如下新夹具实现如下importsysimportpytestimportos PROJECT_PATHos.path.abspath(os.path.join(__file__,..,..))sys.path.append(PROJECT_PATH)fromcfg.set_logimportlogger# 钩子函数保存测试用例执行结果到测试节点pytest.hookimpl(tryfirstTrue,hookwrapperTrue)defpytest_runtest_makereport(item,call):outcomeyieldrepoutcome.get_result()# 将测试结果call阶段用例执行阶段保存到itemsetattr(item,test_result,rep.outcome)pytest.fixture(scopefunction)defpdu(request):# 解析传入的参数支持多参数传递paramrequest.param pdu_nameparam.get(pdu_name)# 可选参数是否强制保电默认Falsekeep_power_onparam.get(keep_power_on,False)logger.info(pdu begin)logger.info(fpdu name:{pdu_name})yieldtest_resultrequest.node.test_resultifkeep_power_onortest_result!passed:# 需要加电源的具体操作可以选择封装成一个类调用其方法reason强制保电ifkeep_power_onelsef测试{test_result}logger.info(f【电源策略】{reason}保留PDU{pdu_name}供电)else:logger.info(f【电源策略】测试成功关闭PDU{pdu_name})测试用例如下importpytest# 场景1测试成功 无强制保电 → 关闭电源pytest.mark.parametrize(pdu,[{pdu_name:pdu_01}],indirectTrue)deftest_success_normal(pdu):assert112# 测试通过# 场景2测试失败 → 不关闭电源pytest.mark.parametrize(pdu,[{pdu_name:pdu_02}],indirectTrue)deftest_failed_case(pdu):assert113# 测试失败# 场景3测试成功 强制保电 → 不关闭电源pytest.mark.parametrize(pdu,[{pdu_name:pdu_03,keep_power_on:True}],indirectTrue)deftest_success_keep_power(pdu):assert112# 测试通过但强制保电# 场景4测试跳过 → 不关闭电源pytest.mark.skip(reason临时跳过)pytest.mark.parametrize(pdu,[{pdu_name:pdu_04}],indirectTrue)deftest_skipped_case(pdu):assertTrue在实现夹具之前先封装一个logger用于收集日志实现仅供参考# set_log.pyimportloggingfromlogging.handlersimportRotatingFileHandlerimportosimportsysfromdatetimeimportdatetimedefsetup_logger(name:strpdu_test,# 日志器名称默认区分不同模块log_level:strINFO,# 日志级别DEBUG/INFO/WARNING/ERROR/CRITICALlog_dir:strNone,# 日志文件目录默认项目根目录下的logsmax_bytes:int10*1024*1024,# 单个日志文件最大大小10MBbackup_count:int5,# 日志文件备份数量最多保留5个console_output:boolTrue# 是否输出到控制台)-logging.Logger: 封装日志配置函数返回配置好的logger实例 :param name: 日志器名称区分不同模块如pdu_control、br_cmd :param log_level: 日志级别字符串类型兼容大小写 :param log_dir: 日志文件保存目录默认项目根目录/logs :param max_bytes: 单个日志文件最大字节数默认10MB :param backup_count: 日志文件备份数默认保留5个 :param console_output: 是否输出到控制台默认开启 :return: 配置好的logger对象 # 1. 初始化logger避免重复添加handler导致日志重复输出loggerlogging.getLogger(name)logger.setLevel(log_level.upper())# 统一转大写兼容小写输入logger.handlers.clear()# 清空已有handler防止重复输出# 2. 定义日志格式包含时间、级别、模块、行号、日志内容log_formatlogging.Formatter(%(asctime)s - %(name)s - %(levelname)s - %(filename)s:%(lineno)d - %(message)s,datefmt%Y-%m-%d %H:%M:%S# 时间格式)# 3. 配置文件输出Handler按大小轮转ifnotlog_dir:# 默认日志目录项目根目录/logsproject_rootos.path.abspath(os.path.join(os.path.dirname(__file__),..))log_diros.path.join(project_root,logs)# 自动创建日志目录不存在则创建os.makedirs(log_dir,exist_okTrue)# 日志文件名按日期命名如2026-01-05_pdu_test.loglog_filenamef{datetime.now().strftime(%Y-%m-%d)}_{name}.loglog_file_pathos.path.join(log_dir,log_filename)# 配置轮转文件Handlerfile_handlerRotatingFileHandler(filenamelog_file_path,modea,# 追加模式maxBytesmax_bytes,backupCountbackup_count,encodingutf-8# 编码避免中文乱码)file_handler.setFormatter(log_format)logger.addHandler(file_handler)# 4. 配置控制台输出Handler可选ifconsole_output:console_handlerlogging.StreamHandler(sys.stdout)console_handler.setFormatter(log_format)logger.addHandler(console_handler)returnlogger# ---------------------- 快捷获取logger的方式 ----------------------# 全局通用logger默认配置loggersetup_logger(namepdu_power_control)# 按模块拆分的logger可选pdu1_loggersetup_logger(namepdu1,log_levelDEBUG)pdu2_loggersetup_logger(namepdu2,log_levelINFO)各位大佬还有其他比较优雅的实现方式吗原文救命这个功能应该怎么实现pytest根据用例执行情况控制夹具执行不同的代码

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询