4、Requests库入门:安装与导入、发送GET/POST请求、处理响应对象、超时设置

好,咱们正式开始动手写脚本了。

做性能测试,说白了就是模拟用户发请求。而Python里最顺手的HTTP工具,就是Requests库。我这些年写过的压测脚本,十有八九都离不开它。今天咱们就把Requests库的底子打扎实。

4.1 安装与导入:别小看这一步

安装很简单,一行命令搞定:

pip install requests

嗯,这里有个坑。我曾经在公司的内网环境装过,发现代理没配好,死活装不上。如果你也遇到类似情况,记得配一下代理:

pip install requests --proxy http://你的代理地址:端口

装完之后,在脚本里导入:

import requests

我个人习惯在文件开头就把所有要用的库都导好,避免写到一半才发现漏了。你想想看,压测脚本跑起来的时候,突然报个ImportError,多耽误事。

4.2 发送GET请求:最基础的操作

GET请求,说白了就是从服务器拿数据。咱们先来个最简单的:

import requests

url = "https://api.example.com/users"
response = requests.get(url)

print(response.text)

就这么几行,一个GET请求就发出去了。response对象里装的就是服务器返回的所有东西。

我在项目中遇到过一种情况:有些接口需要带参数。比如分页查询,要传page和size。这时候有两种写法:

写法一:直接拼在URL里

url = "https://api.example.com/users?page=1&size=20"
response = requests.get(url)

写法二:用params参数(我推荐这种)

params = {"page": 1, "size": 20}
response = requests.get(url, params=params)

为什么推荐第二种?因为代码更清晰,参数多了也好维护。你想想看,要是拼20个参数在URL里,那字符串得多长?

4.3 发送POST请求:带数据的请求

POST请求通常用来提交数据。比如用户登录、提交表单。写法也很直接:

import requests

url = "https://api.example.com/login"
data = {"username": "test", "password": "123456"}
response = requests.post(url, data=data)

print(response.text)

这里要注意一个细节:data参数传的是表单格式。如果接口要求JSON格式,得用json参数:

import json

payload = {"username": "test", "password": "123456"}
response = requests.post(url, json=payload)

我曾经踩过一个坑:用data传JSON字符串,结果服务端解析不出来,返回400错误。后来才发现,用json参数会自动帮你设置Content-Type为application/json。省心不少。

4.4 处理响应对象:拿到数据后怎么办

请求发出去了,服务器返回了响应。咱们得知道怎么从response对象里取东西。

常用的属性和方法,我列个表:

属性/方法 说明 示例
response.status_code HTTP状态码 200、404、500
response.text 响应内容(字符串) 打印出来看
response.json() 解析为JSON对象 返回字典或列表
response.headers 响应头 字典形式
response.elapsed 请求耗时 timedelta对象

实际压测中,我最常用的是response.json()和response.elapsed。前者用来验证返回数据对不对,后者用来记录响应时间——这可是性能分析的关键指标。

举个例子:

response = requests.get("https://api.example.com/users/1")
if response.status_code == 200:
    user_data = response.json()
    print(f"用户名:{user_data['name']}")
    print(f"请求耗时:{response.elapsed.total_seconds()}秒")
else:
    print(f"请求失败,状态码:{response.status_code}")

4.5 超时设置:别让脚本卡死

这一点特别重要。我刚开始写压测脚本时,没设超时。结果有一次被测服务挂了,脚本一直等响应,等了几分钟都不返回。整个压测任务就这么卡住了。

设置超时很简单:

response = requests.get(url, timeout=5)  # 5秒超时

这个timeout参数,控制的是连接超时和读取超时的总和。如果你想分别设置,可以传一个元组:

response = requests.get(url, timeout=(3, 5))  
# 连接超时3秒,读取超时5秒
注意:压测脚本里一定要设超时。不设超时的话,一旦服务端响应慢,你的脚本线程就会被一直占用,最终导致并发数上不去,压测结果失真。

我个人习惯设3秒连接超时、5秒读取超时。当然,具体数值得根据你的业务场景来调。如果接口本身处理时间就长,可以适当放宽。

4.6 本章知识体系

下面这张图,把Requests库的核心操作串起来了:

Requests库核心操作 安装与导入 pip install requests import requests 发送GET请求 requests.get(url) 支持params参数 发送POST请求 requests.post(url) data / json参数 处理响应对象 .status_code .json() .elapsed 超时设置 timeout=5 timeout=(3, 5) 压测脚本的基石:掌握这五点,就能应对大部分场景
小技巧:写压测脚本时,我习惯把请求封装成一个函数。比如def send_get(url, params=None, timeout=5),这样后面跑多线程压测时,直接调用函数就行,代码复用性高。

好了,Requests库的入门就讲到这里。这些内容看着简单,但都是压测脚本的基石。你想想看,后面咱们要写高并发脚本、要处理各种接口,不都得靠这几行代码打底吗?

下一章,咱们会深入讲讲Session和Cookie的管理——这可是模拟用户登录态的关键。到时候见。


可可精品资料库