如何为cargo test指定的测试用例运行cargo flamegraph?
解决cargo flamegraph分析单个测试用例失败的问题
你能通过cargo test tests::my_test -- --nocapture运行测试,但用cargo flamegraph报错,核心是没搞对不同测试类型的参数格式,下面是对应解决方案:
针对单元测试(tests::my_test)的正确命令
你的tests::my_test属于单元测试(写在src目录下的#[cfg(test)]模块里),根据项目类型选对应命令:
- 库 crate(有src/lib.rs):
cargo flamegraph --unit-test --lib -- tests::my_test
- 二进制 crate(仅src/main.rs):
把your_bin_name换成你Cargo.toml里的bin名称(默认和crate名一致):
cargo flamegraph --unit-test --bin your_bin_name -- tests::my_test
- 单crate通用写法:
用--package指定你的crate名称:
cargo flamegraph --unit-test --package your_crate_name -- tests::my_test
如果需要保留测试输出(类似--nocapture),把参数加在最后:
cargo flamegraph --unit-test --lib -- tests::my_test -- --nocapture
你之前命令的错误原因
cargo flamegraph --unit-test -- test::mytest:
flamegraph无法自动识别项目的target(比如你的项目是二进制crate,或存在多个target),必须显式指定--lib/--bin/--package。cargo flamegraph --unit-test my_crate -- test::mytest:
参数顺序错误,--unit-test后不能直接跟crate名,必须用--package your_crate_name来指定。cargo flamegraph --test tests::mytest -- --nocapture:--test参数是给集成测试用的(tests目录下的文件),而tests::my_test是单元测试的路径,不是集成测试的target名,所以会提示找不到目标。
集成测试的火焰图命令(如果需要)
如果是tests目录下的集成测试文件(比如tests/my_test.rs),用以下命令:
# 分析整个集成测试文件 cargo flamegraph --test my_test # 分析集成测试里的单个函数 cargo flamegraph --test my_test -- my_test::some_function
内容的提问来源于stack exchange,提问作者Makogan
相关产品推荐
相关产品推荐

