基于Firebase自定义令牌的API负载测试方案咨询
针对Firebase Auth防护的FastAPI高并发负载测试方案
一、先搞定测试用的认证凭证(核心前提)
你的认证流程涉及Phone Auth+自定义令牌,直接在高并发下跑完整流程会触发Firebase的限流(比如Phone Auth的验证码发送频率限制),根本测不了真实的API性能。所以第一步必须预生成批量的最终JWT令牌:
- 用Firebase提供的测试电话号码(比如
+1 650 555 1234),写个脚本批量模拟Phone Auth登录,拿到初始ID Token - 把这些初始ID Token批量传给你的FastAPI自定义令牌接口,生成带自定义声明的最终JWT,存到一个文件(比如
valid_tokens.txt)里,每个令牌占一行 - 确保这些令牌在测试期间不会过期,要是有效期短,就提前刷新或者在测试脚本里加自动刷新逻辑
二、选合适的负载测试工具
根据你的技术栈和并发需求,推荐两个工具:
Locust(Python生态,上手快)
适合熟悉Python/FastAPI的开发者,脚本逻辑和业务代码风格一致:
from locust import HttpUser, task, between import random class ProtectedAPIUser(HttpUser): wait_time = between(0.5, 2) # 模拟用户请求间隔 valid_tokens = [] def on_start(self): # 加载预生成的令牌 with open("valid_tokens.txt", "r") as f: self.valid_tokens = [line.strip() for line in f if line.strip()] @task(1) def call_protected_endpoint(self): # 随机选一个令牌 token = random.choice(self.valid_tokens) headers = {"Authorization": f"Bearer {token}"} # 替换成你的受保护API路径 self.client.get("/api/protected/data", headers=headers)
启动方式:locust -f locust_test.py --host=https://your-test-api.com,然后在Web控制台设置并发数(1k/10k/20k)和用户孵化速率,就能直观看到测试数据。
k6(性能拉满,适合超高并发)
用Go编写的工具,资源占用低,能轻松扛住10k+并发,脚本用JS写:
import http from 'k6/http'; import { sleep } from 'k6'; // 加载令牌列表 const tokens = open('valid_tokens.txt').split('\n').filter(t => t.trim() !== ''); export default function () { // 随机选取令牌 const token = tokens[Math.floor(Math.random() * tokens.length)]; const headers = { Authorization: `Bearer ${token}` }; // 发起请求 http.get('https://your-test-api.com/api/protected/data', { headers }); sleep(Math.random() * 2); // 模拟用户思考时间 }
启动命令(1k并发跑5分钟):k6 run --vus 1000 --duration 5m api_test.js,更高并发可以加--vus 20000,如果单机器扛不住,就用k6的分布式模式,多台机器一起跑。
三、如果非要测完整端到端流程(不推荐)
要是你必须验证整个认证链的性能,得解决Firebase限流问题:
- 向Firebase申请提高Phone Auth和自定义令牌的API配额
- 用分布式测试架构,分散请求的来源IP,避免被Firebase判定为恶意流量
- 拆分测试步骤:先测Phone Auth的并发能力,再测自定义令牌生成,最后测API业务逻辑,不要混在一起
四、测试时要盯着这些指标
- FastAPI服务器:CPU、内存、磁盘IO、网络带宽,还有接口的请求成功率、平均响应时间、P95/P99延迟
- Firebase Auth:如果测完整流程,要监控认证请求的错误率、延迟,看是不是瓶颈
- 负载测试工具输出:重点看错误率(比如401/429错误),一旦出现大量401,说明令牌有问题;出现429,就是Firebase或者API限流了
五、避坑提醒
- 测试环境必须和生产环境配置一模一样,包括服务器规格、数据库、Firebase设置,不然测试结果没用
- 先跑小流量测试(比如100并发),验证脚本和令牌都能正常工作,再往上加并发
- 绝对不要在生产环境跑高并发测试,搞个隔离的测试环境专门测
- 要是令牌有过期时间,测试前一定要检查有效期,或者在脚本里加自动刷新逻辑
内容的提问来源于stack exchange,提问作者Dirk
相关产品推荐
相关产品推荐

