首先,我们需要创建一个 JMeter 插件项目。可以使用 Maven 构建一个 Java 项目,并在 pom.xml 文件中添加以下依赖项:

<dependencies>
    <dependency>
        <groupId>kg.apc</groupId>
        <artifactId>jmeter-plugins-casutg</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>kg.apc</groupId>
        <artifactId>jmeter-plugins-cmn-jmeter</artifactId>
        <version>0.6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_core</artifactId>
        <version>5.4.1</version>
    </dependency>
</dependencies>

然后,我们需要创建一个实现 JMeter Test Element 接口的类,可以称之为 TraceSampler。TraceSampler 需要实现以下方法:

@Override
public SampleResult sample(Entry entry) {
    // 获取当前线程的 TraceId
    String traceId = TraceContext.getCurrentTraceId();
    
    // 创建一个 SampleResult 对象
    SampleResult result = new SampleResult();
    
    // 设置 SampleResult 对象的属性
    result.setSampleLabel(getName());
    result.setSuccessful(true);
    result.setResponseCodeOK();
    result.setResponseMessage('OK');
    result.setSamplerData(traceId);
    
    // 返回 SampleResult 对象
    return result;
}

@Override
public void addTestElement(TestElement el) {
    // 不需要实现
}

@Override
public void sampleOccurred(SampleEvent event) {
    // 不需要实现
}

@Override
public void clear() {
    // 不需要实现
}

@Override
public void setName(String name) {
    super.setName(name);
}

在 TraceSampler 类中,我们使用 TraceContext.getCurrentTraceId() 获取当前线程的 TraceId。然后,我们将 TraceId 作为 SampleResult 对象的 samplerData 属性设置。这样,每次执行线程组时,我们都可以看到当前线程的 TraceId。还可以将 TraceId 作为 HTTP 请求的请求头发送到下游系统,实现调用链效果。

最后,需要将 TraceSampler 类打包成一个 jar 文件,并将它放置在 JMeter 的 lib/ext 目录下。启动 JMeter 后,在测试计划中添加一个 TraceSampler 元素,然后执行线程组,即可看到 TraceId 的输出。

JMeter 插件:实现线程组 TraceId 记录,构建调用链

原文地址: https://www.cveoy.top/t/topic/ojK5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录