예제 #1
0
    def post(self, request, apiAdr=None):
        url = "/"+apiAdr
        try:
            obj = ApiInfo.objects.get(apiAddress=url, mockStatus=True)
        except ObjectDoesNotExist:
            return JsonResponse(code="999984", data="未匹配到mock地址或未开启!")
        head_data = ApiHead.objects.filter(api=obj)
        if len(head_data):
            for i in head_data:
                head = i.name.upper().replace("-", "_")
                try:
                    if head == "CONTENT_TYPE":
                        if request.environ[head] != i.value:
                            return Response(status=400)
                    else:
                        if request.environ["HTTP_"+head] != i.value:
                            return Response(status=400)
                except KeyError:
                    return Response(status=400)
        if obj.requestParameterType == "form-data":
            param = ApiParameter.objects.filter(api=obj)
            if len(param):
                for j in param:
                    if j.required:
                        if request.POST.get(j.name) is None:
                            return Response(status=400)
        else:
            param = ApiParameterRaw.objects.filter(api=obj)
            if len(param):
                data = JSONParser().parse(request)
                result = check_json(data, json.loads(param[0].data))
                if result == "fail":
                    return Response(status=400)

        return Response(json.loads(obj.data), status=obj.mockCode)
예제 #2
0
def test_api(host_id, case_id, project_id, _id):
    """
    执行接口测试
    :param host_id: 测试的host域名
    :param case_id: 测试用例ID
    :param _id:  用例下接口ID
    :param project_id: 所属项目
    :return:
    """
    host = GlobalHost.objects.get(id=host_id, project=project_id)
    data = AutomationCaseApiSerializer(
        AutomationCaseApi.objects.get(id=_id, automationTestCase=case_id)).data
    http_type = data['httpType']
    request_type = data['requestType']
    address = host.host + data['apiAddress']
    head = json.loads(
        serializers.serialize(
            'json', AutomationHead.objects.filter(automationCaseApi=_id)))
    header = {}
    request_parameter_type = data['requestParameterType']
    examine_type = data['examineType']
    http_code = data['httpCode']
    response_parameter_list = data['responseData']
    if http_type == 'HTTP':
        url = 'http://' + address
    else:
        url = 'https://' + address
    if data['requestParameterType'] == 'form-data':
        parameter_list = json.loads(
            serializers.serialize(
                'json',
                AutomationParameter.objects.filter(automationCaseApi=_id)))
        parameter = {}

        for i in parameter_list:
            key_ = i['fields']['name']
            value = i['fields']['value']

            try:
                if i['fields']['interrelate']:
                    interrelate_type = re.findall('(?<=<response\[).*?(?=\])',
                                                  value)
                    if interrelate_type[0] == "JSON":
                        api_id = re.findall('(?<=<response\[JSON]\[).*?(?=\])',
                                            value)
                        a = re.findall('(?<=\[").*?(?="])', value)
                        try:
                            param_data = eval(
                                json.loads(
                                    serializers.serialize(
                                        'json',
                                        AutomationTestResult.objects.filter(
                                            automationCaseApi=api_id[0])))[0]
                                ['fields']["responseData"])
                            for j in a:
                                param_data = param_data[j]
                        except Exception as e:
                            logging.exception(e)
                            record_results(
                                _id=_id,
                                url=url,
                                request_type=request_type,
                                header=header,
                                parameter=parameter,
                                host=host.name,
                                status_code=http_code,
                                examine_type=examine_type,
                                examine_data=response_parameter_list,
                                _result='ERROR',
                                code="",
                                response_data="")
                            return 'fail'
                    elif interrelate_type[0] == "Regular":
                        api_id = re.findall(
                            '(?<=<response\[Regular]\[).*?(?=\])', value)
                        pattern = re.findall('(?<=\[").*?(?="])', value)
                        param_data = json.loads(
                            serializers.serialize(
                                'json',
                                AutomationTestResult.objects.filter(
                                    automationCaseApi=api_id[0]))
                        )[-1]['fields']["responseData"]
                        param_data = re.findall(pattern[0],
                                                param_data.replace("\'",
                                                                   "\""))[0]
                    else:
                        record_results(_id=_id,
                                       url=url,
                                       request_type=request_type,
                                       header=header,
                                       parameter=parameter,
                                       host=host.name,
                                       status_code=http_code,
                                       examine_type=examine_type,
                                       examine_data=response_parameter_list,
                                       _result='ERROR',
                                       code="",
                                       response_data="")
                        return 'fail'
                    pattern = re.compile(r'<response\[.*]')
                    parameter[key_] = re.sub(pattern, str(param_data), value)

                else:
                    parameter[key_] = value
            except KeyError as e:
                logging.exception(e)
                record_results(_id=_id,
                               url=url,
                               request_type=request_type,
                               header=header,
                               parameter=parameter,
                               host=host.name,
                               status_code=http_code,
                               examine_type=examine_type,
                               examine_data=response_parameter_list,
                               _result='ERROR',
                               code="",
                               response_data="关联有误!")
                return 'fail'
        if data["formatRaw"]:
            request_parameter_type = "raw"

    else:
        parameter = AutomationParameterRawSerializer(
            AutomationParameterRaw.objects.filter(automationCaseApi=_id),
            many=True).data
        if len(parameter):
            if len(parameter[0]["data"]):
                try:
                    parameter = eval(parameter[0]["data"])
                except Exception as e:
                    logging.exception(e)
                    record_results(_id=_id,
                                   url=url,
                                   request_type=request_type,
                                   header=header,
                                   parameter=parameter,
                                   host=host.name,
                                   status_code=http_code,
                                   examine_type=examine_type,
                                   examine_data=response_parameter_list,
                                   _result='ERROR',
                                   code="",
                                   response_data="")
                    return 'fail'
            else:
                parameter = {}
        else:
            parameter = {}

    for i in head:
        key_ = i['fields']['name']
        value = i['fields']['value']
        if i['fields']['interrelate']:

            try:
                interrelate_type = re.findall('(?<=<response\[).*?(?=\])',
                                              value)
                if interrelate_type[0] == "JSON":
                    api_id = re.findall('(?<=<response\[JSON]\[).*?(?=\])',
                                        value)
                    a = re.findall('(?<=\[").*?(?="])', value)
                    try:
                        param_data = eval(
                            json.loads(
                                serializers.serialize(
                                    'json',
                                    AutomationTestResult.objects.filter(
                                        automationCaseApi=api_id[0])))[-1]
                            ['fields']["responseData"])
                        for j in a:
                            param_data = param_data[j]
                    except Exception as e:
                        logging.exception(e)
                        record_results(_id=_id,
                                       url=url,
                                       request_type=request_type,
                                       header=header,
                                       parameter=parameter,
                                       host=host.name,
                                       status_code=http_code,
                                       examine_type=examine_type,
                                       examine_data=response_parameter_list,
                                       _result='ERROR',
                                       code="",
                                       response_data="关联有误!")
                        return 'fail'
                elif interrelate_type[0] == "Regular":
                    api_id = re.findall('(?<=<response\[Regular]\[).*?(?=\])',
                                        value)
                    pattern = re.findall('(?<=\[").*?(?="])', value)
                    param_data = json.loads(
                        serializers.serialize(
                            'json',
                            AutomationTestResult.objects.filter(
                                automationCaseApi=api_id[0]))
                    )[0]['fields']["responseData"]
                    param_data = re.findall(pattern[0],
                                            param_data.replace("\'", "\""))[0]
                else:
                    record_results(_id=_id,
                                   url=url,
                                   request_type=request_type,
                                   header=header,
                                   parameter=parameter,
                                   host=host.name,
                                   status_code=http_code,
                                   examine_type=examine_type,
                                   examine_data=response_parameter_list,
                                   _result='ERROR',
                                   code="",
                                   response_data="")
                    return 'fail'
                pattern = re.compile(r'<response\[.*]')
                header[key_] = re.sub(pattern, str(param_data), value)
            except Exception as e:
                logging.exception(e)
                record_results(_id=_id,
                               url=url,
                               request_type=request_type,
                               header=header,
                               parameter=parameter,
                               host=host.name,
                               status_code=http_code,
                               examine_type=examine_type,
                               examine_data=response_parameter_list,
                               _result='ERROR',
                               code="",
                               response_data="关联有误!")
                return 'fail'
        else:
            header[key_] = value
    header["Content-Length"] = '%s' % len(str(parameter))
    try:
        if request_type == 'GET':
            code, response_data = get(header, url, request_parameter_type,
                                      parameter)
        elif request_type == 'POST':
            code, response_data = post(header, url, request_parameter_type,
                                       parameter)
        elif request_type == 'PUT':
            code, response_data = put(header, url, request_parameter_type,
                                      parameter)
        elif request_type == 'DELETE':
            code, response_data = delete(header, url, request_parameter_type,
                                         parameter)
        else:
            return 'ERROR'
    except ReadTimeout:
        logging.exception(ReadTimeout)
        record_results(_id=_id,
                       url=url,
                       request_type=request_type,
                       header=header,
                       parameter=parameter,
                       host=host.name,
                       status_code=http_code,
                       examine_type=examine_type,
                       examine_data=response_parameter_list,
                       _result='TimeOut',
                       code="408",
                       response_data="")
        return 'timeout'
    if examine_type == 'no_check':
        record_results(_id=_id,
                       url=url,
                       request_type=request_type,
                       header=header,
                       parameter=parameter,
                       host=host.name,
                       status_code=http_code,
                       examine_type=examine_type,
                       examine_data=response_parameter_list,
                       _result='PASS',
                       code=code,
                       response_data=response_data)
        return 'success'

    elif examine_type == 'json':
        if int(http_code) == code:
            if not response_parameter_list:
                response_parameter_list = "{}"
            try:
                logging.info(response_parameter_list)
                logging.info(response_data)
                result = check_json(json.loads(response_parameter_list),
                                    response_data)
            except Exception:
                logging.info(response_parameter_list)
                result = check_json(
                    eval(
                        response_parameter_list.replace('true',
                                                        'True').replace(
                                                            'false', 'False')),
                    response_data)
            if result:
                record_results(_id=_id,
                               url=url,
                               request_type=request_type,
                               header=header,
                               parameter=parameter,
                               status_code=http_code,
                               examine_type="JSON校验",
                               examine_data=response_parameter_list,
                               host=host.name,
                               _result='PASS',
                               code=code,
                               response_data=response_data)
            else:
                record_results(_id=_id,
                               url=url,
                               request_type=request_type,
                               header=header,
                               parameter=parameter,
                               status_code=http_code,
                               examine_type="JSON校验",
                               examine_data=response_parameter_list,
                               host=host.name,
                               _result='FAIL',
                               code=code,
                               response_data=response_data)
            return result
        else:
            record_results(_id=_id,
                           url=url,
                           request_type=request_type,
                           header=header,
                           parameter=parameter,
                           status_code=http_code,
                           examine_type="JSON校验",
                           examine_data=response_parameter_list,
                           host=host.name,
                           _result='FAIL',
                           code=code,
                           response_data=response_data)
            return 'fail'

    elif examine_type == 'only_check_status':
        if int(http_code) == code:
            record_results(_id=_id,
                           url=url,
                           request_type=request_type,
                           header=header,
                           parameter=parameter,
                           status_code=http_code,
                           examine_type="校验HTTP状态",
                           examine_data=response_parameter_list,
                           host=host.name,
                           _result='PASS',
                           code=code,
                           response_data=response_data)
            return 'success'
        else:
            record_results(_id=_id,
                           url=url,
                           request_type=request_type,
                           header=header,
                           parameter=parameter,
                           status_code=http_code,
                           examine_type="校验HTTP状态",
                           examine_data=response_parameter_list,
                           host=host.name,
                           _result='FAIL',
                           code=code,
                           response_data=response_data)
            return 'fail'

    elif examine_type == 'entirely_check':
        if int(http_code) == code:
            try:
                result = operator.eq(json.loads(response_parameter_list),
                                     response_data)
            except Exception as e:
                logging.exception(e)
                result = operator.eq(
                    eval(
                        response_parameter_list.replace('true',
                                                        'True').replace(
                                                            'false', 'False')),
                    response_data)
            if result:
                record_results(_id=_id,
                               url=url,
                               request_type=request_type,
                               header=header,
                               parameter=parameter,
                               status_code=http_code,
                               examine_type="完全校验",
                               examine_data=response_parameter_list,
                               host=host.name,
                               _result='PASS',
                               code=code,
                               response_data=response_data)
                return 'success'
            else:
                record_results(_id=_id,
                               url=url,
                               request_type=request_type,
                               header=header,
                               parameter=parameter,
                               status_code=http_code,
                               examine_type="完全校验",
                               examine_data=response_parameter_list,
                               host=host.name,
                               _result='FAIL',
                               code=code,
                               response_data=response_data)
                return 'fail'
        else:
            record_results(_id=_id,
                           url=url,
                           request_type=request_type,
                           header=header,
                           parameter=parameter,
                           status_code=http_code,
                           examine_type="完全校验",
                           examine_data=response_parameter_list,
                           host=host.name,
                           _result='FAIL',
                           code=code,
                           response_data=response_data)
            return 'fail'

    elif examine_type == 'Regular_check':
        if int(http_code) == code:
            try:
                logging.info(response_parameter_list)
                result = re.findall(response_parameter_list,
                                    json.dumps(response_data))
                logging.info(result)
            except Exception as e:
                logging.exception(e)
                return "fail"
            if result:
                record_results(_id=_id,
                               url=url,
                               request_type=request_type,
                               header=header,
                               parameter=parameter,
                               status_code=http_code,
                               examine_type="正则校验",
                               examine_data=response_parameter_list,
                               host=host.name,
                               _result='PASS',
                               code=code,
                               response_data=response_data)
                return 'success'
            else:
                record_results(_id=_id,
                               url=url,
                               request_type=request_type,
                               header=header,
                               parameter=parameter,
                               status_code=http_code,
                               examine_type="正则校验",
                               examine_data=response_parameter_list,
                               host=host.name,
                               _result='FAIL',
                               code=code,
                               response_data=response_data)
                return 'fail'
        else:
            record_results(_id=_id,
                           url=url,
                           request_type=request_type,
                           header=header,
                           parameter=parameter,
                           status_code=http_code,
                           examine_type="正则校验",
                           examine_data=response_parameter_list,
                           host=host.name,
                           _result='FAIL',
                           code=code,
                           response_data=response_data)
            return 'fail'

    else:
        record_results(_id=_id,
                       url=url,
                       request_type=request_type,
                       header=header,
                       parameter=parameter,
                       status_code=http_code,
                       examine_type=examine_type,
                       examine_data=response_parameter_list,
                       host=host.name,
                       _result='FAIL',
                       code=code,
                       response_data=response_data)
        return 'fail'
