Beispiel #1
0
def save_cookie(header, address, timeout=8, data=None, files=None):
    """
    保存cookie信息
    :param header: 请求头
    :param address: 请求地址
    :param timeout: 超时时间
    :param data: 请求参数
    :param files: 文件路径
    :return:
    """
    cookie_path = setupMain.PATH + '/aff/data/cookie.txt'
    response = requests.post(url=address, data=data, headers=header, timeout=timeout, files=files)
    try:
        cookie = response.cookies.get_dict()
        for i in cookie:
            values = cookie[i]
            with open(cookie_path, 'w+', encoding='utf-8')as f:
                f.write(i+"="+values)
            logging.debug("cookies已保存,结果为:%s" % (i+"="+values))
    except json.decoder.JSONDecodeError:
        return response.status_code, ''
    except simplejson.errors.JSONDecodeError:
        return response.status_code, ''
    except Exception as e:
        logging.exception('ERROR')
        logging.error(e)
        raise
Beispiel #2
0
 def get_relevance_conf(self):
     relevance = dict()
     logging.debug("读取初始关联文件内容:   %s" % self.host.items())
     for key, value in self.host.items():
         relevance[key] = function_replace(value)
     logging.debug("初始关联内容数据处理后:   %s" % relevance)
     return relevance
Beispiel #3
0
def get_relevance(data, relevance_list, relevance):
    """
    从返回结果中获取关联键的值
    :param data:  返回结果
    :param relevance_list:  关联键列表
    :param relevance: 关联对象
    :return:
    """
    # 关联键是否时list
    if not relevance_list:
        return relevance
    logging.debug("从返回结果中根据关联键%s提取值" % relevance_list)
    if isinstance(relevance_list, list):
        # 遍历关联键
        for j in relevance_list:
            # 从结果中提取关联键的值
            relevance_value = get_value(data, j)
            if relevance_value:
                # 考虑到一个关联键,多个值
                if j in relevance:
                    if isinstance(relevance[j], list):
                        a = relevance[j]
                        a.append(relevance_value)
                        relevance[j] = a
                    else:
                        a = relevance[j]
                        b = list()
                        b.append(a)
                        b.append(relevance_value)
                        relevance[j] = b
                else:
                    relevance[j] = relevance_value
            else:
                return False
    else:
        relevance_value = get_value(data, relevance_list)
        if relevance_value:
            # 考虑到一个关联键,多个值
            if relevance_list in relevance:
                if isinstance(relevance_list, list):
                    a = relevance[relevance_list]
                    a.append(relevance_value)
                    relevance[relevance_list] = a
                else:
                    a = relevance[relevance_list]
                    b = list()
                    b.append(a)
                    b.append(relevance_value)
                    relevance[relevance_list] = a
            else:
                relevance[relevance_list] = relevance_value
    logging.debug("提取后,关联键对象\n%s" % relevance)
    return relevance
