软件测试接口测试从入门到精通:Python接口自动化 - requests库

文章目录

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自动处理
连接复用

课后练习 📝

  1. 基础题 :用requests调用 https://jsonplaceholder.typicode.com 的接口,完成CRUD操作。

  2. 进阶题:封装一个HTTP请求类,支持自动重试、日志记录、响应验证。


13.8 下章预告

下一章我们将学习pytest测试框架,让接口自动化测试更专业!


"requests是Python世界中最优雅的HTTP库,掌握它,你就掌握了与网络对话的能力。"

相关推荐
三品吉他手会点灯1 小时前
C语言学习笔记 - 48.流程控制2 - 什么是流程控制
c语言·开发语言·笔记·学习
宸津-代码粉碎机1 小时前
Spring AI 企业级实战|智能记忆摘要+自动遗忘机制落地,彻底解决上下文爆炸与Token冗余
java·大数据·人工智能·后端·python·spring·云计算
chinesegf1 小时前
构建高效工具调用Prompt的极简范例
人工智能·自动化
如烟花的信页1 小时前
外贸*登录逆向分析
javascript·爬虫·python·js逆向
摸摸芋1 小时前
Django框架(1)
后端·python·django
闵孚龙1 小时前
《PyTorch 深度修炼》优化器:参数到底是怎么被更新的
人工智能·pytorch·python
Yvonne爱编码1 小时前
JAVA EE初阶---DAY 2 计算机网络
java·开发语言·计算机网络·算法·java-ee·php
子豪-中国机器人1 小时前
Python 阶段性综合强化训练(新版)
开发语言·python·语音识别
z落落1 小时前
C# WinForm TreeView 树形控件+ListView控件+菜单栏
开发语言·c#