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: