python接口测试中—Requests模块的使用

Posted wanglle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

 

 

输出结果为:

技术图片

 

以上是关于python接口测试中—Requests模块的使用的主要内容,如果未能解决你的问题,请参考以下文章

Python接口测试-使用requests模块发送GET请求

Python接口测试-使用requests模块发送post请求

Python接口测试,Requests模块讲解:GETPOSTCookiesSession等

Python接口自动化-requests模块之post请求

python+requests接口自动化测试实战

我也是第一次知道,正流行的接口测试工具requests库原来这么好用!