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. 什么是 Requests2. requests 常用请求方式有哪些3. GET 和 POST 区别4. json 和 data 参数区别5. 什么是幂等性哪些请求具备幂等6. PUT 和 PATCH 区别7. requests 如何携带 token8. 接口超时如何处理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 urlhttp://xxx/api/user/listheaders{Authorization:tokenxxxx}params{page:1,size:10}# URL拼接参数resrequests.get(urlurl,headersheaders,paramsparams,timeout5# 超时时间)print(res.json())2. POST 请求增/提交data{username:test,pwd:123456}resrequests.post(urlurl,jsondata,# json格式入参 最常用headersheaders,timeout5)3. PUT 请求全量修改data{name:燃气表,status:1,version:v1.0}resrequests.put(urlurl,jsondata)4. PATCH 请求局部修改data{status:0}# 只修改状态resrequests.patch(urlurl,jsondata)5. DELETE 请求删除resrequests.delete(urlurl,timeout5)6. HEAD 请求健康检查resrequests.head(urlurl)print(res.headers)7. OPTIONS 了解resrequests.options(url)四、Requests 常用核心参数url接口地址headers请求头token、Content-Typeparamsget 拼接在url后面的参数json传递 json 格式参数接口90%用data表单格式参数 form-datafiles上传文件、固件、日志timeout超时时间防止脚本卡死cookies携带cookieauth账号密码认证五、响应对象常用属性res.status_code# 状态码 200/401/404/500res.text# 普通文本返回res.json()# 解析json接口最常用res.content# 二进制数据图片/文件/固件res.headers# 响应头信息res.cookies# 响应cookieres.encoding# 编码格式六、高级用法自动化框架必备1. Session 会话保持token/cookie 自动携带sessionrequests.Session()# 登录session.post(login_url,jsondata)# 后续请求自动带上登录态ressession.get(info_url)2. 异常捕获脚本稳定必备try:resrequests.get(url,timeout5)res.raise_for_status()# 状态码非200主动抛异常exceptrequests.exceptions.Timeout:print(请求超时)exceptrequests.exceptions.ConnectionError:print(连接失败)exceptExceptionase:print(异常,e)3. 忽略 HTTPS 证书报错resrequests.get(url,verifyFalse)七、GET / POST / PUT / PATCH 核心区别GET只读查询、安全、幂等、参数暴露在urlPOST提交新增、不幂等、可传大量数据PUT全量更新必须传完整字段幂等PATCH局部更新只传要修改的字段轻量高效幂等性概念幂等多次请求结果完全一致幂等GET / PUT / DELETE / PATCH / HEAD非幂等POST重复提交会重复下单/新增八、常见面试题1. 什么是 RequestsRequests 是 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/jsondata传递表单格式数据对应 form-data/x-www-form-urlencoded5. 什么是幂等性哪些请求具备幂等多次发起相同请求业务结果一致就是幂等。GET、PUT、DELETE、PATCH、HEAD 幂等POST 不幂等。6. PUT 和 PATCH 区别PUT全量更新需要传入完整字段覆盖原有数据PATCH局部更新只传需要修改的字段节约带宽。7. requests 如何携带 token# 通过 headers 请求头携带例如headers{Authorization:Bearer xxxxxxxx}resrequests.get(url,headersheaders)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 证书报错添加参数 verifyFalse 忽略证书校验。13. requests 如何上传文件使用 files 参数打开文件以二进制形式传入。files{file:open(firmware.bin,rb)}resrequests.post(url,filesfiles)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服务器内部代码异常。