Beispiel #4
0
def send_request(data, host, address, port, relevance, _path, success):
    """
    再次封装请求
    :param data: 测试用例
    :param host: 测试地址
    :param address: 接口地址
    :param relevance: 关联对象
    :param port: 端口地址
    :param _path: case路径
    :param success: 全局结果
    :return:
    """
    # logging = logdir.MyLog()
    config = conf.Config()
    logging.info("=" * 100)
    header = read_param.read_param(data["test_name"], data["headers"],
                                   relevance, _path, success)  # 处理请求头
    logging.debug("请求头处理结果:  %s" % header)
    parameter = read_param.read_param(data["test_name"], data["parameter"],
                                      relevance, _path, success)  # 处理请求参数
    logging.debug("请求参数处理结果:  %s" % header)

    try:
        # 如果用例中写了host和address,则使用用例中的host和address,若没有则使用全局的
        host = data["host"]
    except KeyError:
        pass
    try:
        address = data["address"]
    except KeyError:
        pass
    host = config.host  # host处理,读取配置文件中的host
    address = param_manage.manage(address, relevance)
    logging.debug("host处理结果:  %s" % host)
    if not host:
        raise failureException("接口请求地址为空  %s" % data["headers"])
    logging.info("请求接口:%s" % str(data["test_name"]))
    logging.info("请求地址:%s" % data["http_type"] + "://" + host + ":" + port +
                 address)
    logging.info("请求头: %s" % str(header))
    logging.info("请求参数: %s" % str(parameter))
    if data["request_type"].lower() == 'post':
        if data["file"]:
            with allure.step("POST上传文件"):
                allure.attach("请求接口:", str(data["test_name"]))
                allure.attach(
                    "请求地址",
                    data["http_type"] + "://" + host + ":" + port + address)
                allure.attach("请求头", str(header))
                allure.attach("请求参数", str(parameter))
            result = config_http.post(
                header=header,
                address=data["http_type"] + "://" + host + ":" + port +
                address,
                request_parameter_type=data["parameter_type"],
                files=parameter,
                timeout=data["timeout"])
        else:
            with allure.step("POST请求接口"):
                allure.attach("请求接口:", str(data["test_name"]))
                allure.attach(
                    "请求地址",
                    data["http_type"] + "://" + host + ":" + port + address)
                allure.attach("请求头", str(header))
                allure.attach("请求参数", str(parameter))
            logging.info("POST请求接口")
            result = config_http.post(
                header=header,
                address=data["http_type"] + "://" + host + ":" + port +
                address,
                request_parameter_type=data["parameter_type"],
                data=parameter,
                timeout=data["timeout"])
    elif data["request_type"].lower() == 'get':
        with allure.step("GET请求接口"):
            allure.attach("请求接口:", str(data["test_name"]))
            allure.attach(
                "请求地址",
                data["http_type"] + "://" + host + ":" + port + address)
            allure.attach("请求头", str(header))
            allure.attach("请求参数", str(parameter))
        logging.info("GET请求接口")
        result = config_http.get(header=header,
                                 address=data["http_type"] + "://" + host +
                                 ":" + port + address,
                                 data=parameter,
                                 timeout=data["timeout"])
    elif data["request_type"].lower() == "put":
        if data["file"]:
            with allure.step("PUT上传文件"):
                allure.attach("请求接口:", str(data["test_name"]))
                allure.attach(
                    "请求地址",
                    data["http_type"] + "://" + host + ":" + port + address)
                allure.attach("请求头", str(header))
                allure.attach("请求参数", str(parameter))
            logging.info("PUT上传文件")
            result = config_http.put(
                header=header,
                address=data["http_type"] + "://" + host + ":" + port +
                address,
                request_parameter_type=data["parameter_type"],
                files=parameter,
                timeout=data["timeout"])
        else:
            with allure.step("PUT请求接口"):
                allure.attach("请求接口:", str(data["test_name"]))
                allure.attach(
                    "请求地址",
                    data["http_type"] + "://" + host + ":" + port + address)
                allure.attach("请求头", str(header))
                allure.attach("请求参数", str(parameter))
            logging.info("PUT请求接口")
            result = config_http.put(
                header=header,
                address=data["http_type"] + "://" + host + ":" + port +
                address,
                request_parameter_type=data["parameter_type"],
                data=parameter,
                timeout=data["timeout"])
    elif data["request_type"].lower() == "delete":
        with allure.step("DELETE请求接口"):
            allure.attach("请求接口:", str(data["test_name"]))
            allure.attach(
                "请求地址",
                data["http_type"] + "://" + host + ":" + port + address)
            allure.attach("请求头", str(header))
            allure.attach("请求参数", str(parameter))
        logging.info("DELETE请求接口")
        result = config_http.delete(header=header,
                                    address=data["http_type"] + "://" + host +
                                    ":" + port + address,
                                    data=parameter,
                                    timeout=data["timeout"])
    else:
        result = {"code": False, "data": False}
    logging.info("接口请求结果:\n %s" % str(result))
    return result