예제 #3
0
def test_api(host_id, case_id, project_id, _id):
    """
    执行接口测试
    :param host_id:
    :param case_id:
    :param project_id:
    :param _id:
    :return:
    """
    host = GlobalHost.objects.get(id=host_id, project=project_id)
    data = AutomationCaseApiSerializer(
        AutomationCaseApi.objects.get(id=_id,
                                      automation_test_case=case_id)).data

    http_type = data['http_type']
    request_type = data['request_type']
    address = host.host + data['api_address']
    head = json.loads(
        serializers.serialize(
            'json', AutomationHead.objects.filter(automation_case_api=_id)))
    header = {}
    request_parameter_type = data['request_parameter_type']
    examine_type = data['examine_type']
    http_code = data['http_code']
    response_parameter_list = data['response_data']
    url = 'http://' + address if http_type == "HTTP" else 'https://' + address

    if request_parameter_type == 'form-data':
        para_list = AutomationParameterSerializer(
            AutomationParameter.objects.filter(automation_case_api=_id),
            many=True).data
        parameter = {}

        for param in para_list:
            key = param['name']
            value = param['value']

            try:
                if param['interrelate']:
                    # 匹配<response>[]中间的数据
                    interrelate_type = re.findall('(?<=<response\[).*?(?=\])',
                                                  value)
                    if interrelate_type[0] == "JSON":
                        api_id = re.findall(
                            '(?<=<response\[JSON\]\[).*?(?=\])', value)
                        a = re.findall('(?<=\[").*?(?="])', value)
                        try:
                            param_data = eval(
                                json.loads(
                                    serializers.serialize(
                                        'json',
                                        AutomationTestResult.objects.filter(
                                            automation_case_api=api_id[0])))[0]
                                ['fields']['response_data'])
                            for j in a:
                                param_data = param_data[j]
                        except Exception as e:
                            logging.exception(e)
                            record_result(_id=id,
                                          url=url,
                                          request_type=request_type,
                                          header=header,
                                          parameter=parameter,
                                          host=host.name,
                                          status_code=http_code,
                                          examine_type=examine_type,
                                          examine_data=response_parameter_list,
                                          _result='Error',
                                          code="",
                                          response_data="关联有误")
                            return "fail"
                    elif interrelate_type[0] == "Regular":
                        api_id = re.findall(
                            '(?<=<response>\[Regular\[).*?(?=\])', value)
                        patten = re.findall('(?<=\[").*?(?="])')
                        param_data = json.loads(
                            serializers.serialize(
                                'json',
                                AutomationTestResult.objects.filter(
                                    automation_case_api=api_id[0])))
                        [-1]['fields']['response_data']
                        param_data = re.findall(patten[0],
                                                param_data.replace("\'",
                                                                   "\""))[0]
                    else:
                        record_result(_id=id,
                                      url=url,
                                      request_type=request_type,
                                      header=header,
                                      parameter=parameter,
                                      host=host.name,
                                      status_code=http_code,
                                      examine_type=examine_type,
                                      examine_data=response_parameter_list,
                                      _result='Error',
                                      code="",
                                      response_data="")
                        return "fail"
                    patten = re.compile(r'<response\[.*]')
                    parameter[key] = re.sub(patten, str(param_data), value)
                else:
                    parameter[key] = value
            except KeyError as e:
                logging.exception(e)
                record_result(_id=id,
                              url=url,
                              request_type=request_type,
                              header=header,
                              parameter=parameter,
                              host=host.name,
                              status_code=http_code,
                              examine_type=examine_type,
                              examine_data=response_parameter_list,
                              _result='Error',
                              code="",
                              response_data="")
                return "fail"
            if data["format_raw"]:
                request_parameter_type = "raw"
    else:
        parameter = AutomationParameterRawSerializer(
            AutomationParameterRaw.objects.filter(automation_case_api=_id))

        if len(parameter):
            if len(parameter[0]["data"]):
                try:
                    parameter = eval(parameter[0]["data"])
                except Exception as e:
                    logging.exception(e)
                    record_result(_id=id,
                                  url=url,
                                  request_type=request_type,
                                  header=header,
                                  parameter=parameter,
                                  host=host.name,
                                  status_code=http_code,
                                  examine_type=examine_type,
                                  examine_data=response_parameter_list,
                                  _result='Error',
                                  code="",
                                  response_data="")
                    return 'fail'
            else:
                parameter = {}
        else:
            parameter = {}

    for i in head:
        key = i['fields']['name']
        value = i['fields']['value']
        if i['fields']['interrelate']:
            try:
                interrelate_type = re.findall('(?<=<request\[).*?(?=\])',
                                              value)
                if interrelate_type[0] == 'json':
                    api_id = re.findall('(?<=<request\[JSON]\[).*?(?=\])',
                                        value)
                    a = re.findall('(?<=\[").*?(?="])', value)
                    try:
                        param_data = eval(
                            json.loads(
                                serializers.serialize(
                                    'json',
                                    AutomationTestResult.objects.filter(
                                        automation_case_api=api_id[0])))[-1]
                            ['fields']['responseData'])
                        for j in a:
                            param_data = param_data[j]
                    except Exception as e:
                        logging.exception(e)
                        record_result(_id=id,
                                      url=url,
                                      request_type=request_type,
                                      header=header,
                                      parameter=parameter,
                                      host=host.name,
                                      status_code=http_code,
                                      examine_type=examine_type,
                                      examine_data=response_parameter_list,
                                      _result='Error',
                                      code="",
                                      response_data="")
                        return 'fail'
                elif interrelate_type[0] == "Regular":
                    api_id = re.findall('(?<=<response>\[Regular\[).*?(?=\])',
                                        value)
                    patten = re.findall('(?<=\[").*?(?="])')
                    param_data = json.loads(
                        serializers.serialize(
                            'json',
                            AutomationTestResult.objects.filter(
                                automation_case_api=api_id[0])))
                    [-1]['fields']['response_data']
                    param_data = re.findall(patten[0],
                                            param_data.replace("\'", "\""))[0]
                else:
                    record_result(_id=id,
                                  url=url,
                                  request_type=request_type,
                                  header=header,
                                  parameter=parameter,
                                  host=host.name,
                                  status_code=http_code,
                                  examine_type=examine_type,
                                  examine_data=response_parameter_list,
                                  _result='Error',
                                  code="",
                                  response_data="")
                    return "fail"
                patten = re.compile(r'<response\[.*]')
                header[key] = re.sub(patten, str(param_data), value)
            except Exception as e:
                logging.exception(e)
                record_result(_id=id,
                              url=url,
                              request_type=request_type,
                              header=header,
                              parameter=parameter,
                              host=host.name,
                              status_code=http_code,
                              examine_type=examine_type,
                              examine_data=response_parameter_list,
                              _result='Error',
                              code="",
                              response_data="")
                return 'fail'
        else:
            header[key] = value
    try:
        if request_type == "GET":
            code, response_data, header_data = get(header, url,
                                                   request_parameter_type,
                                                   parameter)
        else:
            code, response_data, header_data = post(header, url,
                                                    request_parameter_type,
                                                    parameter)
    except ReadTimeout:
        logging.exception(ReadTimeout)
        record_result(_id=id,
                      url=url,
                      request_type=request_type,
                      header=header,
                      parameter=parameter,
                      host=host.name,
                      status_code=http_code,
                      examine_type=examine_type,
                      examine_data=response_parameter_list,
                      _result='Timeout',
                      code=code,
                      response_data=response_data)
        return 'timeout'
    if examine_type == "no_check":
        record_result(_id=_id,
                      url=url,
                      request_type=request_type,
                      header=header,
                      parameter=parameter,
                      host=host.name,
                      status_code=http_code,
                      examine_type=examine_type,
                      examine_data=response_parameter_list,
                      _result='PASS',
                      code=code,
                      response_data=response_data)
        return 'success'
    elif examine_type == 'json':
        if int(http_code) == code:
            if not response_parameter_list:
                response_parameter_list = '{}'
            try:
                logging.info(response_parameter_list)
                logging.info(response_data)
                result = check_json(json.loads(response_parameter_list),
                                    response_data)
            except Exception:
                logging.info(response_parameter_list)
                result = check_json(
                    eval(
                        response_parameter_list.replace(
                            'true',
                            'True').replace('false',
                                            'False').replace('null', 'None')),
                    response_data)
            if result:
                record_result(_id=_id,
                              url=url,
                              request_type=request_type,
                              header=header,
                              parameter=parameter,
                              host=host.name,
                              status_code=http_code,
                              examine_type='JSON校验',
                              examine_data=response_parameter_list,
                              _result='Pass',
                              code=code,
                              response_data=response_data)
            else:
                record_result(_id=_id,
                              url=url,
                              request_type=request_type,
                              header=header,
                              parameter=parameter,
                              host=host.name,
                              status_code=http_code,
                              examine_type='JSON校验',
                              examine_data=response_parameter_list,
                              _result='FAIL',
                              code=code,
                              response_data=response_data)
            return result
        else:
            record_result(_id=_id,
                          url=url,
                          request_type=request_type,
                          header=header,
                          parameter=parameter,
                          host=host.name,
                          status_code=http_code,
                          examine_type='JSON校验',
                          examine_data=response_parameter_list,
                          _result='FAIL',
                          code=code,
                          response_data=response_data)
            return 'fail'
