1.为什么学习 Requests(对比 Postman)
在学习接口测试时,很多人最先接触到的工具都是 Postman。
Postman 提供了可视化界面 ,我们只需要填写请求地址、请求参数以及请求头等信息,就能够快速完成接口调试,因此对于接口学习和接口联调来说非常方便,对于刚入门的新手非常友好。
如果只是测试单个接口,Postman 是非常好的选择。但是随着项目规模的扩大,仅仅依赖 Postman 就无法满足测试的需要了。
例如:
- 一个项目有上百个接口
- 每次发版都需要执行回归测试
- 测试数据需要动态生成
- 需要接入 Jenkins 持续集成
- 需要生成自动化测试报告
... ...
这时候如果还依赖人工点击 Postman 执行接口,效率会非常低。
因此在有一定规模的项目中,通常会使用 Python 编写接口自动化脚本来辅助测试,而 Requests 则是 Python 接口自动化最常用的 HTTP 请求库。
2. Requests 快速安装
Requests 是第三方库,因此在使用之前需要进行安装
用PyCharm打开需要工作的目录,打开命令行窗口,执行以下命令:
bash
pip install requests
如果无法下载可以使用国内镜像源:
bash
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
查看 Requests 版本:
bash
pip show requests
输出示例:
bash
Name: requests
Version: 2.32.4
也可以通过 Python 代码验证:
bash
import requests
print(requests.__version__)
如果能够正常输出版本号,则说明安装成功。
3. 主要功能与用法
HTTP 协议定义了多种请求方法,不同请求方法对应不同业务操作。
requests 库是⼀个⾮常流⾏的HTTP客户端库,⽤于发送HTTP请求。
例如:requests.get ⽅法⽤于发送⼀个HTTP get 请求到指定的URL
使用requests.get ⽅法,还会返回⼀个 Response 对象。

3.1Response 对象
这个对象包含了服务器返回的所有信息。如:
| 属性/方法 | 描述 |
|---|---|
r.status_code |
响应状态码 |
r.content |
字节方式的响应体,会自动解码 gzip 和 deflate 压缩 |
r.headers |
以字典对象存储服务器响应头,若键不存在则返回 None |
r.json() |
Requests 中内置的 JSON 解析方法,将响应体解析为 JSON 格式 |
r.url |
获取实际请求的 URL |
r.encoding |
编码格式,根据响应头部的字符编码确定 |
r.cookies |
获取服务器设置的 Cookies |
r.raw |
返回原始响应体,不进行任何处理 |
r.text |
字符串方式的响应体,会自动根据响应头部的字符编码进行解码 |
r.raise_for_status() |
失败请求(非 200 响应)时抛出异常 |
3.2HTTP 常见请求方法简介
发起get请求
python
def get(url, params=None, **kwargs)
发起post请求
python
def post(url, data=None, json=None, **kwargs)
request支持多种请求方式,可以用method直接指定请求⽅法,
常见的有:get, OPTIONS, HEAD, post, PUT, PATCH, or DELETE
python
def request(method, url, **kwargs)
示例:
python
import requests
get_r = requests.get("https://www.baidu.com")
post_r = requests.post("https://www.baidu.com")
req_r1 = requests.request(method="get", url="https://www.baidu.com")
req_r2 = requests.request(method="post", url="https://www.baidu.com")
print("get:", get_r.status_code)
print("post:", post_r.status_code)
print("method_get:", req_r1.status_code)
print("method_post:", req_r2.status_code)
运行结果:

3.3添加请求信息
get() 、 post() 底层都是调⽤ request() ⽅法,因此这三个⽅法在发送请求时,传参都是差不多的,可传递的参数总结如下:
| 参数名 | 描述 |
|---|---|
url |
请求的接口地址 |
headers |
一个字典,包含要发送的 HTTP 请求头 |
cookies |
一个字典、列表或者 RequestsCookieJar 对象,包含要发送的 Cookies |
files |
一个字典,包含要上传的文件 |
data |
一个字典、列表或者字节串,包含要发送的请求体数据 |
json |
一个字典,将被转换为 JSON 格式并发送 |
params |
一个字典、列表或者字节串,将作为查询字符串附加到 URL 上 |
auth |
一个元组,包含用户名和密码,用于 HTTP 认证 |
timeout |
一个浮点数或元组,指定请求的超时时间 |
proxies |
一个字典,包含代理服务器的信息 |
verify |
一个布尔值或字符串,指定是否验证 SSL 证书 |
3.3.1案例一:用户登录接口(POST请求)
python
url = "http://xxx.xxx.xxx.xxx:9090/user/login"
# 定义要发送的数据
data = {
"username":"zhangsan",
"password": "123456"
}
r = requests.post(url=url, data=data)
print(r.json())
登录成功后,系统将显示"SUCCESS"提示,并返回包含用户token的data字段,该token可用于后续需要登录状态的接口测试。

3.3.2案例二:博客详情查询接口(GET请求+Token认证)
python
import requests
url = "http://47.xxx.xxx.xxx:9090/blog/getBlogDetail"
params = {
"blogId": 32213
}
headers = {
"user_token_header": "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MywidXNlck5hbWUiOiJ6aGFuZ3NhbiIsImV4cCI6MTc4MDg5MTQyNn0.AIyAkWfWnSX0rvJEqFFk0WRY-MJm_6i9930LdXF6IyQ"
}
r = requests.get(url=url, params=params, headers=headers)
print(r.status_code)
print(r.json())
输出结果

3.3.3Cookie机制示例:保持会话状态请求
Cookie 是服务器保存客户端状态的一种机制。
例如用户登录成功后,服务器可能返回:
Set-Cookie: sessionid=abc123
后续请求需要携带该 Cookie 才能保持登录状态。
Requests 中可以通过 cookies 参数传递:
python
import requests
cookies = {
"sessionid": "abc123"
}
response = requests.get(
"https://xxx.xx.xx.xx/xx",
cookies=cookies
)
print(response.text)
不过目前前后端分离项目中,更多使用 Token 认证,因此 Cookie 的使用频率已经低于 Token。