尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Webiny 测试执行指南:如何为单个包运行 DDB 与 OpenSearch(ddb-os)测试

Webiny 测试执行指南:如何为单个包运行 DDB 与 OpenSearch(ddb-os)测试 CMS后端前端【免费下载链接】webiny-jsOpen-source, self-hosted CMS platform on AWS serverless (Lambda, DynamoDB, S3). TypeScript framework with multi-tenancy, lifecycle hooks, GraphQL API, and AI-assisted development via MCP server. Built for developers at large organizations.项目地址https://gitcode.com/gh_mirrors/we/webiny-js点击查看免费下载导读本指南针对 Webiny 仓库中如何为单个包运行单元/集成测试给出权威的操作指引。Webiny 的测试体系围绕存储层storage划分默认情况下所有测试跑在 DynamoDBddb上而部分与搜索索引、同步任务相关的包还需要在 OpenSearchddb-os之上再跑一遍以验证跨存储的行为一致性。读完本文你将掌握yarn test与yarn test:os两条命令的适用边界、ci.config.json中storageOps字段的真实含义以及如何用一条grep命令校验本文列出的包清单是否过期。本文主体内容来自仓库内的 .claude/skills/tester/SKILL.md并结合作业系统脚本package.json与各包的 CI 配置packages/*/ci.config.json进行源码级佐证与扩展。为什么 Webiny 需要区分 ddb 与 ddb-os 两套测试Webiny 是一个构建在 AWS Serverless 之上的自托管 CMS 平台其数据访问层刻意做了存储抽象既支持以 DynamoDBddb为唯一存储也支持 DynamoDB OpenSearchddb-os即以 DynamoDB 为主存储、OpenSearch 作为搜索/索引引擎的组合形态。为了确保这两种部署形态下的行为一致测试体系被拆成两套DDB-only 测试仅依赖 DynamoDB通过 dynalite 内存模拟跑得快、无需任何外部服务是绝大多数包的默认测试OpenSearchddb-os测试额外把数据写入/读取 OpenSearch 索引验证搜索、聚合、索引同步等能力需要真实或模拟的 OpenSearch 环境。在根目录 package.json 中可以看到这两套命令的真实定义test: vitest --config testing/vitest.config.ts --run, test:os: WEBINY_STORAGEddb-os,ddb vitest --config testing/vitest.config.ts --run即yarn test直接启动 vitestyarn test:os在启动前注入环境变量WEBINY_STORAGEddb-os,ddb告诉测试基建当前要按 ddb-os 优先、ddb 兜底 的存储策略来运行。同类命令还有test:esWEBINY_STORAGEddb-es,ddb、test:sql与test:pg它们对应 Elasticsearch 与 SQL/PostgreSQL 存储组合便于在本地对多种存储后端做验证。DDB-only 测试默认yarn test packages/package-name对大多数包来说唯一需要执行的命令是yarn test packages/package-name命令中直接传入包目录例如packages/api-aco根目录的 testing/vitest.project.ts 会从参数中解析出包名与包根目录它会先从node_modules定位目标包的package.json再把测试匹配模式/{__tests__,src}/**/*.{test,test-d}.[jt]s?(x)套用到该包路径上。也就是说只要包内有__tests__或src目录下的*.test.ts/*.test.tsx文件都会被这条命令拾取。测试运行所需的存储相关环境变量在 testing/createTestConfig.ts 中统一注入process.env.DB_TABLE DynamoDB; process.env.DB_TABLE_OPENSEARCH OpensearchStream; process.env.DB_TABLE_AUDIT_LOGS DynamoDBAuditLogs; process.env.TESTING true;其中DB_TABLE_OPENSEARCH即为 ddb-os 模式下的 OpenSearch 流表名配合 dynalite 与 OpenSearch 模拟器共同工作。yarn test默认不设置WEBINY_STORAGE因此存储层默认落到 DynamoDB。OpenSearchddb-os测试yarn test:os packages/package-name当某个包同时支持 OpenSearch 存储时需要在 DDB 测试之外再运行yarn test:os packages/package-name这条命令通过环境变量WEBINY_STORAGEddb-os,ddb激活存储覆盖逻辑。在 testing/vitest.config.ts 中可以看到测试基建在启动时会顺带处理 OpenSearch 索引前缀若设置了OPENSEARCH_INDEX_PREFIX且当前处于 CI存在GITHUB_RUN_ID会把它改写成${GITHUB_RUN_ID}_${name}_形式避免并发 CI 任务之间索引冲突同时会把根目录.env中的项目级变量如WEBINY_PROJECT_ID、WCP_PROJECT_LICENSE剔除防止本地配置污染测试环境。以 packages/api-opensearch 为例其测试覆盖search/base.test.ts、plugins/operators/notIn.test.ts、utils/waitUntilHealthy.test.ts等用例见packages/api-opensearch/__tests__/这些用例既会作为普通 DDB 测试被yarn test收集也会在yarn test:os下针对 OpenSearch 行为重复验证。如何判断一个包该跑哪条命令storageOps是唯一权威ci.config.json中的storageOps字段SKILL.md 明确指出判断依据的唯一来源source of truth是每个包ci.config.json中的storageOps键。这些配置文件存放在各包根目录下例如packages/api-aco/ci.config.json{ $schema: ../../.github/workflows/ci.config.schema.json, vitest: { storageOps: [ddb, ddb-os,ddb, sql,ddb] } }packages/api-opensearch/ci.config.json{ $schema: ../../.github/workflows/ci.config.schema.json, vitest: { storageOps: [ddb-os,ddb] } }每个storageOps数组元素对应 CI 中会运行的一种存储组合ddb 表示纯 DynamoDB 跑一遍ddb-os,ddb 表示以 ddb-os 存储组合跑一遍逗号后为回退项sql,ddb 则表示 SQL 存储组合。当数组中同时出现ddb与ddb-os,ddb两个条目时意味着本地需要分别运行yarn test与yarn test:os两条命令当数组中只有ddb-os,ddb而没有独立的ddb条目时则只需运行yarn test:os。需要 BOTHyarn test和yarn test:os的包这些包的ci.config.json中同时包含ddb与ddb-os,ddb部分包还额外含sql,ddb因此两条命令都需要执行api-aco—— packages/api-aco/ci.config.json含ddb-os,ddb与sql,ddbapi-audit-logs—— packages/api-audit-logs/ci.config.jsonapi-file-manager—— packages/api-file-manager/ci.config.jsonapi-file-manager-aco—— packages/api-file-manager-aco/ci.config.jsonapi-headless-cms—— packages/api-headless-cms/ci.config.json额外含sql,ddb与pg-os且配置了sharding.shardsCount: 6CI 会分片并行api-headless-cms-aco—— packages/api-headless-cms-aco/ci.config.jsonapi-headless-cms-bulk-actions—— packages/api-headless-cms-bulk-actions/ci.config.jsonapi-mailer—— packages/api-mailer/ci.config.jsonapi-scheduler—— packages/api-scheduler/ci.config.json含sql,ddbapi-workflows—— packages/api-workflows/ci.config.jsontasks与testingSKILL.md 中的这两项对应仓库内的packages/api-headless-cms-tasks与packages/api-core-testing/packages/api-headless-cms-testing等测试辅助包建议以其实际ci.config.json为准。注api-headless-cms是仓库中配置最复杂的包其ci.config.json同时声明了ddb、ddb-os,ddb、sql,ddb、pg-os四种存储组合并启用 6 路分片。若要完整覆盖它的存储矩阵本地至少需要运行yarn test与yarn test:osSQL/PG 组合则对应yarn test:sql、yarn test:pg等命令。只需要yarn test:os没有独立 ddb 条目的包这些包的ci.config.json中storageOps只有ddb-os,ddb没有独立的ddb条目它们天生就是围绕 OpenSearch 设计、必须依赖 OpenSearch 才能跑通api-dynamodb-to-elasticsearch—— 对应仓库中的 packages/api-sync-ddb-to-opensearchci.config.json为[ddb-os,ddb]api-elasticsearch-tasks—— 对应 packages/api-headless-cms-es-tasksci.config.json为[ddb-os,ddb]api-headless-cms-ddb-es—— packages/api-headless-cms-ddb-es/ci.config.jsonapi-headless-cms-es-tasks—— packages/api-headless-cms-es-tasks/ci.config.jsonapi-opensearch—— packages/api-opensearch/ci.config.json注意SKILL.md 原文中的api-dynamodb-to-elasticsearch与api-elasticsearch-tasks是历史命名当前仓库对应包为api-sync-ddb-to-opensearch与api-headless-cms-es-tasks但它们的ci.config.json结构与所列包一致命令用法完全相同。此外仓库中还有api-search-index-tasks与api-search-index-tasks-ddb-os两个搜索索引任务包当前未配置storageOps属于所有其他包范畴仅需yarn test。所有其他包 —— 只跑yarn test只要一个包没有出现在上面两类清单中包括未配置ci.config.json或未声明storageOps的包就只需运行yarn test不需要额外执行yarn test:os。保持清单不过期从 ci.config.json 重新推导仓库迭代速度快包的存储支持随时可能变化SKILL.md 给出的清单也可能过时。此时应该用以下命令自行重新推导而不是手动翻阅每个配置文件# 找出所有声明了 ddb-os 支持的包 grep -rl ddb-os --includeci.config.json packages/ | sort然后逐个打开这些ci.config.json检查storageOps数组里是否也包含独立的ddb条目同时包含ddb与ddb-os,ddb→ 两类测试都需要跑yarn testyarn test:os只有ddb-os,ddb→ 只跑yarn test:os。在本次核对中grep -rl ddb-os --includeci.config.json packages/实际命中的包为api-aco、api-audit-logs、api-file-manager、api-file-manager-aco、api-headless-cms、api-headless-cms-aco、api-headless-cms-bulk-actions、api-headless-cms-ddb-es、api-headless-cms-es-tasks、api-mailer、api-opensearch、api-scheduler、api-sync-ddb-to-opensearch、api-workflows。其中只有api-headless-cms-ddb-es、api-headless-cms-es-tasks、api-opensearch、api-sync-ddb-to-opensearch属于仅ddb-os,ddb类型其余均需同时运行yarn test与yarn test:os并视情况补充sql,ddb存储组合。这与 SKILL.md 的两份清单基本吻合差异仅来自包名的历史命名演变。完整实操流程为一个包跑完两套测试以验证 Headless CMS 的存储矩阵为例推荐流程如下确认包的存储支持查看packages/api-headless-cms/ci.config.json的storageOps。跑 DDB 基线测试yarn test packages/api-headless-cms跑 OpenSearch 组合测试yarn test:os packages/api-headless-cms可选跑 SQL / PG 组合若storageOps含sql,ddb可再执行yarn test:sql packages/api-headless-cms含pg-os时执行yarn test:pg:os packages/api-headless-cms。核对全部通过两条或多条命令全部绿灯后即可认为该包在其支持的存储后端上行为一致。在 CI 上这些存储组合由ci.config.json的vitest.storageOps驱动仓库根目录 package.json 中test:os等脚本的WEBINY_STORAGE环境变量正是与之对应的本地执行入口本地开发时开发者可以直接复用这套约定保证本地测试与 CI 行为一致。小结Webiny 单包测试的核心规则可以浓缩为三点默认命令yarn test packages/package-name对应 DynamoDB 存储OpenSearch 命令yarn test:os packages/package-name通过WEBINY_STORAGEddb-os,ddb激活 ddb-os 存储组合判断标准以packages/package/ci.config.json的vitest.storageOps为准——同时含ddb与ddb-os,ddb则两条都跑仅含ddb-os,ddb则只跑yarn test:os其余只跑yarn test清单过期时用grep -rl ddb-os --includeci.config.json packages/重新推导。这套约定让 DDB 与 OpenSearch 两套存储后端在 Webiny 中始终得到对称的测试覆盖也避免了为不相关的包白白付出启动 OpenSearch 环境的成本。赞分享CMS后端前端【免费下载链接】webiny-jsOpen-source, self-hosted CMS platform on AWS serverless (Lambda, DynamoDB, S3). TypeScript framework with multi-tenancy, lifecycle hooks, GraphQL API, and AI-assisted development via MCP server. Built for developers at large organizations.项目地址https://gitcode.com/gh_mirrors/we/webiny-js点击查看免费下载相关推荐Wand-Enhancer如何免费解锁Wand专业版Wand Enhancer如何免费解锁Wand专业版 Wand Enhancer 是一款面向 Wand原 WeMod的开源桌面增强工具它对本机客户端打补桌面应用前端如何为activemq4cj编写与运行单元测试70测试用例实践指南如何为activemq4cj编写与运行单元测试70测试用例实践指南 activemq4cj 是一款用仓颉语言实现的 ActiveMQ 客户端 SDK遵循后端消息队列解决7-Zip常见问题无法打开RAR5/损坏压缩包恢复的6个实用方案解决7 Zip常见问题无法打开RAR5/损坏压缩包恢复的6个实用方案 7 Zip是一款功能强大的开源压缩软件支持多种压缩格式包括7z、ZIP、RAR等。然文档前端上一篇Windows缩略图加载革命智能预加载技术让你告别文件夹卡顿下一篇Kaneo API 集成测试实践基于 Hono 与真实 PostgreSQL 的端到端接口验证指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表