def write_dependField(row):
    Gd=GetData()
    depend_case_id = Gd.is_depend(row)
    if depend_case_id:
        depend = DependentData(depend_case_id)
        # 获取依赖key
        depent_key=Gd.get_depent_key(row)
        # print(depent_key)
        # 将依赖数据写入请求数据
        flag=depend.writeDependRequestDataToExcle(row)
        # print(flag)
        return flag
    else:
        return False
Ejemplo n.º 2
0
class DependentData(GetData):
    def __init__(self, case_id):
        super().__init__()
        # 实例依赖字段yaml文件
        self.yamlField = OperationYaml('dependFieldInfo.yaml')
        # 数据依赖字段实例
        self.dependFieldYaml = ''
        self.case_id = case_id
        self.data = GetData()
        self.depend_key_dict = {}  #存放依赖key数据

    #执行依赖测试,并返回结果
    def run_dependent(self):
        row_num = self.opera_excle.get_row_num(self.case_id)
        depend_response = self.data.request_info(row_num)
        self.log.info(self.mylog.out_varname(depend_response))
        return depend_response

    #根据依赖key去获取执行依赖测试case的响应,然后返回
    def get_data_for_key(self, row):
        self.depend_data_dict = {}  #执行前清空dict
        yamlDepentKey = self.data.get_depent_key(row)
        # print(yamlDepentKey)
        depend_Field_dict = {}  #数据依赖字段
        # response_data为依赖测试的执行结果
        response_data = self.run_dependent()
        # print(response_data)
        try:
            # ''' 判断depend_data使用eval是否发生异常,如果异常当做单字符处理,
            # 如果没异常判断是否是list且是否为空,满足条件循环处理,否则不处理'''
            if isinstance(response_data, str):
                response_data = eval(response_data)
            if isinstance(yamlDepentKey, list) and yamlDepentKey:
                for i in yamlDepentKey:
                    # print(i)
                    # print(self.depend_key_dict)
                    self.depend_data_parse(i, response_data)
            else:
                return None
        except SyntaxError as syntaxerror:
            print(syntaxerror)
            self.log.error(self.mylog.out_varname(syntaxerror))
            self.depend_data_parse(yamlDepentKey, response_data)
        excleDepentKey = self.dependFiel_kw(row)
        depend_Field_dict[excleDepentKey] = self.depend_key_dict
        # print(self.depend_key_dict)
        return depend_Field_dict

    def depend_data_parse(self, depend_key, response_data):
        '''处理依赖'''
        if depend_key:
            # 定义要获取的key
            # 处理依赖时,只取响应中的第一个值
            __dict = self.data.requestDataDispose.depend_data_parse(
                depend_key, response_data, index='one')
            # 合并字典
            # 确保字典不能为空与类型必须时字典
            if __dict and isinstance(__dict, dict):
                self.depend_key_dict.update(__dict)

    # 返回数据依赖字段
    def dependFiel_kw(self, row):
        col = int(data_config.get_field_depend())
        depend_field = self.opera_excle.get_cell_value(row, col)
        self.dependFieldYaml = '{}{}'.format(self.yaml['dependField'], row)
        # print('self.data.writelist',self.data.writelist)
        if not depend_field:
            # 判断field关键字是否存在存实例中
            if self.dependFieldYaml in self.data.writelist:
                return self.dependFieldYaml
            else:
                return False
        else:
            return depend_field

    # 获取数据依赖字段
    def get_depend_field(self, row):
        self.write_dependField(row)
        depend_field = self.dependFiel_kw(row)
        depend_field_data = self.yamlField.readforKey_onetier(key=depend_field)
        # print(depend_field)
        # print(depend_field_data)
        if depend_field_data:
            return depend_field_data
        else:
            return False

    # 写入数据依赖字段信息至yaml
    def write_dependField(self, row):
        try:
            dependFieldYaml = self.get_data_for_key(row)
            if dependFieldYaml:
                # '''这句代码用于处理yaml写入失败(浮点对象异常的问题)
                value = eval(demjson.encode(dependFieldYaml))
                # print(value)
                self.yamlField.write_yaml(value)
                return True
            else:
                return False
        except BaseException as error:
            print(error)
            self.log.error(self.mylog.out_varname(error))
            return False

    # 将依赖处理完毕的请求数据写入excle
    def writeDependRequestDataToExcle(self, row):
        source_data = self.get_depend_field(row)
        # print(self.mylog.out_varname(source_data))
        falg = None
        if source_data:
            falg = self.data.writeDependFiledToRequestData(
                row, source_data=source_data)
            if falg:
                return True
            else:
                return False
        else:
            return False