• 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)

    输出结果为:

  • 相关阅读:
    ASE19团队项目 beta阶段 model组 scrum report list
    ASE19团队项目 beta阶段 model组 scrum7 记录
    ASE19团队项目 beta阶段 model组 scrum6 记录
    ASE19团队项目 beta阶段 model组 scrum5 记录
    ASE19团队项目 beta阶段 model组 scrum4 记录
    ASE19团队项目 beta阶段 model组 scrum3 记录
    ASE19团队项目 beta阶段 model组 scrum2 记录
    ASE19团队项目 beta阶段 model组 scrum1 记录
    【ASE模型组】Hint::neural 模型与case study
    【ASE高级软件工程】第二次结对作业
  • 原文地址:https://www.cnblogs.com/wanglle/p/11581677.html
Copyright © 2020-2023  润新知