refactor(): 优化测试用例数据的处理,优化代码结构
- 新增用例生成器和注册器 - 优化文件处理
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
@desc: 声明yaml用例格式
|
||||
"""
|
||||
import logging
|
||||
from typing import Union, Optional
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
import yaml
|
||||
@@ -20,20 +21,45 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@dataclass
|
||||
class CaseInfo:
|
||||
class RequestModel:
|
||||
method: str
|
||||
url: str
|
||||
headers: Optional[dict] = None
|
||||
# body: Optional[Union[dict, str]] = None
|
||||
params: Optional[Union[dict, str]] = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class TestCaseModel:
|
||||
title: str
|
||||
request: dict
|
||||
request: RequestModel
|
||||
extract: dict
|
||||
validate: dict
|
||||
parametrize: list = field(default_factory=list)
|
||||
epic: str = settings.allure_epic
|
||||
feature: str = settings.allure_feature
|
||||
story: str = settings.allure_story
|
||||
epic: str = field(default_factory=lambda: settings.allure_epic)
|
||||
feature: str = field(default_factory=lambda: settings.allure_feature)
|
||||
story: str = field(default_factory=lambda: settings.allure_story)
|
||||
|
||||
def __post_init__(self):
|
||||
# 必填字段非空校验
|
||||
if self.title is None:
|
||||
raise ValueError("Title cannot be empty")
|
||||
|
||||
# 校验RequestModel
|
||||
if isinstance(self.request, dict):
|
||||
try:
|
||||
self.request = RequestModel(**self.request) # RequestModel 的 __post_init__ 会被调用
|
||||
except (TypeError, ValueError) as e:
|
||||
raise ValueError(f"解析 'request' 字段失败: {e} (数据: {self.request})") from e
|
||||
elif not isinstance(self.request, RequestModel): # 如果不是 dict 也不是 RequestModel
|
||||
raise TypeError(
|
||||
f"字段 'request' 必须是字典 (将在内部转换为 RequestModel) 或 RequestModel 实例, "
|
||||
f"得到的是 {type(self.request).__name__}"
|
||||
)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
with open(r'E:\PyP\InterfaceAutoTest\TestCases\answer\test_1_status.yaml', encoding='utf-8') as f:
|
||||
data = yaml.safe_load(f)
|
||||
# print(data)
|
||||
case_info = CaseInfo(**data)
|
||||
|
||||
case_info = TestCaseModel(**data)
|
||||
|
||||
Reference in New Issue
Block a user