编写一个简单的jmeter插件用来在jmeter每次线程组执行时记录traceId实现调用链效果
首先,我们需要创建一个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的输出
原文地址: https://www.cveoy.top/t/topic/fDD2 著作权归作者所有。请勿转载和采集!