refactor(): 优化文件读取,变量替换等

- 优化用例加载模块器
- 新增JSON文件读取模块
This commit is contained in:
2025-03-09 17:23:25 +08:00
parent 914b0301ba
commit a50e00a4e1
15 changed files with 219 additions and 451 deletions

View File

@@ -10,14 +10,11 @@
@desc: 声明yaml用例格式
"""
import logging
from dataclasses import dataclass, asdict, field
from dataclasses import dataclass, field
import allure
import yaml
from commons.templates import Template
from commons import settings
from utils import case_validator
logger = logging.getLogger(__name__)
@@ -33,79 +30,10 @@ class CaseInfo:
feature: str = settings.allure_feature
story: str = settings.allure_story
def to_yaml(self) -> str:
# 序列化成yaml字符串
yaml_str = yaml.safe_dump(
asdict(self),
allow_unicode=True, # allow_unicode使用unicode编码正常显示中文
sort_keys=False)
return yaml_str
@classmethod
def by_yaml(cls, yaml_str):
# 反序列化
obj = cls(**yaml.safe_load(yaml_str))
return obj
# @allure.step("断言")
# def assert_all(self):
# _validator = case_validator.CaseValidator()
# # print(case_validator.VALIDATORS)
#
#
#
# _validator.assert_all(self.validate)
# for assert_type, assert_value in self.validate.items():
# for msg, data in assert_value.items():
# a, b = data[0], data[1]
# # print(assert_type, a, b, msg)
# match assert_type:
# case 'equals':
# logger.info(f"assert {a} == {b}, {msg}")
# assert a == b, msg
# case 'not_equals':
# logger.info(f"assert {a} != {b}, {msg}")
# assert a != b, msg
# case 'contains':
# logger.info(f"assert {a} in {b}, {msg}")
# assert a in b, msg
# case 'not_contains':
# logger.info(f"assert {a} not in {b}, {msg}")
# assert a not in b, msg
# case "xxxxx
# def ddt(self) -> list: # 返回一个列表列表中应该包含N个注入了变量的caseInfo
# case_list = []
# if not self.parametrize: # 没有使用数据驱动测试
# logger.info("1执行这一步")
# # case_info_str = self.to_yaml() # 转字符串
# # case_info_str = Template(case_info_str).render(d) # 输入变量
# # case_info = self.by_yaml(case_info_str) # 转成类
# # case_list.append(case_info)
# case_list.append(self)
# else: # 使用数据驱动测试
# args_name = self.parametrize[0]
# args_value_list = self.parametrize[1:]
# for args_value in args_value_list:
# d = dict(zip(args_name, args_value))
# print(f"D的值{d}")
# # d 就是数据驱动测试的变量,应输入到用例中
# case_info_str = self.to_yaml() # 转字符串
# case_info_str = Template(case_info_str).render(d) # 输入变量
# case_info = self.by_yaml(case_info_str) # 转成类
#
# case_list.append(case_info) # 加入到返回值
# return case_list
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)
s = case_info.to_yaml()
# print(s)
new_case_info = case_info.by_yaml(s)
# print(new_case_info)
ddt_ddt = case_info.ddt()
print(ddt_ddt)