Beispiel #5
0
def send_request(data, host, address, _path, relevance=None):
    """
    封装请求
    :param data: 测试用例
    :param host: 测试host
    :param address: 接口地址
    :param relevance: 关联对象
    :param _path: case路径
    :return:
    """
    logging.info("=" * 100)
    header = readParameter.read_param(data["test_name"], data["headers"],
                                      _path, relevance)
    if data["cookies"] is True:
        header["Cookie"] = initializeCookie.ini_cookie()
    logging.debug("请求头处理结果:%s" % header)
    parameter = readParameter.read_param(data["test_name"], data["parameter"],
                                         _path, relevance)
    logging.debug("请求参数处理结果:%s" % parameter)
    try:
        host = data["host"]
    except KeyError:
        pass
    try:
        address = data["address"]
    except KeyError:
        pass
    host = confManage.host_manage(host)
    address = replaceRelevance.replace(address, relevance)
    logging.debug("host处理结果: %s" % host)
    if not host:
        raise Exception("接口请求地址为空 %s" % data["headers"])
    logging.info("请求接口:%s" % str(data["test_name"]))
    logging.info("请求地址:%s" % data["http_type"] + "://" + host + address)
    logging.info("请求头: %s" % str(header))
    logging.info("请求参数: %s" % str(parameter))
    if data["test_name"] == 'password正确':
        with allure.step("保存cookie信息"):
            allure.attach("请求接口:", str(data["test_name"]))
            allure.attach("请求地址", data["http_type"] + "://" + host + address)
            allure.attach("请求头", str(header))
            allure.attach("请求参数", str(parameter))
            api_method.save_cookie(header=header,
                                   address=data["http_type"] + "://" + host +
                                   address,
                                   data=parameter)

    if data["request_type"].lower() == 'post':
        logging.info("请求方法: POST")
        if data["file"]:
            with allure.step("POST上传文件"):
                allure.attach("请求接口:", str(data["test_name"]))
                allure.attach("请求地址",
                              data["http_type"] + "://" + host + address)
                allure.attach("请求头", str(header))
                allure.attach("请求参数", str(parameter))

            result = api_method.post(
                header=header,
                address=data["http_type"] + "://" + host + address,
                request_parameter_type=data["parameter_type"],
                files=parameter,
                timeout=data["timeout"])
        else:
            with allure.step("POST请求接口"):
                allure.attach("请求接口:", str(data["test_name"]))
                allure.attach("请求地址",
                              data["http_type"] + "://" + host + address)
                allure.attach("请求头", str(header))
                allure.attach("请求参数", str(parameter))
            result = api_method.post(
                header=header,
                address=data["http_type"] + "://" + host + address,
                request_parameter_type=data["parameter_type"],
                data=parameter,
                timeout=data["timeout"])
    elif data["request_type"].lower() == 'get':
        with allure.step("GET请求接口"):
            allure.attach("请求接口:", str(data["test_name"]))
            allure.attach("请求地址", data["http_type"] + "://" + host + address)
            allure.attach("请求头", str(header))
            allure.attach("请求参数", str(parameter))
            logging.info("请求方法: GET")
        result = api_method.get(header=header,
                                address=data["http_type"] + "://" + host +
                                address,
                                data=parameter,
                                timeout=data["timeout"])
    elif data["request_type"].lower() == 'put':
        logging.info("请求方法: PUT")
        if data["file"]:
            with allure.step("PUT上传文件"):
                allure.attach("请求接口:", str(data["test_name"]))
                allure.attach("请求地址",
                              data["http_type"] + "://" + host + address)
                allure.attach("请求头", str(header))
                allure.attach("请求参数", str(parameter))
            result = api_method.post(
                header=header,
                address=data["http_type"] + "://" + host + address,
                request_parameter_type=data["parameter_type"],
                files=parameter,
                timeout=data["timeout"])
        else:
            with allure.step("PUT请求接口"):
                allure.attach("请求接口:", str(data["test_name"]))
                allure.attach("请求地址",
                              data["http_type"] + "://" + host + address)
                allure.attach("请求头", str(header))
                allure.attach("请求参数", str(parameter))
            result = api_method.post(
                header=header,
                address=data["http_type"] + "://" + host + address,
                request_parameter_type=data["parameter_type"],
                data=parameter,
                timeout=data["timeout"])
    elif data["request_type"].lower() == 'delete':
        with allure.step("DELETE请求接口"):
            allure.attach("请求接口:", str(data["test_name"]))
            allure.attach("请求地址", data["http_type"] + "://" + host + address)
            allure.attach("请求头", str(header))
            allure.attach("请求参数", str(parameter))
        logging.info("请求方法: DELETE")
        result = api_method.get(header=header,
                                address=data["http_type"] + "://" + host +
                                address,
                                data=parameter,
                                timeout=data["timeout"])
    else:
        result = {"code": False, "data": False}
    logging.info("请求接口结果:\n %s" % str(result))
    return result