
语言运行时嵌入式物联网【免费下载链接】wasm-micro-runtimeWebAssembly Micro Runtime (WAMR)项目地址https://gitcode.com/gh_mirrors/wa/wasm-micro-runtime点击查看免费下载WebAssembly Micro RuntimeWAMR在 tests/wamr-test-suites 目录下维护了一套覆盖解释器、JIT、AOT 等多种运行模式的全量测试框架核心入口是 test_wamr.sh。本文以该目录的 README 为主线结合仓库中各个套件的源码实现系统讲解如何选择测试套件、配置运行模式与特性开关、收集测试报告以及如何为新增特性扩展测试用例。读完本文你将能够独立执行 WAMR 的 spec 一致性测试、单元测试、回归测试与畸形输入测试并能读懂底层脚本的调度逻辑。WAMR 测试框架概览一个入口七类套件test_wamr.sh是整个测试框架的单一入口它统一负责三件事解析命令行参数测试套件、运行模式、目标平台、特性开关按需构建iwasm运行时以及 AOT 模式下的wamrc编译器依次执行选中的测试套件并把结果写入workspace/report/目录下的时间戳子目录。脚本支持的测试套件通过-s指定见 test_wamr.sh 的帮助信息包括套件名作用对应目录specWebAssembly 官方规范一致性测试含各 proposal 分支spec-test-scriptunit基于 Googletest/CMocka 的单元测试tests/unitregressionBA-issue 回归测试历史 bug 用例tests/regression/ba-issuesstandalone独立可执行场景测试算法、工具链、运行模式等tests/standalonemalformed畸形/恶意 wasm 输入的鲁棒性测试tests/malformedwasi_certificationWASI 官方认证测试wasi-testsuitewasi-test-scriptwamr_compilerwamrcAOT 编译器专项测试wamr-compiler-test-script运行模式通过-t指定覆盖了 WAMR 的全部执行引擎classic-interp经典解释器、fast-interp快速解释器、jitLLVM ORC JIT、aotAOT 编译执行、fast-jit轻量级 JIT、multi-tier-jit多级 JIT 分层执行。从 test_wamr.sh 可见若不指定-t默认会依次尝试全部六种模式。快速开始三条最常用的命令执行./test_wamr.sh --help即 README 中的 Help 用法可随时查看完整参数说明。以下三条命令覆盖了最常见的测试诉求# 以 fast-interp 模式跑 spec 一致性测试 # 脚本会创建 workspace 目录、下载 spec 与 wabt 仓库并自动构建 iwasm ./test_wamr.sh -s spec -t fast-interp # 以 aot 模式跑 spec 测试并直接使用 wabt 二进制发布包免去从源码编译 wabt ./test_wamr.sh -s spec -t aot -b # 不指定 -t用全部模式classic-interp/fast-interp/aot/jit跑 spec 测试 ./test_wamr.sh -s spec其中-bWABT_BINARY_RELEASEYES对应 setup_wabt()脚本会按平台从官方 release 下载指定版本的 wabt 二进制Linux 为 1.0.37macOS 为 1.0.36Windows 为 1.0.37解压后直接放置到wabt/out/gcc/Release/目录不传-b时则会 clone 源码并执行make -C wabt gcc-release自行编译。默认测试集与多套件组合当省略-s时默认测试集合为unit、spec、malformed、standalone见 test_wamr.sh其中unit最先运行且拥有独立的运行模式配置./test_wamr.sh-s也支持一次性列出多个套件unit依然优先于其余套件执行./test_wamr.sh -s spec unit这是因为脚本在 主流程 中先单独抽取unit和regression两个套件用它们各自的模式配置构建并执行再从剩余列表中剔除后交给trigger()统一调度。注意默认测试集刻意排除了polybench和libsodium注释说明它们耗时过长仅在收集代码覆盖率时可选择性开启。运行模式与关键参数从-t到-m-t的取值被脚本严格校验见 test_wamr.sh非法值会直接打印帮助并退出。每种模式对应一组固定的 CMake 编译标志test_wamr.sh模式核心编译标志说明classic-interp-DWAMR_BUILD_INTERP1 -DWAMR_BUILD_FAST_INTERP0 -DWAMR_BUILD_JIT0 -DWAMR_BUILD_AOT0仅经典解释器fast-interp-DWAMR_BUILD_FAST_INTERP1其余关闭快速解释器jit-DWAMR_BUILD_JIT1 -DWAMR_BUILD_AOT1 -DWAMR_BUILD_LAZY_JIT0/1LLVM ORC JIT分 eager/lazy 两种编译策略各跑一遍aot-DWAMR_BUILD_AOT1解释器与 JIT 关闭AOT 模式需要额外构建wamrcfast-jit-DWAMR_BUILD_FAST_JIT1轻量级 JITmulti-tier-jit-DWAMR_BUILD_FAST_JIT1 -DWAMR_BUILD_JIT1多级 JIT 分层执行-m指定 iwasm 的编译目标平台默认X86_64支持x86_32、armv7、riscv32/riscv64含各 ABI 变体、aarch64、thumbv7等见 help 输出# 以 fast-interp 模式在 x86_32 目标上跑 spec 测试 ./test_wamr.sh -s spec -t fast-interp -m x86_32目标平台会影响 spec 测试中 AOT 的编译选项在 spec-test-script/runtest.py 中维护了一张aot_target_options_map例如 x86_64 对应--targetx86_64 --cpuskylake --size-level0riscv64 需要--size-level1即-mcmodelmedanyXIP 模式另有独立的选项映射。特性开关参数-M -p -S -G -W -E -X -e -x -w等选项用于在构建 iwasm 时启用对应的 Wasm 特性它们最终会拼入 CMake 的EXTRA_COMPILE_FLAGS见 trigger()参数特性生效的 CMake 开关-M多模块-DWAMR_BUILD_MULTI_MODULE1-p多线程-DWAMR_BUILD_LIB_PTHREAD1-SSIMD-DWAMR_BUILD_SIMD1-GGC-DWAMR_BUILD_GC1同时开启 bulk-memory 与 tail-call-Wmemory64-DWAMR_BUILD_MEMORY641-E多内存-DWAMR_BUILD_MULTI_MEMORY1自动连带开启多模块-XXIP-DWAMR_BUILD_XIP1间接-e异常处理-DWAMR_BUILD_EXCE_HANDLING1同时开启 tail-call-xSGX 测试构建product-mini/platforms/linux-sgx下的 enclave-sample-wWASI threads-DWAMR_BUILD_LIB_WASI_THREADS1-N扩展常量表达式-DWAMR_BUILD_EXTENDED_CONST_EXPR1此外 spec 测试会固定追加-DWAMR_BUILD_SPEC_TEST1、-DWAMR_BUILD_BULK_MEMORY1、-DWAMR_BUILD_REF_TYPES1等基础开关test_wamr.sh。模式与特性的兼容性过滤不是每种特性都能在所有模式下运行。do_execute_in_running_mode() 会在调度前做兼容性判断例如 memory64 只支持classic-interp与aot两种模式SIMD 只支持llvm-jit、aot、fast-interp异常处理仅支持classic-interpSGX 不支持jit/multi-tier-jit而x86_32目标下三种 JIT 模式都会被跳过。脚本会自动打印 skip in running mode 并继续无需手动干预。spec 一致性测试多 proposal 分支的自动化调度-s spec会触发 spec_test()其流程是下载并复位到指定 commit 的规范测试仓库 → 应用针对性的 ignore 补丁 → 准备 wabt → 软链all.py/runtest.py→ 拼装参数并执行。根据启用特性不同spec 仓库会切换到对应 proposal 分支每个分支都钉在特定 commit 并附带补丁默认WebAssembly/spec主干复位到 2024-12-20 的 commitf3a0e062应用 ignore_cases.patch多线程-pWebAssembly/threads的main-legacy分支应用 thread_proposal_ignore_cases.patch 等三个补丁异常处理-eWebAssembly/exception-handling应用 exception_handling.patchGC-GWebAssembly/gc应用 gc_ignore_cases.patch 等且因 wabt 1.0.36 尚不能正确处理 GC proposal如(ref null $t)语法会额外编译 spec 自带的参考解释器test_wamr.sh扩展常量表达式-NWebAssembly/extended-constmemory64-WWebAssembly/memory64多内存-EWebAssembly/multi-memoryAOT 模式下还会应用 multi_module_aot_ignore_cases.patch。实际执行由 Python 脚本完成all.py负责批量调度runtest.py负责单个用例。它们支持的解释器/编译器参数与 test_wamr.sh 完全对应也可以脱离 test_wamr.sh 单独运行单个用例见 all.pycd workspace # 解释器模式跑单个用例 python3 runtest.py --wast2wasm wabt/bin/wat2wasm --interpreter iwasm \ spec/test/core/xxx.wast # AOT 模式跑单个用例 python3 runtest.py --aot --wast2wasm wabt/bin/wat2wasm --interpreter iwasm \ --aot-compiler wamrc spec/test/core/xxx.wast-P参数可让 spec 测试并行执行--parl-X、-Q等则分别透传 XIP 与 QEMU 参数QEMU 模式下不再本地构建 iwasm直接使用iwasm命令与--qemu-firmware指定的固件。单元测试-s unit与多模式构建矩阵单元测试位于 tests/unit 目录基于 GoogletestC 用例与 CMockaC 用例如mem-alloc。通过-s unit触发后unit_test() 会为每个运行模式创建独立的构建目录workspace/unittest-build-mode./test_wamr.sh -s unit -t classic-interp ./test_wamr.sh -s unit -t fast-interp ./test_wamr.sh -s unit -t jit ./test_wamr.sh -s unit -t aot执行细节-t jit会映射为llvm-jit单元测试模式注意fast-jit与multi-tier-jit目前没有对应的单元测试用例脚本会打印 Skip unit tests 并跳过见 unit_test()每个模式通过cmake -S ../../unit -B unittest-build-mode独立配置-DCOLLECT_CODE_COVERAGE与-DFULL_TEST会被透传随后cmake --build构建、ctest --test-dir执行结果追加写入unit_test_report.txt若省略-t脚本按默认模式列表逐个处理报告统一累积-U开启完整单元测试FULL_TESTON将llm-enhanced-test子模块也纳入构建tests/unit/CMakeLists.txt 中FULL_TEST分支该子模块需先通过git submodule update --init --recursive初始化-C收集代码覆盖率./test_wamr.sh -s unit -t classic-interp -U ./test_wamr.sh -s unit -t aot -C单元测试的项目结构遵循一套固定规范详见 tests/unit/README.md每个特性一个目录、wamr_unit_test_suite_run_modes()声明支持的运行模式、WAMR_BUILD_*开关必须在include(../unit_common.cmake)之前设置、通过gtest_discover_tests()注册用例、wasm/aot测试夹具一律在构建期由wat2wasm/wasi-sdk/wamrc生成而非提交二进制。回归测试-s regression与 BA-issue 用例库回归测试针对 tests/regression/ba-issues 目录下按 issue 编号组织的历史 bug 用例issues/issue-xxx通过 build_run.py 驱动./test_wamr.sh -s regression -t classic-interp ./test_wamr.sh -s regression -t fast-interp ./test_wamr.sh -s regression -t aot ./test_wamr.sh -s regression -t fast-jit与单元测试相同-t jit映射为llvm-jit模式build_run.py 内部的命名见 test_wamr.shmulti-tier-jit因暂无回归用例被跳过省略-t时逐模式执行共享的运行时可能被重复构建多次-C会从ba-issues/build/build-iwasm-*目录收集覆盖率./test_wamr.sh -s regression -t aot -CBA-issue 用例的组织方式见 tests/regression/ba-issues/README.mdhelper.sh可批量创建 issue 目录并解压 zipbuild_run.py里的RUNTIME_BUILD_FLAGS字典定义了多种iwasm/wamrc构建配置例如iwasm-multi-tier-wasi-disabledrunning_config.json描述每个用例的运行方式支持仅 iwasm仅 wamrc 编译wamrc 编译 iwasm 运行三种形态通过ret code、stdout content等字段声明预期结果并用deprecated: true标记因规范变化而废弃的用例。其余套件与高级选项standalone 与 malformed-s standalone调用 standalone_test()本质是执行 standalone.sh按--mode [--sgx|--no-sgx] [--thread|--no-thread] [--simd|--no-simd] target的顺序透传参数并遍历tests/standalone下各子目录test-printf、test-pthread、test-invoke-native、test-running-modes、dump-call-stack等的run.sh。部分场景因耗时或特性依赖会被忽略例如经典解释器下跳过gcc-loops/smallpt/tsf无--thread时跳过test-pthread-s malformed调用 malformed_test()运行 malformed_test.py遍历 tests/malformed含fuzz与github两个用例目录下所有.wasm文件逐个用 iwasm 尝试执行只要不出现段错误即视为通过用于验证畸形输入的鲁棒性。wasi_certification 与 wamr_compiler-s wasi_certification会 cloneWebAssembly/wasi-testsuite并复位到固定 commitee807fc5见 test_wamr.sh再通过 run_wasi_tests.sh 执行认证用例此时脚本会自动切换为内置 WASI libc-DWAMR_BUILD_LIBC_WASI1 -DWAMR_BUILD_LIBC_UVWASI0-s wamr_compiler仅支持 AOT 模式其他模式直接跳过通过 run_wamr_compiler_tests.sh 用wat2wasmwamrciwasm三件套验证编译器行为。其他实用选项参数用途-c交互确认后清空workspace/report与/tmp下的临时 wasm 文件不启动测试-A cmd使用外部指定的wamrc命令跳过本地构建否则 aot 模式会自动执行 build_wamrc()即先跑build_llvm.sh再 cmake 编译-T sanitizer传入 sanitizer逗号分隔列表如ubsan,asan或单个ubsan/tsan/asan/posan拼入-DWAMR_BUILD_SANITIZER-Q/-F启用 QEMU 模拟执行并指定固件路径-Pspec 测试并行化-g以 Debug 版本构建 iwasm-DCMAKE_BUILD_TYPEDebug-v开启 GC 堆验证-DWAMR_BUILD_GC_HEAP_VERIFY1-r name [N ...]只运行需求工程测试指定需求名与可选的子需求 ID 列表由 run_requirement.py 执行并写入报告目录-j platform覆盖平台检测默认依据uname或OSTYPE判断Windows 下使用python而非python3DEBUG1环境变量方式开启set -exv调试输出test_wamr.sh测试报告与代码覆盖率每次运行都会在workspace/report/YYYY-MM-DD_HH:MM:SS/下生成时间戳目录各套件的结果分别写入spec_test_report.txt、unit_test_report.txt、regression_test_report.txt、standalone_mode_test_report.txt、malfomed_mode_test_report.txt、wasi_test_report.txt等文件脚本结尾会打印 Reports are under ... 指明位置。覆盖率收集由 collect_coverage.sh 完成基于 lcov单元测试从各unittest-build-mode目录收集回归测试从ba-issues/build/build-iwasm-*收集其余套件从平台构建目录收集AOT 模式还会额外收集wamr-compiler/build下 wamrc 的覆盖率最终汇总到workspace/wamr.lcov。注意脚本注释提示 JIT 模式目前不收集覆盖率存在链接错误。如何扩展新增测试套件与用例向测试框架加入新套件的约定非常明确见 test_wamr.sh 的注释模板在 spec-test-script 同级目录放置套件脚本函数命名必须为${suite_name}_test例如wasi_certification_testtrigger()会通过字符串拼接$suite_test的方式动态调用它新套件的运行模式与目标平台等参数通过$1、$TARGET、$SGX_OPT等全局变量读取构建好的 iwasm 路径为$IWASM_CMD单元测试套件则遵循 tests/unit/README.md 的六条规范目录命名小写连字符、wasm/aot夹具构建期生成、ctest统一调度、wamr_unit_test_suite_run_modes()显式声明运行模式。这套框架的价值在于同一份用例库可以在六种运行模式、十余种目标架构、多种 Wasm proposal 组合下重复执行任何一处行为差异都会在统一格式的报告中暴露出来是 WAMR 日常开发与发版前回归的重要保障。赞分享语言运行时嵌入式物联网【免费下载链接】wasm-micro-runtimeWebAssembly Micro Runtime (WAMR)项目地址https://gitcode.com/gh_mirrors/wa/wasm-micro-runtime点击查看免费下载相关推荐WAMR 测试套件wamr-test-suites完整使用指南test_wamr.sh 全参数解析与 Spec/WASI 测试实战WAMR 测试套件wamr test suites完整使用指南test_wamr.sh 全参数解析与 Spec/WASI 测试实战 导读 本文围绕 WAM可观测性日志分析云原生流处理如何使用radare2测试套件面向开发者的完整质量保证与回归测试指南如何使用radare2测试套件面向开发者的完整质量保证与回归测试指南 radare2是一款功能强大的UNIX like逆向工程框架和命令行工具集其测试套件是逆向工程网络安全Radare2 回归测试套件r2r完全指南从测试编写到自动化运行Radare2 回归测试套件r2r完全指南从测试编写到自动化运行 本指南以仓库 test/README.md https://link.gitcode.c逆向工程网络安全上一篇Sa-Token SSO 模式一共享 Cookie 同步会话实现多系统单点登录下一篇Gas Town 账本导出触发器Ledger Export Triggers设计解读从操作平面到账本平面的保真度迁移机制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考