入参为:字典模板及字典是否必填
出参为:字典必填为空列表
class Data:
# 字典模板 -可以为列表 也可以是字典
order_data_model = [{"oreder": "123", "oreder2": "123", "oreder3": "123",
"items": [{"item1": "123", "item2": "123", "item3": "123"}], "oreder4": "123","dd": [{"ddd": [{"dddd": "123", }]}]}]
# 字典值是否必填
order_data_define = [
{"oreder": True, "oreder2": False, "oreder3": True, "items": [{"item1": True, "item2": False, "item3": True}],
"oreder4": True,"dd": [{"ddd": [{"dddd": True}]}]}]
from data import Data
import copy
class CheckData:
def __init__(self, data_model, data_define):
# 最初全数据
self.data_model = data_model
self.data_define = data_define
# 目前层级数据
self.item_model = {}
self.item_define = {}
# 必填为空的数据列表
self.data_list = []
# 数据最外层为list时,进入下一层
def deeper(self):
self.data_model = self.data_model[0]
self.data_define = self.data_define[0]
# 数据字典值为list时,进入下一层
def deeper_key(self, key):
self.item_model = self.data_model[key][0]
self.item_define = self.data_define[key][0]
# 返回必填字段为空的列表
def get_null_data_list(self):
# 如果数据为列表-下一层-并返回列表集合[[{}],[{}]]-再给[{},{}]加一层[]:[[{}],[{}]]
if type(self.data_define) == list:
self.deeper()
self.__get_null_data_list()
list_all = []
for data in self.data_list:
list_all.append([data])
self.data_list = list_all
return self.data_list
else:
# 如果数据模板最外层为字典-直接返回字典列表[{},{}]
self.__get_null_data_list()
return self.data_list
def __get_null_data_list(self):
# 用于返回必填字段为空的列表
# 存储目前置空数据
data = copy.deepcopy(self.data_model)
# 循环模板字典 拿到键值对-模板保持不变
for key, value in self.data_model.items():
# 如果字典值不是列表
if type(self.data_define[key]) != list:
# 如果定义数据不是非必填-才置空
if self.data_define[key] != False:
data[key] = ""
# 加入到返回列表
self.data_list.append(copy.deepcopy(data))
# 重置数据
data[key] = value
else:
# 继续读列表
data[key] = ""
# 加入到返回列表
self.data_list.append(copy.deepcopy(data))
# 重置数据
data[key] = value
# 下一层
self.deeper_key(key)
# 循环字典 拿到键值对
for key2, value2 in self.item_model.items():
# 如果字典值不是列表
if type(self.item_define) != list:
if self.item_define[key2] != False:
data[key][0][key2] = ""
self.data_list.append(copy.deepcopy(data))
data[key][0][key2] = value2
else:
# 不读第四层
pass
if __name__ == '__main__':
cd = CheckData(Data.order_data_model, Data.order_data_define).get_null_data_list()
print(cd)
for a in cd:
print(a)
打印结果
[[{'oreder': '', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '123', 'item2': '123', 'item3': '123'}], 'oreder4': '123', 'dd': [{'ddd': [{'dddd': '123'}]}]}], [{'oreder': '123', 'oreder2': '123', 'oreder3': '', 'items': [{'item1': '123', 'item2': '123', 'item3': '123'}], 'oreder4': '123', 'dd': [{'ddd': [{'dddd': '123'}]}]}], [{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': '', 'oreder4': '123', 'dd': [{'ddd': [{'dddd': '123'}]}]}], [{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '', 'item2': '123', 'item3': '123'}], 'oreder4': '123', 'dd': [{'ddd': [{'dddd': '123'}]}]}], [{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '123', 'item2': '123', 'item3': ''}], 'oreder4': '123', 'dd': [{'ddd': [{'dddd': '123'}]}]}], [{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '123', 'item2': '123', 'item3': '123'}], 'oreder4': '', 'dd': [{'ddd': [{'dddd': '123'}]}]}], [{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '123', 'item2': '123', 'item3': '123'}], 'oreder4': '123', 'dd': ''}], [{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '123', 'item2': '123', 'item3': '123'}], 'oreder4': '123', 'dd': [{'ddd': ''}]}]]
[{'oreder': '', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '123', 'item2': '123', 'item3': '123'}], 'oreder4': '123', 'dd': [{'ddd': [{'dddd': '123'}]}]}]
[{'oreder': '123', 'oreder2': '123', 'oreder3': '', 'items': [{'item1': '123', 'item2': '123', 'item3': '123'}], 'oreder4': '123', 'dd': [{'ddd': [{'dddd': '123'}]}]}]
[{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': '', 'oreder4': '123', 'dd': [{'ddd': [{'dddd': '123'}]}]}]
[{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '', 'item2': '123', 'item3': '123'}], 'oreder4': '123', 'dd': [{'ddd': [{'dddd': '123'}]}]}]
[{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '123', 'item2': '123', 'item3': ''}], 'oreder4': '123', 'dd': [{'ddd': [{'dddd': '123'}]}]}]
[{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '123', 'item2': '123', 'item3': '123'}], 'oreder4': '', 'dd': [{'ddd': [{'dddd': '123'}]}]}]
[{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '123', 'item2': '123', 'item3': '123'}], 'oreder4': '123', 'dd': ''}]
[{'oreder': '123', 'oreder2': '123', 'oreder3': '123', 'items': [{'item1': '123', 'item2': '123', 'item3': '123'}], 'oreder4': '123', 'dd': [{'ddd': ''}]}]
结合数据驱动、对每个数据都进行一次验证
import pytest
from data import Data
from checkdata import CheckData
class TestCase:
@pytest.mark.parametrize('data',CheckData(Data.order_data_model, Data.order_data_define).get_null_data_list())
def test_case(self,data):
# res = create_order(data)
# assert res.text['success'] == False
assert data is None
if __name__ == '__main__':
pytest.main()
发表评论