1、Jmeter安装
Apache Jmeter是完全基于JAVA的桌面应用程序,需安装JDK1.4以上版本的JDK,并设置环境变量JAVA_HOME。下载apache-jmeter-2.13.zip,解压即可。
2、Jmeter运行
命令启动:jmeter -n -t xxx.jmx
双击apache-jmeter-2.13injmeter.bat文件,出现如下视图:
3、创建线程组
右键测试计划依次选择添加—>Threads(users)—>线程组,此时创建了一个默认线程组。
Ramp-up Period(in seconds)决定多长时间启动所有线程。0代表同时并发;假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。
Delay Thread creation until needed 延迟创建线程,直到该线程开始采样,即之后的任何线程组延迟和加速时间为线程本身。这样可以支持更多的线程,但不会有太多是同时处于活动状态。
4、添加取样器
所有的测试任务都由取样器承担,有很多种,如:HTTP 请求、JAVA请求等,以HTTP请求为例:
4.1 HTTP请求
右键线程组,依次选择添加—>Sampler—>HTTP请求。
服务器名称或IP:被测服务器的域名或IP地址,如果是本机可写localhost或127.0.0.1。
端口号:被测服务所占端口。比如tomcat默认端口为8080。
Implementation:选择httpClient4标准,可空。
协议:输入http,可空。
方法:选择Post。
Content encoding:输入utf-8。
路径:要测试的URL,不需要包含服务器IP和端口。
4.2 webservice接口测试
右键线程组,依次选择添加—>Sampler—>SOAP/XML-RPC Request:
URL:webservice地址
SOAP/XML-RPC DATA 格式如下:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://ws.yiibai.com/"> 接口所在包名倒置
<soapenv:Header/>
<soapenv:Body>
<web:getHelloWorldMessage> 接口名称
<arg0>abc</arg0> 参数名称,默认为arg0、arg1,依次类推,如果指定参数名,不可用arg。
</web:getHelloWorldMessage>
</soapenv:Body>
</soapenv:Envelope>
4.3 JAVA请求
右键线程组,依次选择添加—>Sampler—>Java请求,在类名称中选择要测试的类,将自动回显参数项,输入参数值即可启动。此处的类需要编写,可选择Java、Python等语言。可参见6、Jmeter脚本开发
5、添加监听器
5、1查看结果树
它的功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。
右键测试计划,依次选择添加—>监听器—>察看结果树。
使用快捷键ctrl+R或者点击绿色按钮,启动测试计划。在察看结果树中将看到取样器结果、请求、响应数据。
5、2聚合报告
Average:平均响应时间
Throughput:吞吐量,每秒处理的请求数(设备能够承受的最大速率),
吞吐量=请求总数/(测试结束时间-测试开始时间)
测试结束时间= MAX(请求开始时间+Elapsed Time)
测试开始时间=MIN(请求开始时间)
监听器中添加Simple Data Writer,可以查看时间。
10Mbps带宽,吞吐量大概为2Mbps
KB/Sec:每秒从服务器接收的数据量
6、Jmeter脚本开发
开发工具:MyEclipse
第一步:工程中添加jmeter相关jar包。
第二步:创建测试类JmeterTest.java,继承AbstractJavaSamplerClient,会生成四个方法。
getDefaultParameters()设置方法参数及默认值
setupTest(JavaSamplerContext arg0)每个线程测试前执行一次,做一些初始化工作
runTest(JavaSamplerContext arg0)开始测试,从arg0参数中获得参数
teardownTest(JavaSamplerContext arg0)测试结束时调用
package com.z2sci.Jmeter.test;
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;
public class JmeterTest extends AbstractJavaSamplerClient{
private String a;
private String b;
private String resultData;
// 这个方法是用来自定义java方法入参的。
// params.addArgument("num1","");表示入参名字叫num1,默认值为空。
//设置可用参数及的默认值;
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("num1", "");
params.addArgument("num2", "");
return params;
}
//每个线程测试前执行一次,做一些初始化工作;
public void setupTest(JavaSamplerContext arg0) {
}
//开始测试,从arg0参数可以获得参数值;
public SampleResult runTest(JavaSamplerContext arg0) {
a = arg0.getParameter("num1");
b = arg0.getParameter("num2");
SampleResult sr = new SampleResult();
sr.setSampleLabel( "Java请求哦");
try {
sr.sampleStart();// jmeter 开始统计响应时间标记
Hello test = new Hello();
// 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
resultData = String.valueOf(test.sum(Integer.parseInt(a), Integer
.parseInt(b)));
if (resultData != null && resultData.length() > 0) {
sr.setResponseData("结果是:"+resultData, null);
sr.setDataType(SampleResult.TEXT);
}
sr.setSuccessful(true);
} catch (Throwable e) {
sr.setSuccessful(false);
e.printStackTrace();
} finally {
sr.sampleEnd();// jmeter 结束统计响应时间标记
}
return sr;
}
//测试结束时调用;
public void teardownTest(JavaSamplerContext arg0) {
// System.out.println(end);
// System.out.println("The cost is"+(end-start)/1000);
}
}
第三步:将工程导出jar包,放到jmeter/lib/ext目录下。
7、保持session
登录之后保持session配置方法。
第一步:jmeter.properties 配置文件中设置 CookieManager.save.cookies=true 。
第二步:在登录线程组中添加Debug Sampler,执行后取出COOKIE_JSESSIONID的值。
第三步:添加HTTP Cookie管理器中设置
8、参数化
第一步:将准备的数据写到CSV,或其他格式的文件(多个参数,用逗号或tab键分隔)
第二步:添加CSV Data Set Config,
Filename:文件所在路径
File encoding:编码
Variables Names(comma-delimited):变量名称
Delimiter(use ‘ ’ for tab):分隔符
Recycle on EOF:线程是否循环取值
第三步:在取样器中引用变量