随着我们采用不同的体系结构和实现方式,对通用压力测试工具的需求不断增长。
Apache Jmeter是进行负载测试时最著名的工具之一。 它支持许多协议,例如ftp http tcp,并且可以轻松地用于分布式测试。
Jmeter还为您提供了一种创建自定义采样器的简便方法。 例如,如果您需要对HTTP终结点进行负载测试,而该终结点需要用于签名标头的特定过程,那么自定义采样器将派上用场。
目标是实现一个自定义采样器项目,该项目将对一个简单功能进行负载测试。
在此示例中,我使用gradle 。
group 'com.gkatzioura.jmeter'
version '1.0-SNAPSHOT'
apply plugin: 'java'
sourceCompatibility = 1.6
repositories {
mavenCentral()
}
dependencies {
compile 'org.apache.jmeter:ApacheJMeter_java:2.11'
compile 'org.json:json:20151123'
testCompile group: 'junit', name: 'junit', version: '4.11'
}
task copySample(type:Copy,dependsOn:[build]) {
copy {
from project.buildDir.getPath()+'/libs/jmeter-sampler-1.0-SNAPSHOT.jar'
into 'pathtoyourjmeterinstallation/apache-jmeter-2.13/lib/ext/'
}
}
我包括对项目的ApacheJMeter依赖项,因为采样器将必须扩展AbstractJavaSamplerClient。 copySample任务会将jar复制到所有采样器所在的Jmeter的lib / ext路径中。
采样器将调用一个简单的函数:
package com.gkatzioura.jmeter;
/**
* Created by gkatzioura on 30/1/2016.
*/
public class FunctionalityForSampling {
public String testFunction(String arguement1,String arguement2) throws Exception {
if (arguement1.equals(arguement2)) {
throw new Exception();
}
else return arguement1+arguement2;
}
}
CustomSampler类扩展AbstractJavaSamplerClient类并调用testFunction。 通过覆盖getDefaultParameters函数,我们可以应用可与请求一起使用的默认参数。
package com.gkatzioura.jmeter;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.Serializable;
/**
* Created by gkatzioura on 30/1/2016.
*/
public class CustomSampler extends AbstractJavaSamplerClient implements Serializable {
private static final String METHOD_TAG = "method";
private static final String ARG1_TAG = "arg1";
private static final String ARG2_TAG = "arg2";
private static final Logger LOGGER = LoggerFactory.getLogger(CustomSampler.class);
@Override
public Arguments getDefaultParameters() {
Arguments defaultParameters = new Arguments();
defaultParameters.addArgument(METHOD_TAG,"test");
defaultParameters.addArgument(ARG1_TAG,"arg1");
defaultParameters.addArgument(ARG2_TAG,"arg2");
return defaultParameters;
}
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
String method = javaSamplerContext.getParameter(METHOD_TAG);
String arg1 = javaSamplerContext.getParameter(ARG1_TAG);
String arg2 = javaSamplerContext.getParameter(ARG2_TAG);
FunctionalityForSampling functionalityForSampling = new FunctionalityForSampling();
SampleResult sampleResult = new SampleResult();
sampleResult.sampleStart();
try {
String message = functionalityForSampling.testFunction(arg1,arg2);
sampleResult.sampleEnd();;
sampleResult.setSuccessful(Boolean.TRUE);
sampleResult.setResponseCodeOK();
sampleResult.setResponseMessage(message);
} catch (Exception e) {
LOGGER.error("Request was not successfully processed",e);
sampleResult.sampleEnd();
sampleResult.setResponseMessage(e.getMessage());
sampleResult.setSuccessful(Boolean.FALSE);
}
return sampleResult;
}
}
编译完成后,必须将创建的jar复制到JMeter安装目录的lib / ext目录。 同样,如果还有更多依赖项需要导入,则还应该将它们复制到JMeter安装目录的lib路径中。
通过将Java Sampler添加到JMeter线程组来完成该过程之后,我们可以选择我们的自定义采样器。
- 您也可以在此处找到源代码。
翻译自: https://www.javacodegeeks.com/2016/02/implement-custom-jmeter-samplers.html