You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JMH Jar文件仅运行指定的部分基准测试方法?

JMH指定运行部分基准测试方法失败的解决办法

问题场景

已有包含3个基准测试方法的JMH测试类:

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Fork(1)

@State(Scope.Benchmark)
public class TestBenchmark {
    private CW cw;

    @Param({"C:data.csv"})
    public String fileName;


    @Param({"100"})
    public int id;

    @Setup
    public void setup() {
        cw = new CW(fileName);
    }

    @Benchmark
    public void method1() {
        cw.method1(id);
    }

    @Benchmark
    public void method2() {
        cw.method2(id);
    }

    @Benchmark
    public void method3() {
        cw.method3(id);
    }
}

已执行mvn clean install编译得到benchmark.jar,希望仅运行method1和method2,但执行命令java -jar benchmark.jar -f "method1|method2"时出现错误:

Error parsing command line:
 Cannot parse argument 'method1|method2' of option f

原因分析

-f是--forks参数的缩写,作用是指定JVM fork的次数,并非用来过滤要运行的测试方法,因此传入方法名会触发参数解析错误。

解决方案

JMH提供多种方式指定要运行的测试方法,以下是几种可行的命令:

方式1:直接传入方法名匹配正则

java -jar benchmark.jar "method1|method2"

方式2:用逗号分隔多个方法名

java -jar benchmark.jar method1,method2

方式3:使用-include参数明确指定匹配规则

java -jar benchmark.jar -include "method1|method2"

如果存在同名方法的其他测试类,也可以指定完整的方法签名来避免冲突:

java -jar benchmark.jar "TestBenchmark.method1|TestBenchmark.method2"

内容的提问来源于stack exchange,提问作者one-hand-octopus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:35:38