Requests
- 一、Requests 库 基础介绍
- 1. 是什么
- 2. 安装
- 3. 导入
- 二、Requests 全部请求方式
- 1. 常用6大请求(重点)
- 2. 不常用
- 常见响应状态码
- 三、请求方法
- 1. GET 请求(查)
- 2. POST 请求(增/提交)
- 3. PUT 请求(全量修改)
- 4. PATCH 请求(局部修改)
- 5. DELETE 请求(删除)
- 6. HEAD 请求(健康检查)
- 7. OPTIONS 了解
- 四、Requests 常用核心参数
- 五、响应对象常用属性
- 六、高级用法(自动化框架必备)
- 1. Session 会话保持(token/cookie 自动携带)
- 2. 异常捕获(脚本稳定必备)
- 3. 忽略 HTTPS 证书报错
- 七、GET / POST / PUT / PATCH 核心区别
- 幂等性概念
- 八、常见面试题
- 1. 什么是 Requests?
- 2. requests 常用请求方式有哪些?
- 3. GET 和 POST 区别?
- 4. json 和 data 参数区别?
- 5. 什么是幂等性?哪些请求具备幂等?
- 6. PUT 和 PATCH 区别?
- 7. requests 如何携带 token?
- 8. 接口超时如何处理?
- 9. res.text 和 res.json() 区别?
- 10. 接口返回二进制数据用什么获取?
- 11. Session 作用是什么?
- 12. 如何处理 HTTPS 证书报错?
- 13. requests 如何上传文件?
- 14. 什么场景用 HEAD 请求?
- 15. DELETE 接口一般测什么?
- 16. 接口自动化中如何做断言?
- 17. params 参数作用?
- 18. 接口请求报错连接失败有哪些原因?
- 遇到 401 / 403 / 404 / 500 分别代表什么?
一、Requests 库 基础介绍
1. 是什么
- Requests 是 Python 第三方HTTP/HTTPS 请求库
- 语法简洁、上手简单,是接口自动化测试首选库
- 模拟浏览器/设备向服务端发送接口请求,校验返回结果
2. 安装
pipinstallrequests3. 导入
importrequests二、Requests 全部请求方式
HTTP 共9种请求,工作常用6种
1. 常用6大请求(重点)
- get()查询数据、获取资源(查设备、查日志、查台账)
- post()新增数据、登录、下发指令、提交表单
- put()全量更新、覆盖修改所有字段
- patch()局部更新、只改个别字段
- delete()删除资源、删除设备/台账
- head()只获取响应头,检测服务是否存活
2. 不常用
- options():查看服务器允许的请求方法、跨域配置
- trace():链路追踪,调试使用
- connect():建立隧道连接,代理/网络底层使用
常见响应状态码
- 200:成功
- 400:参数错误
- 401:未授权/token过期
- 404:地址不存在
- 405:请求方式错误,如:用get请求post接口
- 500:服务器错误
更多响应码内容可以看这篇文章:requests——响应码
三、请求方法
1. GET 请求(查)
importrequests url="http://xxx/api/user/list"headers={"Authorization":"tokenxxxx"}params={"page":1,"size":10}# URL拼接参数res=requests.get(url=url,headers=headers,params=params,timeout=5# 超时时间)print(res.json())2. POST 请求(增/提交)
data={"username":"test","pwd":"123456"}res=requests.post(url=url,json=data,# json格式入参 最常用headers=headers,timeout=5)3. PUT 请求(全量修改)
data={"name":"燃气表","status":1,"version":"v1.0"}res=requests.put(url=url,json=data)4. PATCH 请求(局部修改)
data={"status":0}# 只修改状态res=requests.patch(url=url,json=data)5. DELETE 请求(删除)
res=requests.delete(url=url,timeout=5)6. HEAD 请求(健康检查)
res=requests.head(url=url)print(res.headers)7. OPTIONS 了解
res=requests.options(url)四、Requests 常用核心参数
- url:接口地址
- headers:请求头(token、Content-Type)
- params:get 拼接在url后面的参数
- json:传递 json 格式参数(接口90%用)
- data:表单格式参数 form-data
- files:上传文件、固件、日志
- timeout:超时时间,防止脚本卡死
- cookies:携带cookie
- auth:账号密码认证
五、响应对象常用属性
res.status_code# 状态码 200/401/404/500res.text# 普通文本返回res.json()# 解析json(接口最常用)res.content# 二进制数据(图片/文件/固件)res.headers# 响应头信息res.cookies# 响应cookieres.encoding# 编码格式六、高级用法(自动化框架必备)
1. Session 会话保持(token/cookie 自动携带)
session=requests.Session()# 登录session.post(login_url,json=data)# 后续请求自动带上登录态res=session.get(info_url)2. 异常捕获(脚本稳定必备)
try:res=requests.get(url,timeout=5)res.raise_for_status()# 状态码非200主动抛异常exceptrequests.exceptions.Timeout:print("请求超时")exceptrequests.exceptions.ConnectionError:print("连接失败")exceptExceptionase:print("异常:",e)3. 忽略 HTTPS 证书报错
res=requests.get(url,verify=False)七、GET / POST / PUT / PATCH 核心区别
- GET:只读查询、安全、幂等、参数暴露在url
- POST:提交新增、不幂等、可传大量数据
- PUT:全量更新,必须传完整字段,幂等
- PATCH:局部更新,只传要修改的字段,轻量高效
幂等性概念
- 幂等:多次请求,结果完全一致
- 幂等:GET / PUT / DELETE / PATCH / HEAD
- 非幂等:POST(重复提交会重复下单/新增)
八、常见面试题
1. 什么是 Requests?
Requests 是 Python 第三方 HTTP 请求库,语法简洁、功能强大,主要用于模拟发送 HTTP/HTTPS 接口请求,是接口自动化测试最常用的库。
2. requests 常用请求方式有哪些?
常用6种:get、post、put、patch、delete、head;
了解:options、trace、connect。
3. GET 和 POST 区别?
- GET用于查询,POST用于提交/新增;
- GET参数拼接在URL,安全性低;POST参数在请求体;
- GET有长度限制,POST无限制;
- GET是幂等,POST非幂等。
4. json 和 data 参数区别?
- json:传递JSON格式数据,请求头自动携带 Content-Type:application/json
- data:传递表单格式数据,对应 form-data/x-www-form-urlencoded
5. 什么是幂等性?哪些请求具备幂等?
多次发起相同请求,业务结果一致就是幂等。
GET、PUT、DELETE、PATCH、HEAD 幂等;
POST 不幂等。
6. PUT 和 PATCH 区别?
- PUT:全量更新,需要传入完整字段,覆盖原有数据;
- PATCH:局部更新,只传需要修改的字段,节约带宽。
7. requests 如何携带 token?
# 通过 headers 请求头携带,例如:headers={"Authorization":"Bearer xxxxxxxx"}res=requests.get(url,headers=headers)8. 接口超时如何处理?
使用 timeout 参数设置超时时间,结合 try except 捕获超时异常,避免脚本卡死。
9. res.text 和 res.json() 区别?
- res.text:返回原始字符串文本;
- res.json():自动将json字符串转为字典,方便取值断言。
10. 接口返回二进制数据用什么获取?
使用 res.content,常用于下载图片、固件、文件、视频。
11. Session 作用是什么?
Session 可以保持会话,自动管理 cookie 和登录态,多次请求共享登录信息,不用重复传token/cookie。
12. 如何处理 HTTPS 证书报错?
添加参数 verify=False 忽略证书校验。
13. requests 如何上传文件?
使用 files 参数,打开文件以二进制形式传入。
files={"file":open("firmware.bin","rb")}res=requests.post(url,files=files)14. 什么场景用 HEAD 请求?
只获取响应头、不获取响应体,用于服务健康检查、接口连通性测试,速度快。
15. DELETE 接口一般测什么?
删除设备、删除台账、删除用户、解绑资源,还要测试重复删除、删除不存在数据的异常场景。
16. 接口自动化中如何做断言?
通过 res.json() 获取返回字典,断言状态码、code码、message、核心字段数据一致性。
17. params 参数作用?
专门用于 get 请求,自动拼接参数到 URL 后面。
18. 接口请求报错连接失败有哪些原因?
网络不通、IP/端口错误、服务未启动、防火墙拦截、路由不通、域名错误。
遇到 401 / 403 / 404 / 500 分别代表什么?
答:
- 401 代表未授权、token过期、token错误、未携带登录凭证,需要重新获取token。
- 403:权限不足,禁止访问;
- 404:接口地址不存在;
- 500:服务器内部代码异常。