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打开,运行。
请先 后发表评论~