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.store2、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