利用requests做接口测试

hkt 发布于 2025-07-24 39 次阅读


Requests 是一个优雅而简单的 Python HTTP 库,专门为人类设计,让 HTTP 请求变得非常简单直观。它是 Python 中最受欢迎的第三方库之一,被广泛用于网络爬虫、API 调用和 Web 服务交互。

主要特点

  1. 简单易用:API 设计非常人性化
  2. 自动内容解码:自动处理响应内容编码
  3. 国际化支持:支持国际化域名和 URL
  4. 连接保持:支持 HTTP 持久连接
  5. SSL 验证:支持 HTTPS 请求验证
  6. 超时控制:可以设置请求超时时间
pip install requests   #安装方法

requests的基本格式

传参的方式

地址栏传参

请求体传参

其他传参

鉴权的依赖

手动添加token:通过json.loads()将响应体数据序列化为python对象,然后然后通过.get("token")将token的值给提取出来

login_url = 'http://36.139.193.99:8088/auth'
login_data = """
    {
"username":"admin",
"password":"YuRC0WZSA/wrQFqTUWEs5pUYcQfArxhrxV4/2H6nzvZNTjm/0drJkh1sEOvrlZ2YNzdxfxCP9igtn45Y9pFVLv77V1uEx0DpL/VHzTTlOfc2f3hYc7qGZqwGRr3bwjD6Aonnq/Tp5ghha5+VmxQ8qvK0vuaKx0L3ghi38e3xjyg="
}
"""

mime = {"content-type": "application/json"}
res6 = requests.request(method="post", url=login_url, data=login_data, headers=mime)
# 使用json.loads将响应体数据序列化为python的对象
res_obj = json.loads(res6.text)
# 获取token
token = res_obj.get("token")
# 将token对应的值存放在请求头的字典中
token_dict = {"Authorization": "Bearer "+token}

手动添加cookie:

result.headers["Set-Cookie"] #提取cookie内容,字符串类型
cookie = result.cookies #提取cookie,CookieJar类型
一个添加到头部headers=,一个添加到请求字段cookies=cookie中。

自动添加:

通过创建session对象并且给session对象加以属性来配置默认关键字和参数,类似于默认值。

cookie:使用Session对象发送请求,Session对象会自动存储和发送cookie。
token: 使用Session对象发送请求时,可以使用Session对象headers属性关联请求头信息。
Session对象headers属性只要被更新,以后的请求都会使用更新之后的headers。
Session对象:
cookies属性:自动存储和发送cookie
headers属性:配置发送请求时的请求头部信息, 只要headers属性的值被更改,后续的请求都会使用更改时候的headers。
在发送请求时,使用请求的关键字参数headers, 可以给单独的请求添加临时的请求头字段,

bpm_session = requests.sessions.Session()   #创建session对象
login_url = 'http://36.139.193.99:8088/auth'
login_data = {
    "username":"admin",
    "password":"YuRC0WZSA/wrQFqTUWEs5pUYcQfArxhrxV4/2H6nzvZNTjm/0drJkh1sEOvrlZ2YNzdxfxCP9igtn45Y9pFVLv77V1uEx0DpL/VHzTTlOfc2f3hYc7qGZqwGRr3bwjD6Aonnq/Tp5ghha5+VmxQ8qvK0vuaKx0L3ghi38e3xjyg="
}
login_res = bpm_session.request(method="post", url=login_url, json=login_data)
token = login_res.json().get("token")

bpm_session.headers["Authorization"] = "Bearer "+token

CookieJar对象的几个常用方法

  • keys():获取所有Cookie的key,以列表返回
  • values():获取所有Cookie的value,以列表返回
  • items():获取所有Cookie的key和value,以元组列表的形式返回
  • list_domains():获取所有Cookie的domain,以列表返回
  • list_paths():获取所有Cookie的path,以列表返回
  • get_dict():将所有Cookie的key和value组成字典返回
  • update():实现两个Cookie的合并,把一个Cookie加到另外一个Cookie中

Response对象

request/get/post/put/delete方法返回的都是一个Response对象,它包含服务器响应的所有信息,其常用属性/方法如下:

  • url:获取请求的URL地址
  • status_code:获取响应的状态码
  • reason:获取响应的状态码描述信息
  • headers:获取响应消息的头部,返回的是字典类型
  • json():获取响应body,以json编码返回(返回的是字典类型),只有当响应是json格式的时候,才能调用
  • text:获取响应body,以字符串的类型返回,无论响应是xml还是json格式,都可以调用text属性来获取响应body
  • content:把响应的内容以bytes类型返回
  • encoding:获取响应的内容编码格式
  • elapsed:从发送请求到收到响应之间的耗时,即响应时间
  • cookies:获取响应中的cookie信息,返回的是CookieJar

思考

add_org_url = "http://36.139.193.99:8088/api/org/v1/org/addOrg"
add_org_data ='''{
        "code": "requestsAddOrg",
        "demId": %s,
        "exceedLimitNum": 0,
        "grade": "",
        "limitNum": 0,
        "name": "测试添加的组织",
        "nowNum": 0,
        "orderNo": 0,
        "parentId": "0"
    } 
''' %dem_id
add_org_data2 ={
        "code": "requestsAddOrg",
        "demId": dem_id,
        "exceedLimitNum": 0,
        "grade": "",
        "limitNum": 0,
        "name": "测试添加的组织",
        "nowNum": 0,
        "orderNo": 0,
        "parentId": "0"
    }
# 添加之前删除
db.delete('delete from uc_org where CODE_="requestsAddOrg";')
res2 = bpm_session.request(method="post", url=add_org_url, data=add_org_data, headers={"content-type": "application/json"})
print(res2.json())

# res2 = bpm_session.request(method="post", url=add_org_url, json=add_org_data2)
# print(res2.json())

# str1 = json.dumps(add_org_data, ensure_ascii=False)
# print(str1)

#第一种方式使用data传参,会导致数据必须为字符串,需要头部添加json类型,需要在已有{}的情况下只能使用%拼接变量,最后能够在抓包的时候看到中文的数据
#第二种方式使用json传参,直接以字典形式传参,直接使用变量,但是在抓包的时候只能看见未编码的中文,因为json传参会调用json.dumps(add_org_data, ensure_ascii=Ture)的形式使中文乱码。
此作者没有提供个人介绍。
最后更新于 2025-07-28