首先,我们需要创建一个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插件用来在jmeter每次线程组执行时记录traceId实现调用链效果

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

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