代码拉取完成,页面将自动刷新
# -*- coding: utf-8 -*-
import pytest
from common.excel_handler import load_test_cases
from common.logger import get_logger
from common.request_handler import handle_precondition
logger = get_logger()
# Global data storage, used to hold session-level variables
pytest.global_data = {}
class NonUnicodeStr(str):
def __repr__(self):
return self
def __str__(self):
return self
# Fixture to load test cases from the Excel file
@pytest.fixture(scope="session")
def test_cases():
# 从 Excel 文件中读取所有测试用例数据
return load_test_cases()
# Fixture for setting up and tearing down preconditions or environment setup
@pytest.fixture(scope="session", autouse=True)
def setup_environment():
# 这里可以做一些全局的前置操作,如数据库连接、初始化等
print("环境准备中...")
handle_precondition()
yield
# 测试结束后做清理工作
print("环境清理中...")
# pytest_generate_tests 用于动态生成测试数据
def load_and_filter_test_cases():
# 假设 load_test_cases() 从 Excel 中加载测试数据
cases = load_test_cases()[1]
# 过滤掉没有 '模块' 或 '功能点' 键的字典
cases = [c for c in cases if 'module' in c and 'name' in c]
return cases
def pytest_generate_tests(metafunc):
if "case" in metafunc.fixturenames:
# 加载用例数据
try:
cases = load_and_filter_test_cases() # 你自己的封装函数
except Exception as e:
raise RuntimeError(f"加载测试用例失败: {e}")
if not cases:
raise ValueError("❌ 用例数据为空,无法执行测试!")
# 检查字段并构建 id
ids = []
for i, case in enumerate(cases):
num = str(case.get("num") or f"用例{case.get('case_id')}").strip()
module = str(case.get("module") or f"模块{case.get('case_id')}").strip()
name = str(case.get("name") or f"用例{case.get('case_id')}").strip()
logger.info(f"========={num} {module}-{name}")
if not module or not name:
print(f"---第 {i} 条用例缺字段:{case}")
ids.append(NonUnicodeStr(f"{module}-{name}"))
# parametrize 生效
metafunc.parametrize("case", cases, ids=ids)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。