接口自动化-requests模块
安装
requests模块本身是没有的,所以需要我们自行进行安装
pip install requests==2.31.0
安装完成之后,我们可以检查一下是否成功安装
pip list

介绍
requests 是 Python 中一个非常流行的 HTTP 客户端库,用于发送各种 HTTP 请求(如 GET、POST、PUT、DELETE 等),并处理服务器返回的响应。它以简洁易用的 API 设计取代了 Python 标准库中的 urllib 模块,大大降低了 HTTP 操作的复杂度,成为开发者处理网络请求的首选工具。
requests.get 方法法用于发送⼀个HTTP get 请求到指定的URL
requests.get 方法返回⼀个 Response 对象,这个对象包含了服务器返回的所有信息。如:

使用
返回的response对象也是提供了一些属性/方法的:
|
属性/方法 |
描述 |
|
response.status_code |
响应状态码 |
|
response.content |
字节方式的响应体,会自动解码gzip和deflate压缩 |
|
response.headers |
以字典对象存储服务器响应头,若键不存在则返回None |
|
response.json() |
Requests中内置的JSON解析方法,将响应体解析为JSON格式 |
|
response.url |
获取实际请求的URL |
|
response.encoding |
编码格式,根据响应头部的字符编码确定 |
|
response.cookies |
获取服务器设置的cookies |
|
response.raw |
返回原始响应体,不进行任何处理 |
|
response.text |
字符串方式的响应体,会自动根据响应头部的字符编码进行解码 |
|
response.raise_for_status |
失败请求(非200响应)抛出异常 |
以下是一些常见的请求方法
# 发起get请求
def get(url,params=None,**kwargs)
# 发起post请求
def post(url,data=None,json=None,**kwargs)
# 同时也是支持不同的请求方式,,method:用来表示要发起的请求方式
# 支持 'get','post','put','delete','patch','options','head'
def request(method,url,**kwargs)
使用例子:
import requests
get = requests.get("https://www.baidu.com")
post = requests.post("https://www.baidu.com")
request_get = requests.request(method="GET",url="https://www.baidu.com")
request_post = requests.request(method="POST",url="https://www.baidu.com")
print("get: ",get)
print("post: ",post)
print("request_get: ",request_get)
print("request_post: ",request_post)

传参请求
get() 、 post() 底层都是调用 request() 方法,因此这三个方法在发送请求时,传参无太大区别,可传递的参数展示如下:
|
参数名 |
描述 |
|
url |
请求的接口 |
|
headers |
字典,包含要发送的HTTP头 |
|
cookies |
字典/列表/ |
|
files |
字典,包含要上传的文件 |
|
data |
字典/列表/字符串,包含要发送的请求体数据 |
|
json |
字典,将被转换的JSON格式并发送 |
|
params |
字典/列表/字符串,将作为查询字节串附加到URL上 |
|
timeout |
浮点数/元组,指定请求的超时时间 |
|
auth |
元组,包含用户名和密码,用于HTTP认证 |
|
proxies |
字典,包含代理服务器的信息 |
|
verify |
布尔值/字符串,指定是否验证SSL证书 |
例子:
# 接口是抽奖接口,需要先进行登录,然后才能进行访问
# 需要登陆的场景:需要在请求头中添加用户登陆的凭证
# json格式
url = "http://124.220.191.124:8080/draw-prize"
header = {
"user_token":"eyJhbGciOiJIUzI1NiJ9.eyJpZGVudGl0eSI6IkFETUlOIiwiaWQiOjc1LCJpYXQiOjE3NjExMDMwMTUsImV4cCI6MTc2MTEwNjYxNX0.Clwahi0AJ9QTcGaR1--VOQGV5loJEg2hv4_8t9058do",
"Content-Type": "application/json"
}
body = {
"winnerList":[
{
"userId":51,
"userName":"bbbeixun"
}
],
"activityId":36,
"prizeId":21,
"prizeTiers":"FIRST_PRIZE",
"winningTime":"2025-02-08T16:52:42.000Z"
}
r = requests.request(method="POST",headers=header,url=url,json=body)
# json格式使用json发送请求体,但是表单格式使用body来发送请求体
print(r.json())


所以我们在进行上传的时候,应该使用params?json?还是data?
针对这个问题,我们会采用不同的请求发送方式
-
params用于在URL中传递查询参数,通常用于GET请求,但是也可以用于其他类型的请求 -
json用于在请求体中传递 JSON 格式的数据,通常用于POST或者PUT请求 -
data用于在请求体中传递表单数据,通常用于POST或者PUT请求
若参数上传格式选择为 json 格式, Content-Type 会自动被设置为application/json
有了 requests 库,可以实现对接口发起 http 请求,然而自动化测试中,我们需要编写大量的测试用例,这些用例的组织、执行和管理也需要使用其他更强大的框架⸺ pytest 框架。
requests 库专注于HTTP请求的发送,而 pytest 框架则提供了测试的组织、执行和管理功能。
更多推荐
所有评论(0)