HandleData.py 4.08 KB
# @Time    : 2022/8/23 14:45
# @Author  : 付孟奇
from util.HandleLog import logger
from util.HandleFile import file_read_global
import xlrd
import json


class DateLoad:

    # 读取Excel数据--按行
    def load_excel(self, file, tag):
        data_list = []
        try:
            book = xlrd.open_workbook(file)
            tag = book.sheet_by_name(tag)
            # 获取行数
            row_num = tag.nrows
            header = tag.row_values(0)
            for i in range(1, row_num):
                # 读取行
                row_data = tag.row_values(i)
                # 读取行中的每一列的值
                d = dict(zip(header, row_data))
                data_list.append(d)
            return data_list
        except Exception as e:
            logger.error('测试用例打开失败,原因是:%s' % e)

    # 查找特定key的value信息
    def get_value(self, source_json, object_key):
        result = []
        if isinstance(source_json, dict) and object_key in source_json.keys():
            value = source_json[object_key]
            result.append(value)
            return result
        elif isinstance(source_json, (list, tuple)):
            for item in source_json:
                value = self.get_value(item, object_key)
                if value == "None" or value is None:
                    pass
                elif len(value) == 0:
                    pass
                else:
                    result.append(value)
            return result
        else:
            if isinstance(source_json, dict):
                for k in source_json:
                    value = self.get_value(source_json[k], object_key)
                    if value == "None" or value is None:
                        pass
                    elif len(value) == 0:
                        pass
                    else:
                        for item in value:
                            result.append(item)
                return result

    # 处理请求的可变参数
    def handle_params(self, args):
        try:
            if str(args).count('话术变量验证') == 1:  # 话术变量场景测试参数特殊处理
                from util.HandleSpeech import handle_speech
                params_list = str(args).split('-')
                args = handle_speech.getRestult(params_list[1])
                return json.loads(args)
            elif args[0] == '{':
                args = json.loads(args)
                old_key = []  # 变量的key的集合
                old_value = []  # 变量集合
                # 遍历请求参数中,所有的变量信息
                for k, v in args.items():
                    if str(v)[0] == '#':
                        old_key.append(k)
                        old_value.append(v)
                # 替换变量值
                if len(old_value) != 0:
                    logger.info('需要替换的变量信息为:' + str(old_value))
                    key_dic = {}
                    for i in old_value:
                        v_key = str(i[1:]).split('.')
                        res = file_read_global(v_key)
                        key_dic[i] = res
                    logger.info('可变参数的信息为:' + str(key_dic))
                    # 参数替换
                    for j in key_dic:
                        self.dic_del(args, j, key_dic)
                    logger.info('可变参数替换完毕:' + str(args))
                return args
            else:
                return ''
        except:
            return {'code': 1, 'result': '参数错误,请检查替换信息是否正确'}

    # json格式字典处理
    def dic_del(self, data_json, data_key, key_dic):
        if isinstance(data_json, dict):
            for k, v in data_json.items():
                if v == data_key:
                    data_json[k] = key_dic[data_key]
                else:
                    self.dic_del(v, data_key, key_dic)
        elif isinstance(data_json, list):
            for i in data_json:
                self.dic_del(i, data_key, key_dic)


handle_data = DateLoad()

if __name__ == '__main__':
    handle_data.handle_global()