Files
InterfaceAutoTest/utils/data_driver.py
CNWei 293b5160fe fix(exchange,case_validator),refactor(),feat(model): 解决 Pydantic 模型初始化与变量占位符的类型冲突,优化变量替换逻辑,重构 CaseInfo 模型并引入延迟校验机制
- 引入 SmartInt 和 SmartDict 类型,支持 YAML 占位符与业务类型的自动转换。
- 优化 CaseInfo 互斥校验逻辑,确保 request 与 api_action 二选一。
- 统一使用 Pydantic V2 的 model_config 规范。
- 将变量替换时机提前至模型实例化之前,支持占位符在校验前完成真实值注入,
保证了 int/bool 等字段的类型转换正确性。
- 优化断言渲染时机,支持响应提取值关联。
2026-03-11 10:29:16 +08:00

92 lines
2.6 KiB
Python

#!/usr/bin/env python
# coding=utf-8
"""
@author: CNWei
@Software: PyCharm
@contact: t6i888@163.com
@file: data_driver
@date: 2025/3/3 10:56
@desc:
"""
from pathlib import Path
from core.templates import Template
from commons.file_processors.yaml_processor import YamlProcessor as FileHandle
class DataDriver:
@staticmethod
def generate_cases(file_name, case_info) -> dict:
if not case_info.get("parametrize"):
return {file_name + "[--]": case_info}
cases = {}
args_names = case_info.get("parametrize")[0]
for i, args_values in enumerate(case_info.get("parametrize")[1:]):
# print(args_values)
context = dict(zip(args_names, args_values))
# print(context)
rendered = Template(FileHandle.to_string(case_info)).render(context)
cases.update({file_name + "[" + str(i) + "]": FileHandle.to_dict(rendered)})
return cases
if __name__ == '__main__':
file_path = Path(r"D:\CNWei\CNW\InterfaceAutoTest\test_cases\answer\test_1_status.yaml")
file_obj = FileHandle(file_path)
print(file_path.stem)
file_name_ = file_path.stem
# mock_case_info = {
# "case_info0": {
# "feature": "页面状态",
# "story": "状态",
# "title": "查询状态信息",
# "request": "",
# "extract": "",
# "validate": "",
# "parametrize": [["title", "username", "password", "msg"], ["测试1", "user1", "pass1", "200"],
# ["测试2", "user2", "pass2", "300"]]
# },
# "case_info1": {
# "feature": "页面状态",
# "story": "状态",
# "title": "查询状态信息",
# "request": "",
# "extract": "",
# "validate": "",
# "parametrize": [1, 2, 3]
# },
# "case_info2": {
# "feature": "页面状态",
# "story": "状态",
# "title": "查询状态信息",
# "request": "",
# "extract": "",
# "validate": "",
# "parametrize": [1, 2, 3]
# }
#
# }
dd = DataDriver()
# cases = dd.generate_cases(mock_case_info.get("case_info0"))
cases_ = dd.generate_cases(file_name_, file_obj)
print(cases_)
case_keys = list(cases_.keys())
case_values = cases_.values()
print(case_keys)
print(case_values)
aa = [i.get("title") for i in case_values]
print(aa)
# print(list(case_values)[0]["feature"])
print(file_obj["feature"])
# print(list(case_values)[0]["story"])
print(file_obj["story"])