JMeter入门使用介绍(一)

1. JMeter简介

Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

2. 安装与配置

2.1. 工具/原料

l JDK 1.7

l Apache JMeter 3.0

2.2. 环境

JMeter可以在Windows/Linux/Mac平台上运行,这里介绍在Windows上的安装配置。

2.3. 安装步骤

l 安装JDK,网上下载一个JDK,配置好环境变量即可使用。在dos界面输入java -version,能显示版本号,则证明JDK安装OK,可以使用。


l 安装Jmeter:Jmeter不需要安装,解压之后即可使用;

双击Jmeter的bin目录下的jmeter.bat,出现下面界面,则Jmeter启动成功,Jmeter就绪。


3. HTTP接口测试

3.1. 测试实例

以一个简单的接口为例:

http://httpbin.org/get?key2=value2&key1=value1

在浏览器中打开的效果如下:


在这里,成功的用浏览器访问了这个接口,并得到了成功的返回报文。下面我们用Jmeter来访问这个接口。

3.2. 使用Jmeter进程HTTP测试

3.2.1. 添加线程组

l 右键“测试计划”->“添加”->“Threads(Users)”->“线程组”


3.2.2. 添加“HTTP请求”

l 右键“线程组”->“添加”->“Sampler”->“HTTP请求”


l 打开之后,填入访问该接口所需要的参数,效果如下图



Tips:

1. 服务器名或IP:这里填写服务IP地址(不带端口),有域名的直接填写域名

2. 端口号:这里填写端口号,有域名的这里为空就好。

3. Timeouts(milliseconds):超时时间,单位是毫秒;Connect:连接超时;Response:响应超时。二者都可以不填

4. Implementa:采用什么实例来运行这次HTTP请求(HttpClient4/HttpClient3.1/Java),这里我们不用选择,直接默认就好。

协议:该接口采用什么协议(http/https),这里不填默认是http,根据情况填写

方法:请求该接口的方法(GET/POST等),根据接口请求类型选择。

Content encoding:这里是返回报文的编码格式(如‘utf-8’),采用默认值就好

5. 同请求一起发送参数:接口的参数,可以通过下方“添加”按钮,添加参数,左边为“key”,右边填“value”,如上图。(这里只适用于传参数的接口,传Json和文件等接口使用这种方式不支持,暂不做介绍)

3.2.3. 添加监听器

完成上述3.2.1和3.2.2步,一个接口的简单脚本已经编写完成了;但是此时我们还不知道在哪里查看脚本运行的结果,这里我们需要添加一个监听器。

l 右键“线程组”->“添加”->“监听器”,选择“察看结果树”


Tips:Jmeter提供了需要监听器,有兴趣的可以去一一添加,察看效果。

3.2.4. 运行脚本

l 点击按钮,运行脚本,察看结果


在“响应数据”下,我们看到了与使用浏览器一样的返回结果(报文中headers有差异,这部分可以忽略,想知道为什么不一样的可以去学学http协议,在这里不影响结果)。


到这里,一个http接口测试的Jmeter脚本已经完成。“Ctrl+S”保存一下吧,下次就可以直接拿来使用了(Jmeter脚本默认保存在bin目录下)

3.3. 压力测试

在上面脚本配置上线程数,即可对该接口进行压力测试啦。

l 点击“线程组”


1. 线程数:需要采用多少个并发。

2. Ramp-Up Period(in seconds):设置到达最大并发所需时间(如上图,从0增加到5个并发,花费1秒钟)

3. 循环次数:每个并发执行几遍脚本(如上图,每个线程执行100遍)。勾选永远,则脚本会被无限循环执行下去。

4. 调度器:勾选则启用调度器

持续时间(秒):设置脚本跑多久(如需要让脚本跑一分钟,则填入60)

启动延迟(秒):延迟多少秒才开始执行脚本


l 添加“聚合报告”

聚合报告是一个监听器,作用是,为本次压力测试整理出一份“报表”


l 点击按钮让我们来看看5并发循环100次的结果


l 点击按钮,清除上次测试结果,然后来看看10并发循环100次结果


可以看到5并发时,Throughput为13.0/sec;10并发时:Throughput为22.6/sec。

理论上,并发数与吞吐量成正比,并发越多,吞吐量越大。

实际上,服务器的处理能力和网络带宽是有限的,当并发数达到一定数量之后,吞吐量不随并发数增加而增长,出现响应时间变长,甚至服务器宕机等状况,称之为服务器的性能“瓶颈”。

简单来说,性能测试就是根据服务器的“瓶颈”,来评估服务的性能是否能够达到期望。


附:表头说明

Label - 如图,在不勾选"Include group name in label?"复选框的情况下,为请求取样器的名称,否则为“请求取样器所在线程组:请求取样器名称”

# Samples - 用同一个请求取样器,发送请求的数量(注意:该值是不断累计的)。比如,10个线程数设置为10,迭代10次,那么每运行一次测试,该值就增加10*10=100

Average - 默认情况下是单个Request的平均响应时间,当使用了Transaction Controller 时,也可以以Transaction为单位显示平均响应时间

Median - 中位数。表示响应时间本不大于该时间值的请求样本数占总数的50%

90% Line - 表示响应时间不大于该时间值的请求样本数占总数的90%

Min - 针对同一请求取样器,请求样本的最小响应时间

Max - 针对同一请求取样器,请求样本的最大响应时间

Error % - 出现错误的请求样本的百分比

Throughput - 吞吐量以“requests/second、requests /minute、requests /hour”来衡量。 时间单位已经被选取为second,所以,显示速率至少是1.0,即每秒1个请求。 当吞吐量被保存到CVS文件时,采用的是requests/second,所以30.0 requests/second 在CVS中被保存为0.5Kb/sec - 以Kilobytes/seond来衡量的吞吐量

3.4. 附上演示脚本

上面演示步骤最后保存的脚本,可以直接用Jmeter打开,运行。

举报
评论 0