Beispiel #1
0
def response_check(control_request_return):
    """
    返回值校验,从ControlRequest.control_request()得到返回值生成器
    判断data_check 若不等于0,则直接进行指定key-value值的校验 若等于0则进行code与msg校验
    """
    logger.debug('enter responseCheck')
    logger_output.debug('enter responseCheck')
    #todo  需要改写测试通过的needTestFlag的值

    for return_data in control_request_return:
        number, request_url, name, request_mode, required_parameter, expect_response, login_flag, test_flag,\
        data_check, use_time, actually_response,request_parameter, skip_case = return_data
        if isinstance(request_parameter,dict):
            request_parameter = json.dumps(request_parameter,ensure_ascii=False) #将dict转为json 方便从report复制后手动校验
        if data_check != 0:
            logger.debug('data_check= %s Type= %s' % (data_check, type(data_check)))
            logger_output.debug('data_check= %s Type= %s' % (data_check, type(data_check)))
            check_dict = ApiToolkit.parameter_extractor(data_check)
            try:
                response_dict = ApiToolkit.analysis_json(actually_response.json())
            except Exception,e:
                logger.error('get response_dict fail! %s'%str(e))
                logger_output.error('get response_dict fail! %s'%str(e))
                response_dict = {}
            for key in check_dict.keys():
                try:
                    value = response_dict[key]
                except KeyError:
                        output = u'数据校验失败!\n返回结果中没有 %s 字段、\n校验数据:\n%s\n请求参数:\n%s\n实际返回:\n%s' \
                                 % (key,json.dumps(check_dict),request_parameter,json.dumps(response_dict))
                        yield (number, name, use_time, 'error', output, skip_case)
                try:
                    assert check_dict[key] == value
                    result = 'pass'
                    output = u'数据校验通过!\n返回结果中字段 %s = %s 预期其值应为 %s\n请求参数:\n%s\n接口原始返回:\n%s' \
                             % (key, value, check_dict[key],request_parameter, json.dumps(response_dict,ensure_ascii=False))
                except AssertionError:
                    result = 'fail'
                    output = u'数据校验失败!\n返回结果中字段 %s = %s 预期其值应为 %s\n请求参数:\n%s\n接口原始返回:\n%s'\
                             % (key, value, check_dict[key],request_parameter,json.dumps(response_dict,ensure_ascii=False))
                yield (number, name, use_time, result, output, skip_case)
        else:
            try:
                if expect_response != None:
                    try:
                        expect_response = json.loads(expect_response)
                    except TypeError,e:
                        logger.error('expectRespone load TypeError:'+str(e))
                        logger_output.error('expectRespone load TypeError:'+str(e))
                        expect_response = {'code':'load error','msg':'load error'}
                else:
                    logger.info(u"get关联接口返回:\n" + logger_info)
                    logger_output.info(u"get关联接口返回:\n" + logger_info)
                except ValueError, e:
                    logger.error(e)
                    logger.error(actually_response.content)
                    logger_output.error(actually_response.content)
            else:
                logger.error("actuallyResponse.status_code=%s" % actually_response.status_code)
                logger.error("actuallyResponse.status_code=%s" % actually_response.status_code)
                logger_output.error("actuallyResponse.status_code=%s" % actually_response.status_code)
                raise ValueError, "request fail!"
        else:
            raise TypeError, "request mode error or None!"
    except requests.exceptions.ConnectionError, e:
        logger.error("ConnectionError!\n %s" % e)
    response_relevance_parameter = ApiToolkit.analysis_json(actually_response.json())
    logger.info(u"获取的关联参数:" + json.dumps(response_relevance_parameter, ensure_ascii=False, sort_keys=True))
    logger_output.info(u"获取的关联参数:" + json.dumps(response_relevance_parameter, ensure_ascii=False, sort_keys=True))
    relevance_parameter.update(response_relevance_parameter)


def login_data_center(parameter, root_url):
    logger.debug("enter login")
    logger_output.debug("enter login")
    if isinstance(parameter, dict):
        try:
            response = requests.post(root_url, json=parameter)
        except requests.exceptions.ConnectionError, e:
            logger.error(e)
            logger_output.error(e)
        if response.status_code == 200: