文章目录
- [13 Python接口自动化 - requests库](#13 Python接口自动化 - requests库)
-
- [13.1 环境准备](#13.1 环境准备)
- [13.2 requests 基础用法](#13.2 requests 基础用法)
- [13.3 请求配置](#13.3 请求配置)
- [13.4 响应处理](#13.4 响应处理)
- [13.5 会话(Session)](#13.5 会话(Session))
- [13.6 完整的测试示例](#13.6 完整的测试示例)
- [13.7 本章小结](#13.7 本章小结)
-
- requests核心
- [课后练习 📝](#课后练习 📝)
- [13.8 下章预告](#13.8 下章预告)
13 Python接口自动化 - requests库
🎯 本章目标:掌握Python requests库的使用,能够编写接口自动化测试脚本。
13.1 环境准备
安装Python和requests
bash
# 检查Python版本
python --version
# 安装requests库
pip install requests
# 安装pytest(测试框架)
pip install pytest
# 安装pytest-html(HTML报告)
pip install pytest-html
验证安装
python
import requests
print(requests.__version__)
13.2 requests 基础用法
GET请求
python
import requests
# 简单GET请求
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.status_code) # 200
print(response.json()) # JSON数据
# 带参数GET请求
params = {
"userId": 1,
"_limit": 5
}
response = requests.get("https://jsonplaceholder.typicode.com/posts", params=params)
print(response.url) # https://jsonplaceholder.typicode.com/posts?userId=1&_limit=5
POST请求
python
import requests
# POST JSON数据
url = "https://jsonplaceholder.typicode.com/posts"
data = {
"title": "foo",
"body": "bar",
"userId": 1
}
response = requests.post(url, json=data)
print(response.status_code) # 201
print(response.json())
# POST表单数据
response = requests.post(url, data={"key": "value"})
# POST文件
files = {"file": open("test.txt", "rb")}
response = requests.post(url, files=files)
其他HTTP方法
python
# PUT请求
response = requests.put(url, json={"title": "updated"})
# PATCH请求
response = requests.patch(url, json={"title": "patched"})
# DELETE请求
response = requests.delete(url)
13.3 请求配置
Headers设置
python
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIs...",
"User-Agent": "MyApp/1.0"
}
response = requests.get(url, headers=headers)
超时设置
python
# 连接超时5秒,读取超时10秒
response = requests.get(url, timeout=(5, 10))
SSL验证
python
# 忽略SSL证书验证(开发环境)
response = requests.get(url, verify=False)
# 指定CA证书
response = requests.get(url, verify="/path/to/ca.crt")
代理设置
python
proxies = {
"http": "http://proxy.example.com:8080",
"https": "https://proxy.example.com:8080"
}
response = requests.get(url, proxies=proxies)
13.4 响应处理
响应属性
python
response = requests.get("https://api.example.com/users/1")
# 状态码
print(response.status_code) # 200
print(response.ok) # True (2xx)
# 响应头
print(response.headers["Content-Type"])
# 响应体
print(response.text) # 字符串
print(response.json()) # JSON转字典
print(response.content) # 二进制
# 编码
print(response.encoding) # utf-8
# 响应时间(毫秒)
print(response.elapsed.total_seconds() * 1000)
错误处理
python
from requests.exceptions import RequestException, Timeout, ConnectionError
try:
response = requests.get(url, timeout=5)
response.raise_for_status() # 4xx/5xx时抛出异常
except Timeout:
print("请求超时")
except ConnectionError:
print("连接错误")
except RequestException as e:
print(f"请求异常: {e}")
13.5 会话(Session)
为什么用Session
python
# 不用Session:每次请求都新建连接
requests.get(url1) # 新建连接
requests.get(url2) # 新建连接
# 用Session:连接复用,自动处理Cookie
session = requests.Session()
session.get(url1) # 新建连接
session.get(url2) # 复用连接
Session示例
python
import requests
session = requests.Session()
# 设置全局Header
session.headers.update({
"User-Agent": "MyApp/1.0",
"Accept": "application/json"
})
# 登录(自动保存Cookie)
login_response = session.post("https://api.example.com/login", json={
"username": "admin",
"password": "123456"
})
# 后续请求自动携带Cookie
user_response = session.get("https://api.example.com/users/me")
print(user_response.json())
13.6 完整的测试示例
用户管理接口测试
python
import requests
import pytest
BASE_URL = "https://api.example.com"
class TestUserAPI:
@pytest.fixture
def session(self):
"""创建会话"""
s = requests.Session()
s.headers.update({"Content-Type": "application/json"})
return s
def test_create_user(self, session):
"""测试创建用户"""
url = f"{BASE_URL}/api/v1/users"
data = {
"username": "testuser001",
"email": "test001@example.com",
"password": "123456"
}
response = session.post(url, json=data)
assert response.status_code == 201
result = response.json()
assert result["code"] == 0
assert result["data"]["username"] == "testuser001"
# 保存用户ID供后续使用
self.user_id = result["data"]["id"]
def test_get_user(self, session):
"""测试获取用户"""
url = f"{BASE_URL}/api/v1/users/{self.user_id}"
response = session.get(url)
assert response.status_code == 200
result = response.json()
assert result["data"]["id"] == self.user_id
def test_update_user(self, session):
"""测试更新用户"""
url = f"{BASE_URL}/api/v1/users/{self.user_id}"
data = {"email": "updated@example.com"}
response = session.put(url, json=data)
assert response.status_code == 200
result = response.json()
assert result["data"]["email"] == "updated@example.com"
def test_delete_user(self, session):
"""测试删除用户"""
url = f"{BASE_URL}/api/v1/users/{self.user_id}"
response = session.delete(url)
assert response.status_code == 204
# 验证已删除
get_response = session.get(url)
assert get_response.status_code == 404
13.7 本章小结
requests核心
#mermaid-svg-B6bgWqIWuqztT0mr{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-B6bgWqIWuqztT0mr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-B6bgWqIWuqztT0mr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-B6bgWqIWuqztT0mr .error-icon{fill:#552222;}#mermaid-svg-B6bgWqIWuqztT0mr .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-B6bgWqIWuqztT0mr .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-B6bgWqIWuqztT0mr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-B6bgWqIWuqztT0mr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-B6bgWqIWuqztT0mr .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-B6bgWqIWuqztT0mr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-B6bgWqIWuqztT0mr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-B6bgWqIWuqztT0mr .marker{fill:#333333;stroke:#333333;}#mermaid-svg-B6bgWqIWuqztT0mr .marker.cross{stroke:#333333;}#mermaid-svg-B6bgWqIWuqztT0mr svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-B6bgWqIWuqztT0mr p{margin:0;}#mermaid-svg-B6bgWqIWuqztT0mr .edge{stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .section--1 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section--1 path,#mermaid-svg-B6bgWqIWuqztT0mr .section--1 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section--1 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section--1 text{fill:#ffffff;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth--1{stroke-width:17;}#mermaid-svg-B6bgWqIWuqztT0mr .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-0 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-0 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-0 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-0 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-0 text{fill:black;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-0{font-size:40px;color:black;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-0{stroke-width:14;}#mermaid-svg-B6bgWqIWuqztT0mr .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-1 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-1 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-1 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-1 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-1 text{fill:black;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-1{font-size:40px;color:black;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-1{stroke-width:11;}#mermaid-svg-B6bgWqIWuqztT0mr .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-2 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-2 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-2 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-2 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-2 text{fill:#ffffff;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-2{stroke-width:8;}#mermaid-svg-B6bgWqIWuqztT0mr .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-3 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-3 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-3 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-3 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-3 text{fill:black;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-3{font-size:40px;color:black;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-3{stroke-width:5;}#mermaid-svg-B6bgWqIWuqztT0mr .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-4 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-4 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-4 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-4 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-4 text{fill:black;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-4{font-size:40px;color:black;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-4{stroke-width:2;}#mermaid-svg-B6bgWqIWuqztT0mr .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-5 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-5 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-5 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-5 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-5 text{fill:black;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-5{font-size:40px;color:black;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-5{stroke-width:-1;}#mermaid-svg-B6bgWqIWuqztT0mr .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-6 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-6 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-6 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-6 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-6 text{fill:black;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-6{font-size:40px;color:black;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-6{stroke-width:-4;}#mermaid-svg-B6bgWqIWuqztT0mr .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-7 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-7 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-7 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-7 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-7 text{fill:black;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-7{font-size:40px;color:black;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-7{stroke-width:-7;}#mermaid-svg-B6bgWqIWuqztT0mr .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-8 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-8 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-8 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-8 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-8 text{fill:black;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-8{font-size:40px;color:black;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-8{stroke-width:-10;}#mermaid-svg-B6bgWqIWuqztT0mr .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-9 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-9 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-9 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-9 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-9 text{fill:black;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-9{font-size:40px;color:black;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-9{stroke-width:-13;}#mermaid-svg-B6bgWqIWuqztT0mr .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-10 rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-10 path,#mermaid-svg-B6bgWqIWuqztT0mr .section-10 circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-10 polygon,#mermaid-svg-B6bgWqIWuqztT0mr .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-10 text{fill:black;}#mermaid-svg-B6bgWqIWuqztT0mr .node-icon-10{font-size:40px;color:black;}#mermaid-svg-B6bgWqIWuqztT0mr .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .edge-depth-10{stroke-width:-16;}#mermaid-svg-B6bgWqIWuqztT0mr .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled,#mermaid-svg-B6bgWqIWuqztT0mr .disabled circle,#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:lightgray;}#mermaid-svg-B6bgWqIWuqztT0mr .disabled text{fill:#efefef;}#mermaid-svg-B6bgWqIWuqztT0mr .section-root rect,#mermaid-svg-B6bgWqIWuqztT0mr .section-root path,#mermaid-svg-B6bgWqIWuqztT0mr .section-root circle,#mermaid-svg-B6bgWqIWuqztT0mr .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-B6bgWqIWuqztT0mr .section-root text{fill:#ffffff;}#mermaid-svg-B6bgWqIWuqztT0mr .section-root span{color:#ffffff;}#mermaid-svg-B6bgWqIWuqztT0mr .section-2 span{color:#ffffff;}#mermaid-svg-B6bgWqIWuqztT0mr .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-B6bgWqIWuqztT0mr .edge{fill:none;}#mermaid-svg-B6bgWqIWuqztT0mr .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-B6bgWqIWuqztT0mr :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} requests
请求方法
GET/POST/PUT/PATCH/DELETE
请求配置
Headers
Params
Timeout
SSL
响应处理
status_code
json
headers
elapsed
会话管理
Session
Cookie自动处理
连接复用
课后练习 📝
-
基础题 :用requests调用
https://jsonplaceholder.typicode.com的接口,完成CRUD操作。 -
进阶题:封装一个HTTP请求类,支持自动重试、日志记录、响应验证。
13.8 下章预告
下一章我们将学习pytest测试框架,让接口自动化测试更专业!
"requests是Python世界中最优雅的HTTP库,掌握它,你就掌握了与网络对话的能力。"