Mastra 云端高级冒烟测试实战:BYOK 密钥注入与存储后端验证
【免费下载链接】mastraMastra is the modern TypeScript framework for AI-powered applications and agents.项目地址: https://gitcode.com/GitHub_Trending/ma/mastra
导读
本文围绕 Mastra 开源仓库中mastra-smoke-test技能的进阶参考文档 references/cloud-advanced.md,系统讲解面向staging(预发)与 production(生产)环境的云端高级测试流程:包括把自有 API 密钥注入已部署 Mastra Server 的BYOK(Bring Your Own Key)测试,以及在不同数据库后端(LibSQL / PostgreSQL / Turso)下的存储后端验证。读完本文,你将掌握完整的云端高级测试命令、配置项、环境变量设置与验收清单,并了解这些测试在 Mastra 冒烟测试整体框架中的位置与底层原理。
一、云端高级测试在冒烟测试框架中的定位
在 Mastra 仓库的冒烟测试体系中,主技能文件 SKILL.md 定义了--env local | staging | production三种环境。其中:
- local:本地
pnpm dev启动,默认端口4111; - staging:使用
.mastra-project-staging.json配置,部署到staging.mastra.cloud域名; - production:使用
.mastra-project.json配置,部署到mastra.cloud域名。
cloud-advanced.md正是针对后两种云端环境的进阶测试流程,其测试对象是已部署的 Studio / Server 项目,而非平台控制台本身。文档开篇特别提醒:账号创建、团队邀请、RBAC 权限等属于平台 Dashboard(projects.mastra.ai/gateway.mastra.ai)的功能,应使用独立的platform-smoke-test技能进行测试,不在本流程范围内。
换句话说:
cloud-advanced.md回答的是"我的项目部署到云端之后,怎么验证它带着用户自己的密钥能跑、换一个数据库也能跑",而不是"平台本身的账号体系是否正常"。
与它配套的部署基础流程见 references/cloud-deploy.md,进阶测试通常建立在部署完成、Server 健康检查通过的基础之上。
二、BYOK 测试:把用户自己的密钥交给已部署的 Server
2.1 什么是 BYOK,为什么需要测
BYOK(Bring Your Own Key,自带密钥)测试验证的是:用户将自己的 LLM API Key 直接传给已部署的 Mastra Server,Server 在本次请求中使用该密钥调用模型,而不是使用部署时配置的默认密钥。
文档明确区分了两个概念:
- 这里的 BYOK 测试对象是你自己部署的 Mastra Server(如
<project>.server.mastra.cloud); - 不是Mastra 平台 Gateway API(
gateway.mastra.ai)的 BYOK 能力——后者属于平台侧功能,由platform-smoke-test技能覆盖。
这一区分在仓库的网关实现中同样存在。在 packages/core/src/llm/model/gateways/mastra.ts 等网关代码中,网关凭据走的是保留专用请求头(reserved gateway header),与用户 BYOK 注入的 Provider 密钥头是两条不同的路径,相关边界行为在 gateway-manager.test.ts 中有专门用例(如"网关认证头非空时不会回退到getApiKey")。这从源码层面印证了:BYOK 请求头解析与默认密钥解析是相互独立、且需要显式测试的两套逻辑。
2.2 通过 HTTP Header 注入密钥
这是最直接的验证方式:在请求已部署 Server 的 Agent/generate接口时,通过特定请求头携带对应 Provider 的 API Key。
生产环境示例:
curl -X POST https://<project>.server.mastra.cloud/api/agents/weather-agent/generate \ -H "Content-Type: application/json" \ -H "x-openai-api-key: sk-your-openai-key" \ -d '{"messages": [{"role": "user", "content": "What is the weather in Tokyo?"}]}'staging 环境示例(注意子域名为server.staging.mastra.cloud):
curl -X POST https://<project>.server.staging.mastra.cloud/api/agents/weather-agent/generate \ -H "Content-Type: application/json" \ -H "x-openai-api-key: sk-your-openai-key" \ -d '{"messages": [{"role": "user", "content": "What is the weather in Tokyo?"}]}'目前支持的 BYOK 请求头:
| 请求头 | 对应 Provider |
|---|---|
x-openai-api-key | OpenAI |
x-anthropic-api-key | Anthropic |
x-google-api-key |
验证要点:请求应返回 200 与正常的 Agent 回复文本;若密钥无效,Server 应返回对应的模型调用鉴权错误——这正是"Server 真的使用了请求头里的密钥"的证据。更严谨的做法是交替使用"无效密钥 + 有效密钥"对比观察返回差异。
2.3 通过 Studio 项目设置配置密钥
除请求头外,BYOK 还可以在已部署的 Studio 中配置:
- 进入已部署的 Studio →Settings(设置)→ API Keys(API 密钥);
- 添加 OpenAI / Anthropic / Google 的 API Key;
- 验证 Agent 在后续调用中使用配置的密钥而非默认密钥。
这种方式的验证路径是:配置后调用 Agent,确认请求不再使用部署时的默认 Provider 凭据(例如通过观测 Traces 中的模型调用信息,或临时配置一个无效默认密钥观察行为差异)。
2.4 与冒烟测试命令的对应关系
主技能 SKILL.md 的参数表中定义了--byok(默认false)开关,用于"测试 bring-your-own-key"能力。即在实际执行时,可通过:
smoke test --env staging --existing-project ~/my-app --byok触发包含 BYOK 测试的云端冒烟流程。这串命令与本文档的 BYOK 章节一一对应:--env决定目标环境(staging/production),--byok决定是否执行密钥注入验证。
三、存储后端测试:验证项目在不同数据库下可用
存储后端测试(--db)的目标是:验证项目在所选数据库后端下能正常工作。主技能参数表中--db支持三个取值:libsql(默认)、pg、turso。
3.1 LibSQL(默认,零配置)
# 无需额外配置 # 开发环境默认使用本地 SQLite 文件LibSQL 是默认后端,开箱即用。开发环境(local)下它落到本地 SQLite 文件,因此本地冒烟测试(--env local)天然覆盖了这条路径;云端部署时则使用 LibSQL 云数据库。
3.2 PostgreSQL(--db pg)
选择 PostgreSQL 后端时,需要设置DATABASE_URL环境变量:
export DATABASE_URL="postgresql://user:pass@host:5432/db"仓库中 PG 存储的完整实现位于 stores/pg(包含连接池、迁移与基于 PG 的向量检索等能力)。冒烟测试中,只要导出DATABASE_URL后运行部署与测试命令,项目即应基于该 PG 实例完成建表、读写与持久化验证。
3.3 Turso(--db turso)
Turso 后端需要同时设置数据库地址与鉴权令牌两个环境变量:
export TURSO_DATABASE_URL="libsql://your-db.turso.io" export TURSO_AUTH_TOKEN="your-token"对应仓库中的 stores/turso 与 stores/libsql 实现。Turso 本质上是基于 libSQL 协议的托管服务,所以连接串前缀同样是libsql://,但需要通过TURSO_AUTH_TOKEN完成鉴权。相关实现细节可进一步阅读 stores/turso 目录。
提示:
--db pg与--db turso都属于云端/远端数据库,因此这两条路径主要在--env staging/--env production环境下验证;本地默认仍是 LibSQL/SQLite。
四、扩展验证清单:进阶测试的验收标准
文档末尾给出了云端高级测试的验收清单,测试完成后应逐项勾选:
| 分类 | 测试项 | 预期结果 | 状态 |
|---|---|---|---|
| BYOK | Header 密钥 | Agent 使用请求头传入的密钥 | ⬜ |
| BYOK | 设置密钥 | Agent 使用项目设置中的密钥 | ⬜ |
| Storage | 数据库连接 | 项目在所选数据库下正常工作 | ⬜ |
| Storage | 数据持久化 | Server 重启后数据仍然存在 | ⬜ |
其中"数据持久化"(Data persists)是存储后端验证中最容易被忽略的一环:它要求不仅"连得上、跑得通",还要证明重启 Server 后数据(如消息历史、工作流状态、向量数据)不丢失。建议的验证方法:
- 在所选后端上产生数据(例如发起一次 Agent 对话写入 memory,或运行一次 workflow);
- 重启 / 重新部署 Server(或重启数据库实例);
- 再次读取同一数据(如通过 Traces、Memory 或直接查询数据库),确认数据仍可访问。
五、把高级测试接入云端部署验证全流程
cloud-advanced.md是云端测试的"进阶篇",建议按以下顺序与基础流程衔接:
5.1 部署与健康检查(前置步骤)
先按 references/cloud-deploy.md 完成部署,并确认健康检查通过:
# staging curl https://<project>.server.staging.mastra.cloud/health # production(无环境子域名) curl https://<project>.server.mastra.cloud/health # 期望返回: {"success":true}5.2 使用仓库自带脚本做基础接口测试
仓库提供了现成的 Server API 测试脚本 scripts/test-server.sh,它会依次:检查/health端点 → 调用 Agent 的/generate端点 → 解析并展示响应 → 失败时以非零码退出:
.claude/skills/mastra-smoke-test/scripts/test-server.sh <server-url> [agent-id] [message] # 示例 .claude/skills/mastra-smoke-test/scripts/test-server.sh https://my-app.server.staging.mastra.cloud .claude/skills/mastra-smoke-test/scripts/test-server.sh https://my-app.server.mastra.cloud weather-agent "Weather in Tokyo?"在 BYOK 场景中,你可以在此基础上为 curl 追加对应的x-*-api-key请求头,将"基础连通性验证"升级为"密钥注入验证"。
5.3 环境变量与密钥准备
云端测试需要提前确认环境变量,详见 references/environment-variables.md:
| 变量 | 用途 | 设置时机 |
|---|---|---|
MASTRA_PLATFORM_API_URL | 指定目标环境(staging / production) | mastra auth login之前 |
OPENAI_API_KEY | LLM API 访问 | 运行 Agent 之前 |
ANTHROPIC_API_KEY | 备选 LLM(使用 Anthropic 时) | 使用 Anthropic 时 |
DATABASE_URL | PostgreSQL 存储后端(--db pg) | 部署/测试前 |
TURSO_DATABASE_URL/TURSO_AUTH_TOKEN | Turso 存储后端(--db turso) | 部署/测试前 |
其中MASTRA_PLATFORM_API_URL与 BYOK 请求头是两条不同的密钥通道:前者决定平台 API 的认证目标,后者决定模型提供商的调用凭据,测试时要区分清楚。
5.4 云端测试的注意事项
- 环境隔离:staging 与 production 使用各自独立的项目 ID(配置文件名不同),互不干扰,可以放心分别在两套环境执行
--byok与--db测试; - 验证 Traces 管线:云端部署后建议先做一次 Server API 调用,再到 Studio → Observability → Traces 页面确认该调用产生的 trace 出现,以验证端到端可观测性管线正常(详见 cloud-deploy.md 的"Server Trace Verification"章节);
- 结果上报:最终结果按主技能 SKILL.md 的格式汇总,将上文的扩展验证清单并入其中,注明环境(staging/production)、项目名与每个测试项的通过/失败及备注。
六、小结
cloud-advanced.md为 Mastra 云端冒烟测试补齐了两块关键能力:
- BYOK 测试——通过
x-openai-api-key/x-anthropic-api-key/x-google-api-key请求头,或 Studio 项目设置中的 API Keys 配置,验证已部署 Server 能正确使用用户自带的模型密钥(对应--byok开关); - 存储后端测试——验证 LibSQL(默认零配置)、PostgreSQL(
DATABASE_URL)、Turso(TURSO_DATABASE_URL+TURSO_AUTH_TOKEN)三种后端下项目可正常连接、读写与持久化(对应--db开关)。
配合 SKILL.md 的整体流程、cloud-deploy.md 的部署基础与 test-server.sh 的接口测试脚本,你可以把"部署 → 健康检查 → 基础接口 → BYOK → 存储后端 → 数据持久化 → 结果上报"串成一条可复现、可验收的云端高级冒烟测试流水线。
【免费下载链接】mastraMastra is the modern TypeScript framework for AI-powered applications and agents.项目地址: https://gitcode.com/GitHub_Trending/ma/mastra
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考