예제 #4
0
def test_api(host, case_id, _id, time):
    """
    执行接口测试
    :param host: 测试的host域名
    :param case_id: 测试用例ID
    :param _id:  用例下接口ID
    :param time: 测试时间
    :return:
    """
    data = AutomationCaseApiSerializer(
        AutomationCaseApi.objects.get(id=_id, automationTestCase=case_id)).data
    http_type = data['httpType']
    request_type = data['requestType']
    address = host.host + data['apiAddress']
    head = json.loads(
        serializers.serialize(
            'json', AutomationHead.objects.filter(automationCaseApi=_id)))
    header = {}
    request_parameter_type = data['requestParameterType']
    examine_type = data['examineType']
    http_code = data['httpCode']
    response_parameter_list = data['responseData']
    if http_type == 'HTTP':
        url = 'http://' + address
    else:
        url = 'https://' + address
    if data['requestParameterType'] == 'form-data':
        parameter_list = json.loads(
            serializers.serialize(
                'json',
                AutomationParameter.objects.filter(automationCaseApi=_id)))
        parameter = {}

        for i in parameter_list:
            key_ = i['fields']['name']
            value = i['fields']['value']

            try:
                if i['fields']['interrelate']:
                    api_id = re.findall('(?<=<response\[).*?(?=\])', value)
                    a = re.findall('(?<=\[").*?(?="])', value)
                    try:
                        value = eval(
                            json.loads(
                                serializers.serialize(
                                    'json',
                                    AutomationCaseTestResult.objects.filter(
                                        automationCaseApi=api_id[0],
                                        testTime=time)))[0]['fields']
                            ["responseData"])
                        for j in a:
                            value = value[j]
                    except:
                        record_auto_results(_id=_id,
                                            header=header,
                                            parameter=parameter,
                                            _result='ERROR',
                                            code="",
                                            response_data="",
                                            time=time)
                        return 'fail'
            except KeyError:
                record_auto_results(_id=_id,
                                    header=header,
                                    parameter=parameter,
                                    _result='ERROR',
                                    code="",
                                    response_data="",
                                    time=time)
                return 'fail'

            parameter[key_] = value
    else:
        parameter = AutomationParameterRawSerializer(
            AutomationParameterRaw.objects.filter(automationCaseApi=_id),
            many=True).data
        if len(parameter[0]["data"]):
            try:
                parameter = eval(parameter[0]["data"])
            except:
                record_auto_results(_id=_id,
                                    header=header,
                                    parameter=parameter,
                                    _result='ERROR',
                                    code="",
                                    response_data="",
                                    time=time)
                return 'fail'
        else:
            parameter = []

    for i in head:
        key_ = i['fields']['name']
        value = i['fields']['value']
        if i['fields']['interrelate']:

            try:
                api_id = re.findall('(?<=<response\[).*?(?=\])', value)
                a = re.findall('(?<=\[").*?(?="])', value)
                value = eval(
                    json.loads(
                        serializers.serialize(
                            'json',
                            AutomationCaseTestResult.objects.filter(
                                automationCaseApi=api_id[0],
                                testTime=time)))[0]['fields']["responseData"])
                for j in a:
                    value = value[j]
            except Exception as e:
                logging.exception("ERROR")
                logging.error(e)
                record_auto_results(_id=_id,
                                    header=header,
                                    parameter=parameter,
                                    _result='ERROR',
                                    code="",
                                    response_data="",
                                    time=time)
                return 'fail'

        header[key_] = value

    header["Content-Length"] = '%s' % len(str(parameter))
    try:
        if request_type == 'GET':
            code, response_data = get(header, url, request_parameter_type,
                                      parameter)
        elif request_type == 'POST':
            code, response_data = post(header, url, request_parameter_type,
                                       parameter)
        elif request_type == 'PUT':
            code, response_data = put(header, url, request_parameter_type,
                                      parameter)
        elif request_type == 'DELETE':
            code, response_data = delete(header, url, request_parameter_type,
                                         parameter)
        else:
            return 'ERROR'
    except ReadTimeout:
        record_auto_results(_id=_id,
                            header=header,
                            parameter=parameter,
                            _result='TimeOut',
                            code="",
                            response_data="",
                            time=time)
        return 'timeout'
    if examine_type == 'no_check':
        record_auto_results(_id=_id,
                            header=header,
                            parameter=parameter,
                            _result='PASS',
                            code=code,
                            response_data=response_data,
                            time=time)
        return 'success'

    elif examine_type == 'json':
        if int(http_code) == code:
            try:
                result = check_json(eval(response_parameter_list),
                                    response_data)
            except:
                result = check_json(
                    eval(
                        response_parameter_list.replace('true',
                                                        'True').replace(
                                                            'false', 'False')),
                    response_data)
            if result:
                record_auto_results(_id=_id,
                                    header=header,
                                    parameter=parameter,
                                    _result='PASS',
                                    code=code,
                                    response_data=response_data,
                                    time=time)
            else:
                record_auto_results(_id=_id,
                                    header=header,
                                    parameter=parameter,
                                    _result='FAIL',
                                    code=code,
                                    response_data=response_data,
                                    time=time)
            return result
        else:
            record_auto_results(_id=_id,
                                header=header,
                                parameter=parameter,
                                _result='FAIL',
                                code=code,
                                response_data=response_data,
                                time=time)
            return 'fail'

    elif examine_type == 'only_check_status':
        if int(http_code) == code:
            record_auto_results(_id=_id,
                                header=header,
                                parameter=parameter,
                                _result='PASS',
                                code=code,
                                response_data=response_data,
                                time=time)
            return 'success'
        else:
            record_auto_results(_id=_id,
                                header=header,
                                parameter=parameter,
                                _result='FAIL',
                                code=code,
                                response_data=response_data,
                                time=time)
            return 'fail'

    elif examine_type == 'entirely_check':
        if int(http_code) == code:
            try:
                result = operator.eq(eval(response_parameter_list),
                                     response_data)
            except:
                result = operator.eq(
                    eval(
                        response_parameter_list.replace('true',
                                                        'True').replace(
                                                            'false', 'False')),
                    response_data)
            if result:
                record_auto_results(_id=_id,
                                    header=header,
                                    parameter=parameter,
                                    _result='PASS',
                                    code=code,
                                    response_data=response_data,
                                    time=time)
                return 'success'
            else:
                record_auto_results(_id=_id,
                                    header=header,
                                    parameter=parameter,
                                    _result='FAIL',
                                    code=code,
                                    response_data=response_data,
                                    time=time)
                return 'fail'
        else:
            record_auto_results(_id=_id,
                                header=header,
                                parameter=parameter,
                                _result='FAIL',
                                code=code,
                                response_data=response_data,
                                time=time)
            return 'fail'

    elif examine_type == 'Regular_check':
        if int(http_code) == code:
            try:
                result = re.findall(response_parameter_list,
                                    str(response_data))
            except:
                return "fail"
            if result:
                record_auto_results(_id=_id,
                                    header=header,
                                    parameter=parameter,
                                    _result='PASS',
                                    code=code,
                                    response_data=response_data,
                                    time=time)
                return 'fail'
            else:
                record_auto_results(_id=_id,
                                    header=header,
                                    parameter=parameter,
                                    _result='FAIL',
                                    code=code,
                                    response_data=response_data,
                                    time=time)
                return 'fail'
        else:
            record_auto_results(_id=_id,
                                header=header,
                                parameter=parameter,
                                _result='FAIL',
                                code=code,
                                response_data=response_data,
                                time=time)
            return 'fail'

    else:
        record_auto_results(_id=_id,
                            header=header,
                            parameter=parameter,
                            _result='FAIL',
                            code=code,
                            response_data=response_data,
                            time=time)
        return 'fail'