当前位置:首页>python>Python接口测试实战:requests库详解

Python接口测试实战:requests库详解

  • 2026-10-15 18:40:09
Python接口测试实战:requests库详解

阿发聊测试 · 技术进阶系列

Python接口测试实战:requests库详解

GET/POST/Session/超时/文件上传/代理,一篇文章全掌握

你好,我是阿发。

最近收到一个读者的私信:"阿发,我面试的时候被问到'你用过requests库吗?怎么用它做接口测试?'我只知道get和post,结果被面试官追问了3个问题就卡壳了,最后offer也没拿到。"说实话,这个场景我见过太多了。很多测试工程师只会用requests发个简单的get请求,稍微深入一点的场景比如Session保持、文件上传、超时重试就完全不懂了。而这些恰恰是面试官最爱问的,也是实际工作中最常用的。今天这篇文章,我把requests库从入门到进阶,给你讲得明明白白。

SECTION 01

requests库:接口测试的瑞士军刀

在讲具体用法之前,先说说为什么要学requests。做接口测试,你可能用过Postman、JMeter这些工具。工具好用,但有个问题:工具是给人用的,没法自动化。你总不能每次发版都手动点一遍吧?

requests是Python的一个HTTP请求库,简单、强大、文档齐全。学会它,你就能写自动化测试脚本,让机器替你干活。而且现在几乎所有的接口测试框架(比如pytest+requests)都是基于它的。

一句话总结:requests是接口测试自动化的基石。不会requests,你的接口测试技能就是瘸腿的——只能手动测,不能自动化。

```bash
pip install requests
```

安装完导入就能用。记住一个原则:requests库的设计理念是"让HTTP请求变得简单",所以它的API非常直观。

SECTION 02

GET请求:最基础也最常用

GET请求是最常见的HTTP方法,用来获取数据。比如查询用户列表、获取商品详情,都是GET请求。

最简单的GET请求

```python
import requests

response = requests.get('https://api.example.com/users')
print(response.text)
```

带参数的GET请求

```python
import requests

# 方式1:直接拼在URL里
response = requests.get('https://api.example.com/users?page=2&size=10')

# 方式2:用params参数(推荐)
params = {'page': 2, 'size': 10}
response = requests.get('https://api.example.com/users', params=params)
```

为什么推荐方式2?

· 代码更清晰:参数和URL分开,一眼就能看到传了什么参数

· 自动编码:如果参数里有中文或特殊字符,requests会自动URL编码

· 方便调试:修改参数只需要改字典,不用动URL

方法
用途
示例
response.text
获取文本内容
print(response.text)
response.json()
获取JSON数据(最常用)
data = response.json()
response.content
获取二进制内容
下载图片/文件
response.status_code
获取HTTP状态码
assert status_code == 200
response.headers
获取响应头
headers['Content-Type']

SECTION 03

POST请求:提交数据的核心方法

表单格式(form-data)

```python
import requests

url = 'https://api.example.com/login'
data = {'username': 'testuser', 'password': '123456'}
response = requests.post(url, data=data)
print(response.json())
```

JSON格式(application/json)

```python
import requests

url = 'https://api.example.com/users'
json_data = {'name': '张三', 'age': 25, 'email': 'zhangsan@example.com'}
response = requests.post(url, json=json_data)
print(response.json())
```

关键区别:data参数提交的是表单格式(application/x-www-form-urlencoded),json参数提交的是JSON格式(application/json)。两者不能混用,否则后端解析不到数据。

文件上传(multipart/form-data)

```python
import requests

url = 'https://api.example.com/upload'
files = {'file': open('test.jpg', 'rb')}
response = requests.post(url, files=files)
print(response.json())
```

SECTION 04

请求头和Cookie:身份认证的关键

设置请求头(Token认证)

```python
import requests

url = 'https://api.example.com/orders'
headers = {
'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
'Content-Type': 'application/json'
}
response = requests.get(url, headers=headers)
print(response.json())
```

用Session自动管理Cookie(推荐)

```python
import requests

# 创建Session对象
session = requests.Session()

# 第一步:登录,Session会自动保存Cookie
login_data = {'username': 'test', 'password': '123456'}
session.post('https://api.example.com/login', data=login_data)

# 第二步:访问需要登录的接口,Session自动带上Cookie
response = session.get('https://api.example.com/orders')
print(response.json())
```

为什么用Session?:因为手动管理Cookie太麻烦了。登录后Cookie可能会变,或者有多个Cookie,Session会自动帮你处理这些,你不用管Cookie是什么。

SECTION 05

超时设置和异常处理:让脚本更健壮

超时设置

```python
import requests

# 设置总超时时间为10秒
response = requests.get('https://api.example.com/users', timeout=10)

# 分别设置连接超时和读取超时
response = requests.get('https://api.example.com/users', timeout=(3, 7))
```

异常处理

```python
import requests
from requests.exceptions import Timeout, ConnectionError, HTTPError

try:
response = requests.get('https://api.example.com/users', timeout=10)
response.raise_for_status()
data = response.json()
print('请求成功:', data)
except Timeout:
print('请求超时')
except ConnectionError:
print('连接失败')
except HTTPError as e:
print(f'HTTP错误: {e}')
```

SECTION 06

实战案例:完整的接口测试流程

```python
import requests

class UserAPITest:
def __init__(self, base_url):
self.base_url = base_url
self.session = requests.Session()
self.session.headers.update({'Content-Type': 'application/json'})

def login(self, username, password):
url = f'{self.base_url}/login'
data = {'username': username, 'password': password}
response = self.session.post(url, json=data, timeout=5)
token = response.json().get('data', {}).get('token')
self.session.headers.update({'Authorization': f'Bearer {token}'})
return response.json()

def create_user(self, user_data):
url = f'{self.base_url}/users'
return self.session.post(url, json=user_data, timeout=5).json()

def get_user(self, user_id):
url = f'{self.base_url}/users/{user_id}'
return self.session.get(url, timeout=5).json()
```

SECTION 07

面试高频问题:你必须会的

· Q1:requests.get()和requests.Session().get()有什么区别?
Session会自动保存Cookie,复用连接,适合需要保持会话的场景。

· Q2:data参数和json参数有什么区别?
data是表单格式,json是JSON格式。Content-Type分别是application/x-www-form-urlencoded和application/json。

· Q3:response.text和response.json()有什么区别?
text返回字符串,json()返回字典。如果响应不是JSON格式,json()会报错。

· Q4:怎么处理超时和异常?
timeout参数设置超时时间,try-except捕获Timeout、ConnectionError、HTTPError等异常。

最后

requests库不难,难的是把它用在实际场景中。只会发GET和POST不算会用,能处理Cookie、超时、文件上传、并发请求,才算真正掌握了这个工具。希望今天的内容能帮你在面试和工作中游刃有余。

关于接口测试进阶、简历修改、offer选择,都可以通过公众号菜单栏添加我微信 testafa 私信交流。需要学习资料也可以私信!

最新文章

随机文章