Python接口自动化测试----Requests库基础入门

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。

相关推荐
程序媛_1 小时前
【Python】连接PostgreSQL获取手机验证码
开发语言·python·postgresql
ch.ju1 小时前
Java Programming Chapter 4——Inherited call
java·开发语言
Kobebryant-Manba1 小时前
学习参数管理
pytorch·python·深度学习
是有头发的程序猿1 小时前
竞品分析 + 用户洞察自动化|基于 item_review 评论接口 + 多 AI Agent 实现淘宝评论全量采集与智能分析(附python源码)
java·python·自动化
信看1 小时前
Jetson Orin Quectel QMI 拨号上网
开发语言·python
keykey6.1 小时前
LSTM 文本情感分析:从词嵌入到分类实战
开发语言·人工智能·深度学习·机器学习
数据知道1 小时前
网站到底是如何通过JS读取你的浏览器指纹的?
开发语言·javascript·ecmascript·指纹浏览器
骑士雄师1 小时前
课程导航LangGraph核心概念
python
c238561 小时前
C++的IO流深入理解(上)
开发语言·c++