🎧 Listen to this article: हिंदी · English · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
🌍 Read this in your language: हिंदी · தமிழ் · తెలుగు · ಕನ್ನಡ · മലയാളം · ଓଡ଼ିଆ · 日本語 · 中文
软件测试的稳定性至关重要,尤其是在涉及发送验证电子邮件时。如今这一主题比以往任何时候都更加重要,因为自动化测试是现代开发中不可或缺的一部分。
复用测试邮箱的问题
当我们执行发送电子邮件的测试时,一个常见问题是复用测试邮箱。这可能导致测试一次通过而在下一次运行时失败。出现的一些问题包括:
- 旧邮件: 上一次测试的邮件可能会干扰新测试,导致测试意外失败。
- 持续集成(CI)环境中的混乱: 如果多个进程尝试同时访问同一个邮箱,可能会发生冲突。
- 存在问题的重试: 如果验证链接过期或未被正确使用,重试可能会使用相同的链接,从而影响测试的有效性。
建议的解决方案
为解决这些问题,建议将每封测试邮件视为临时资源。这意味着为每次测试运行创建一个唯一的邮箱。为了实施该策略,每次运行应定义三个值:
- run_id: CI 任务或本地运行的标识符。
- mailbox_id: 为该次运行创建的邮箱标识符。
- expected_token: 将收到的链接与正在测试的用户关联起来的 token。
这种方法可确保某次运行的邮件不会干扰其他运行,从而提高测试的稳定性和可靠性。
在 FastAPI 中的实现
为了在 FastAPI 中实施该策略,我们可以创建一个 endpoint,为每次测试生成一个唯一的邮箱。下面展示了一个实现示例:
from dataclasses import dataclass
from uuid import uuid4
from fastapi import FastAPI
app = FastAPI()
dataclass(frozen=True)
class Mailbox:
address: str
mailbox_id: str
def create_test_mailbox(run_id: str) -> Mailbox:
mailbox_id = f"{run_id}-{uuid4().hex[:8]}"
return Mailbox(
address=f"{mailbox_id}@test.invalid",
mailbox_id=mailbox_id,
)
@app.post("/test-users")
def create_test_user(run_id: str):
mailbox = create_test_mailbox(run_id)
token = uuid4().hex # Guarda mailbox.mailbox_id y token junto al usuario creado.
return {
"email": mailbox.address,
"mailbox_id": mailbox.mailbox_id,
"verification_token": token,
}
在此代码中,每次创建测试用户时,都会生成一个唯一的邮箱。这确保了测试相互独立且更易于诊断。
测试最佳实践
除了创建临时邮箱之外,还应遵循以下一些最佳实践:
- 隔离测试: 每次运行都应拥有自己的邮箱,避免干扰。
- 定义 timeout: 这有助于管理在认定邮件未送达之前需要等待多长时间。
- 测试后清理: 确保在每次测试结束时删除邮箱或将其标记为已关闭,即使测试失败也是如此。
结论
创建隔离的测试邮箱并不能解决所有的身份验证问题,但它在多次运行之间建立了清晰的界限。FastAPI 可以处理 endpoint,而测试适配器则管理邮箱和邮件读取。借助 run_id, tokens, timeouts 以及清理,每次运行都知道自己创建了什么以及应该消费什么。这能减少 CI 中的噪声,并在出现故障时提供更有用的信号。
优点
- 测试隔离。
- 易于诊断。
- 提高测试稳定性。
缺点
- 初期实现可能需要更多工作量。
- 需要对临时资源进行良好管理。
注意事项
本文仅供学习参考。在实际实现中,示例值应替换为真实数据。在采信任何说法之前,请务必向原始来源核实。
常见问题
- 什么是 FastAPI? — FastAPI 是一个用于使用 Python 构建 API 的现代且快速的框架。
- 为什么测试隔离很重要? — 隔离测试可以避免干扰和不一致的结果,提高可靠性。
- 如何在 FastAPI 中实现临时邮箱? — 可以创建一个 endpoint,为每次测试运行生成唯一的邮箱。
- 什么是 run_id? — 这是一个唯一标识符,有助于区分不同的测试运行。
- 复用测试邮箱会导致什么问题? — 它可能导致偶发性失败、CI 环境混乱以及重试问题。
- 什么是 mailbox_id? — 它是将特定邮箱与测试运行关联起来的标识符。
API Security Testing Checklist
A practical workflow for testing authentication, authorization, input handling, business logic, and evidence without losing track of scope.
Free. No spam — unsubscribe in one click.


Responses
Sign in to leave a response.