菜单

测试与基准测试

相关源文件

本文档介绍了 fuel-core 全面的测试和基准测试基础设施,包括集成测试、VM 性能基准测试和 Gas 成本校准工具。测试框架验证交易处理、区块链操作和系统可靠性,而基准测试系统则衡量 VM 指令性能,以校准 Fuel 区块链的 Gas 成本。

有关部署测试策略的信息,请参阅 Docker 和 Kubernetes 部署。有关持续集成管道的详细信息,请参阅 持续集成

测试架构概述

fuel-core 测试基础设施主要分为三类:嵌入在独立 crate 中的单元测试、全面的集成测试和性能基准测试。

来源:tests/tests/tx.rs1-67 tests/tests/contract.rs1-42 tests/tests/messages.rs1-54 benches/src/lib.rs1-48 benches/benches/vm_set/blockchain.rs1-30

集成测试框架

集成测试使用 TestContextTestSetupBuilder 基础设施验证端到端功能。这些测试会启动实际的 fuel-core 节点,并测试真实的交易处理场景。

交易测试

交易测试框架涵盖从提交到最终确定的完整交易生命周期

主要交易测试函数包括

  • dry_run_script() - 在不改变状态的情况下测试交易执行
  • submit_and_await_commit() - 测试完整的交易提交流程
  • get_transactions() - 测试交易查询和分页
  • 交易大小限制验证和区块饱和度测试

来源:tests/tests/tx.rs85-134 tests/tests/tx.rs342-369 tests/tests/tx.rs547-699

测试基础设施组件

测试基础设施提供可重用组件,用于设置测试环境

  • TestContext:管理包含运行中的 fuel-core 服务和客户端的完整测试环境
  • TestSetupBuilder:用于配置具有自定义状态、合约和余额的测试场景的 Builder 模式
  • 辅助函数:用于创建交易、管理密钥和断言测试结果的实用程序

来源:tests/tests/contract.rs152-200 tests/tests/messages.rs55-62

VM 基准测试基础设施

VM 基准测试系统衡量单个 Fuel VM 指令的性能,以准确校准 Gas 成本。这确保 Gas 定价反映实际计算成本。

VmBench 框架

The VmBench 结构体提供了一个用于对 VM 操作进行基准测试的综合框架

VmBench 结构体支持

  • 具有特定共识参数的自定义 VM 配置
  • 合约部署和状态设置
  • 内存和存储初始化
  • 指令准备和执行测量

来源:benches/src/lib.rs110-187 benches/src/lib.rs364-569

区块链操作基准测试

区块链基准测试侧重于构成区块链核心功能的存储和状态操作

BenchDb 提供了一个受控的数据库环境,具有

  • 预填充的合约状态,用于一致性测量
  • 跨多个资产的合约余额初始化
  • 区块历史,用于测试历史查询

来源:benches/benches/vm_set/blockchain.rs73-188 benches/benches/vm_set/blockchain.rs190-811

基准收集和 Gas 成本校准

基准收集系统将原始性能测量结果转换为 Fuel VM 的 Gas 成本

收集管道

收集工具通过多个阶段处理基准测试结果

  1. 测量收集:从 Criterion 基准测试中收集计时数据
  2. 基线归一化:使用基线操作(通常是 noop)将绝对计时转换为相对 Gas 成本
  3. 成本计算:根据目标性能特性将计时测量映射到 Gas 单位
  4. 格式化输出:生成多种格式的 Gas 成本表,以便集成

来源:benches/src/bin/collect.rs148-255 benches/src/bin/collect.rs333-339 benches/src/bin/collect.rs380-570

Gas 成本结构

该系统支持两种类型的 Gas 成本,以适应不同的操作特性

成本类型结构用例
固定成本简单的 u64 值计算成本恒定的操作
依赖成本LightOperationHeavyOperation基于输入大小的可变成本操作

LightOperation: base + (units / units_per_gas)
HeavyOperation: base + (units * gas_per_unit)

来源:benches/src/bin/collect.rs129-140 crates/client/src/client/schema/chain.rs483-503

测试实用工具和辅助函数

测试框架为常见测试场景提供了广泛的实用程序

交易组装辅助工具

  • 用于交易构建和执行的 AssembleAndRunTx trait
  • 用于测试密钥管理的 default_signing_wallet()
  • 用于测试环境设置的 config_with_fee()

消息测试实用程序

  • 消息证明生成和验证
  • 使用 SMO(Send Message Out)指令进行跨链消息测试
  • 用于消息真实性的 Merkle 证明验证

合约测试基础设施

  • 使用自定义字节码和状态的合约部署
  • 跨多个资产的余额初始化
  • 用于合约状态测试的存储槽管理

来源:tests/tests/tx.rs55-59 tests/tests/messages.rs298-506 tests/tests/contract.rs150-175

性能分析集成

基准测试系统与更广泛的 fuel-core 性能分析集成

性能分析可实现

  • 回归检测:将当前基准与基线进行比较,以识别性能回归
  • Gas 成本校准:根据测量的性能更新 Gas 成本,以维持经济激励
  • 生产优化:将性能洞察反馈到生产部署中

来源:benches/src/bin/collect.rs32-67 benches/src/default_gas_costs.rs1-150