zoukankan      html  css  js  c++  java
  • python接口测试中—Requests模块的使用

    Requests模块的使用

    中文文档API:http://2.python-requests.org/en/master/

    1、发送get、post请求

    import requests
    reponse = requests.get("http://www.baidu.com")
    reponse = requests.post("http://www.baidu.com")

    2、响应的属性

    • 查看响应内容

      • response.text 属性

      • respone.content.decode('utf8') 属性,字节形式的需要使用decode解码

    • 查看响应码 response.status_code 属性

    • 查看响应头 respone.headers 属性

    • 查看cookie信息 respone.cookies 属性

    • 查看请求方法 respone.request 属性

    • 如何解决充值接口进行充值之前需要先调用登录接口进行登录?

       方法一:可通过创建session对象,自动保存上次请求的cookie信息,可解决鉴权、授权的问题。

    import requests
    from requests.sessions import Session
    
    # 创建一个session对象(会话)
    # 作用:自动保存上次请求的cookie信息
    session = Session()
    
    # 注册接口
    register_url = "http://ip:port/futureloan/mvc/api/member/register"
    register_data = {'mobilephone':'18814726727','pwd':'123456','regname':'一纪'}
    register_response = session.post(url=register_url,data=register_data)
    # print(register_response.status_code)
    print(register_response.text)
    
    # 登录接口
    login_url = "http://ip:port/futureloan/mvc/api/member/login"
    login_data = {'mobilephone':'18814726727','pwd':'123456'}
    login_response = requests.get(url=login_url,data=login_data)
    print(login_response.text)
    
    # 充值接口
    rech_url = "http://ip:port/futureloan/mvc/api/member/recharge"
    rech_data = {'mobilephone':'18814726727','amount':'200'}
    rech_response = requests.get(url=rech_url,data=rech_data)
    print(rech_response.text)

    输出结果为:

        方法二:通过在requsets请求中传入cookies信息,也可解决鉴权、授权的问题。

    import requests
    # 登陆接口
    login_url = "http://ip:port/futureloan/mvc/api/member/login"
    login_data = {'mobilephone':'18814726727','pwd':'123456'}
    login_response = requests.post(url=login_url,data=login_data)
    print(login_response.text)
    print(login_response.cookies)
    cookies = login_response.cookies
    
    # 充值接口
    rech_url = "http://ip:port/futureloan/mvc/api/member/recharge"
    rech_data = {'mobilephone':'18814726727','amount':'200'}
    rech_response = requests.post(url=rech_url,data=rech_data,cookies=cookies)
    print(rech_response.text)

    输出结果为:

    •  heraders参数应用

    headers = {
        "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.35 Safari/537.36",
        # "Token":"",
        "cookie":"JSESSIONID=5039A5FD7567C7C78B8180C50D340A5F",   # 请求的cookie信息
        "content-Type":"application/x-www-form-urlencoded"        # post请求格式
    }
    rech_response = requests.post(url=rech_url,data=rech_data,headers=headers)

    3、封装一个自己的requests类

     目的:为了根据用例中的请求方法,来决定发起什么类型的请求。

               为了输出loggib日志

              HttpRequests类用来直接发送请求不记录cookies信息的;而HttpRequestsCookies类可以记录cookies信息。

    import requests
    class HttpRequests():
        # 直接发送请求而不记录cookies信息的
        def request(self,method,url,params=None,data=None,headers=None,cookies=None,json=None):
            method = method.lower()
            # 判断请求的方法是post还是get
            if method == "post":
                # 判断post请求是否需要使用json来传参(适用于接口参数中有使用json传参的)
                if json:
                    # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,json)
                    return requests.post(url=url,json=json,headers=headers,cookies=cookies)
                else:
                    # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,data))
                    return requests.post(url=url, data=data, headers=headers, cookies=cookies)
            elif method == "get":
                # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,params))
                return requests.get(url=url, params=params, headers=headers, cookies=cookies)
    
    class HttpRequestsCookies():
        # 发送请求且记录cookies信息,给下一次使用
        def __init__(self):
            # 创建一个session对象
            self.session = requests.sessions.Session()
        def request(self,method,url,params=None,data=None,headers=None,cookies=None,json=None):
            method = method.lower()
            # 判断请求的方法是post还是get
            if method == "post":
                # 判断post请求是否需要使用json来传参(适用于接口参数中有使用json传参的)
                if json:
                    # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,data))
                    return self.session.post(url=url,json=json,headers=headers,cookies=cookies)
                else:
                    # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,data))
                    return self.session.post(url=url, data=data, headers=headers, cookies=cookies)
            elif method == "get":
                # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,params))
                return self.session.get(url=url, params=params, headers=headers, cookies=cookies)
        # 断开session连接
        def close(self):
            self.session.close()
      
    if __name__ == "__main__":
        r = HttpRequestsCookies()
        # 登录接口
        login_url = "http://ip:port/futureloan/mvc/api/member/login"
        login_data = {'mobilephone': '18814726727', 'pwd': '123456'}
        response = r.request('post',url=login_url, data=login_data)
        print(response.text)
        # 充值接口
        rech_url = "http://ip:port/futureloan/mvc/api/member/recharge"
        rech_data = {'mobilephone': '18814726727', 'amount': '200'}
        response = r.request('post', url=rech_url, data=rech_data)
        print(response.text)

    输出结果为:

  • 相关阅读:
    加密算法整理
    NSURLConnection类说明
    ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)
    "ld: library not found for l...." 问题的解决
    ios5 自定义导航条问题
    objectivec 语言知识点
    JSON
    [转]XCode中修改缺省公司名称/开发人员名称
    [转]iPhone开源项目汇总
    清除SQL 数据库日志 欧阳锋
  • 原文地址:https://www.cnblogs.com/wanglle/p/11581677.html
Copyright © 2011-2022 走看看