Jmeter压测http、Java接口总结
Jmeter 通过线程组驱动多个线程。建立一个线程池,多线程运行取样器产生大量负载,达到压测的目的。
一、基本组件
1、信息头管理器
用于定制Sampler发出的HTTP请求的请求头的内容。访问某些防盗链的页面时需要正确的Refer, 也可以用于设置Cookie信息等。
2、csv data set Config
实现参数化数据,配置元件->CSV Data Set Config下。一般文件格式采用csv。设置的格式如下:
下面几项的含义:
Recycle on EOF : 设置为true,允许循环取值
Stop thread on EOF : 设置为false,文件中数据读取完,不会停止,结合Recycle on EOF (true)循环取值;
设置为true时,且Recycle on EOF (false), 读完csv文件中的数据后,停止运行。设置的线程数及执行次数等无效。
Sharing mode : 共享模式。 All threads: 所有线程,所有线程循环取值。
变量的引用方式:${id}
二、HTTP接口
https:https由于需要证书校验,需要添加证书。
1、将网站的证书(.cer)打成.store文件,输入秘钥库口令及信任该证书,会生成my.store,包含目前网站的证书和自己的密码:
keytool -import -alias "my.store" -file "xx.cer" -keystore my.store
2、SSL管理器中选择刚才生成的证书即可。3、https接口
添加http请求,设置服务器名称,路径,及发送参数等,就可以尝试发送https请求。
三、Java请求
3.1 主要步骤:
1)创建Java工程
2)将Jmeter \lib\ext下的ApacheJMeter_core.jar和ApacheJMeter_java.jar2个jar文件添加到工程的Build Path中。

public Arguments getDefaultParameters(); //设置参数及其默认值;
public void setupTest(JavaSamplerContext arg0); //做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0); //开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0); //测试结束时调用;
执行的顺序:
getDefaultParameters() --> setupTest(JavaSamplerContext arg0) --> runTest(JavaSamplerContext arg0) --> teardownTest(JavaSamplerContext arg0)
4)测试通过后,将工程导出为Runnable Jar File,放在 \lib\ext目录下;
5)以管理员身份启动,创建Java请求即可
注:常遇到的问题,JDK版本,启动内存的大小,以及引入jar包的冲突。
3.2 JavaSamplerClient实例
public class Test implements JavaSamplerClient
{
private SampleResult results;
public Arguments getDefaultParameters()
{
Arguments arguments = new Arguments();
arguments.addArgument("id", "0"); //定义参数
arguments.addArgument("logStr", "0");
return arguments;
}
public SampleResult runTest(JavaSamplerContext arg0)
{
this.results = new SampleResult();
String uid = arg0.getParameter("id");
String logStr = arg0.getParameter("logStr");
try {
results.sampleStart(); //记录开始
Service.getByUid(uid); //调用
results.sampleEnd();
results.setRequestHeaders("id:"+uid);
results.setDataType(SampleResult.TEXT);
results.setSuccessful(true);
} catch (Exception e) {
results.setSuccessful(false);
e.printStackTrace();
}
return results;
}
public void setupTest(JavaSamplerContext arg0)
{
beforeClass();
}
public void teardownTest(JavaSamplerContext arg0)
{
}
public void beforeClass()
{
//init
}
public static void main(String[] args)
{
}
}
四、命令行方式
/home/work/apache-jmeter-3.0/bin目录下,运行如下命令:
sh jmeter.sh -n -t Test.jmx -l logfile1.jtl