Shardeum自动化测试:快速搭建CI/CD流水线的完整指南
【免费下载链接】shardeumShardeum is an EVM based autoscaling blockchain项目地址: https://gitcode.com/GitHub_Trending/sh/shardeum
Shardeum 是一个基于 EVM 的自动扩缩容(autoscaling)区块链平台。本文面向新手,介绍如何利用项目内置的 Jest 单元测试、代码质量检查和网络冒烟测试,在 10 分钟内搭建一条可用的 Shardeum CI/CD 自动化测试流水线。
一、认识 Shardeum 的测试体系 🧪
项目根目录的 package.json 中已预置了完整的测试脚本,无需从零配置:
| 命令 | 作用 | 适用阶段 |
|---|---|---|
npm test | 运行 Jest 单元测试(先自动执行编译) | CI 必跑 |
npm run lint | ESLint 代码风格检查 | CI 必跑 |
npm run format-check | Prettier 格式校验 | CI 必跑 |
npm run test:smoke | 20 节点冒烟测试,带覆盖率 | 合并前 |
npm run test:shardedNet | 分片网络完整测试 | 发布前 |
npm run test:singleShardRotation | 单分片轮换测试 | 发布前 |
npm run test:autoscaleNet | 自动扩缩容网络测试 | 发布前 |
测试代码分布在两个目录:
- 单元测试:
test/unit/,覆盖 EVM 预编译合约、状态管理、交易类型、存储层等模块,命名遵循*.test.ts规范 - 网络级测试用例:
test/testCases/,按“启动网络 → 发送交易 → 归档 → 节点奖励 → 停止网络”的顺序编排,入口见 test/testCases/index.ts
Jest 配置集中在根目录的 jest.config.js,使用ts-jest处理 TypeScript,并把testTimeout调到了 5000000 毫秒——因为节点数量越多,测试耗时越长,这条提示在 CI 超时设置中非常关键。
二、环境准备:一键安装依赖 🚀
CI/CD 的第一步是构建一个干净、可复现的构建环境:
- 安装Node.js 20.19.3(
package.json的engines字段锁定了精确版本,CI 中务必保持一致,避免版本漂移) - 使用
npm ci安装依赖(而不是npm install),它严格按锁文件安装,保证每次流水线结果一致 - 项目带原生模块(sqlite3),Linux CI Runner 上需预装
python3、make、g++等编译工具
安装完成后即可跑一次完整的单元测试自检:
npm test三、设计三阶段 CI/CD 流水线 ✅
推荐把流水线拆成三个由快到慢的阶段,快速失败、节省资源:
阶段 1:代码质量门禁(约 1~2 分钟)
- run: npm ci - run: npm run lint - run: npm run format-check阶段 2:单元测试(约 5 分钟)
- run: npm test单元测试是流水线的核心,当前覆盖的模块包括 EVM 核心(test/unit/src/evm_v2/)、预编译合约、账户类型(test/unit/src/shardeum/)、AJV 交易校验模式(test/unit/src/types/ajv/)等。项目还维护了 unit-tests-todo.md,列出了 90 个待补测文件并按简单 → 复杂排序,是贡献者提升覆盖率的路线图。
阶段 3:网络冒烟测试(20 分钟起,仅主干分支触发)
- run: npm run test:smoke冒烟测试会真实拉起 20 个节点(minNodes=20 nodesPerConsensusGroup=5),建议只在主干分支合并后运行,并通过--coverage产出覆盖率报告上传为构建产物。
💡 技巧:
test/目录下带有.disabled后缀的文件(如main.test.ts.disabled)是被临时禁用的重型网络测试,CI 中默认不会执行。
四、常见问题排查 🔍
| 问题 | 原因与对策 |
|---|---|
npm test卡在编译 | pretest会自动执行npm run compile,首次运行较慢,属正常现象 |
| 测试超时失败 | 检查 CI 单步超时是否大于 Jest 的testTimeout(默认 5000 秒) |
| 原生模块安装失败 | Runner 缺少编译工具链,安装build-essential与python3 |
| 冒烟测试端口冲突 | 多流水线并发时给各任务分配独立的工作目录与端口段 |
| 本地网络调试失败 | 参考scripts/shardeumValidatorDebuggingScript/中的调试脚本,按 README 逐步排查验证节点配置 |
五、总结 🎯
Shardeum 的自动化测试体系可以归纳为三句话:
- 代码质量靠
npm run lint和npm run format-check守门 - 核心逻辑靠
test/unit/下的 Jest 单元测试保障 - 端到端行为靠
test:smoke等网络级测试验证分片、扩缩容等核心能力
把这三层按“门禁 → 单测 → 冒烟”串成流水线,就能在每次提交后自动获得可靠的回归反馈。想深入了解项目架构与测试约定,可阅读 CLAUDE.md 和 test/README.md。
【免费下载链接】shardeumShardeum is an EVM based autoscaling blockchain项目地址: https://gitcode.com/GitHub_Trending/sh/shardeum
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考