JMeter压力测试

来源:互联网 发布:免费局域网控制软件 编辑:程序博客网 时间:2024/05/16 08:23

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

2、下载JMeter
官方网站下载最新版本: http://jmeter.apache.org/download_jmeter.cgi ,目前最新版是Apache JMeter 3.0,JMeter依赖jdk,建议安装jdk 1.8版本。
Linux下安装jdk参考文章:http://www.linuxeye.com/Linux/Linux-install-JDK.html
Windowns下安装jdk同Linux下安装类似,这里就不介绍了。

3、启动JMeter
3.1 进入bin目录运行jmeter.bat,启动jmeter

注意:打开的时候会有两个窗口,JMeter的命令窗口和JMeter的图形操作界面,不可以关闭命令窗口。

3.2 JMeter的classpath
如果你想添加其他JAR文件到JMeter的classpath中,复制他们到lib目录中;如果你开发了一个JMeter特定组件或有效的jar文件,复制到lib目录下的ext目录中。

4、JMeter测试
打开Jmeter页面:包括测试计划+工作台。创建一个Jmeter测试,包括以下步骤:

4.1 创建一个Test Plan
Test Plan(测试计划):用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就说本的性能测试的所有内容是于基于一个计划的。
右键单击“测试计划”弹出菜单,如下界面:

这里写图片描述

4.2 建立一个线程组
Threads(Users)线程用户,虽然有三个添加线程组的选项,名字不一样,创建之后,其界面是完全一样的。

这里写图片描述

(1)setup thread group
一种特殊类型的ThreadGroup的,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行。

(2)teardown thread group.
一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组。

(3)thread group(线程组)
这个就是我们通常添加运行的线程。通俗的讲一个线程组,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。线程组中包含的线程数量在测试执行过程中是不会发生改变的。

这里写图片描述

Number of Threads:线程的数量。
Ramp-Up Period:单位是秒,默认时间是1秒。它指定了启动所有线程所花费的时间。如果你需要Jmeter立即启动所有线程,将此设定为0即可。
Loop Count:循环次数,表示每个线程执行多少次请求。

4.3 设置请求服务器、压力链接等信息
接下来很自然的是,我们要测试的网站地址是什么?链接是什么?所以现在我们就来设置这些信息。右键点击我们刚创建的线程组,在弹出的菜单中,选择添加->Sampler->Http请求,弹出如下图界面:

这里写图片描述

假如你只是对一个链接进行压力测试,直接填写一个链接就ok,比如 http://www.baidu.com,但是大多数情况下都不是这样的,我们这里需要多个链接,我们可以将多个链接保存到一个文本文件中,然后随机读取进行压力测试。如图:

这里写图片描述

在功能下拉列表中选择_StringFromFile,然后在本机新建一个测试文件C:\Users\root\Desktop\apache-jmeter-2.9\test.txt,在第一行(你也可以不在第一行)的值中填写测试文件的路径,如下图:

这里写图片描述

然后点击“生成”按钮,在生成按钮的左边文本框中将生成一个字符串。在test.txt测试文件中,我们每行写一个URL链接,如下格式:
/login.html
/user.html
/command/cat.html
/command/chmod.html
注意,每行前面并没有http://www.baidu.com这样的信息,因为我们在前面已经填写了服务器地址为http://www.baidu.com,这里就没必要再为每个url填写这个相同前缀了;另外,上面的url格式也只是个例子,表示域名后的部分。这样一来,当我们并非请求的时候,就会从test.txt中随机选择url来进行压力测试。

4.4 添加header和脚本
如果需要添加header信息和脚本。可以添加这些信息,如图:

这里写图片描述

添加header的属性和值:

这里写图片描述

添加脚本:

这里写图片描述

4.4 添加运行结果

这里写图片描述

4.5 查看运行结果
点击运行,执行本次测试。结束之后,查看各个运行结果。如View Results in Table结果:

这里写图片描述

各属性如下:
Sample:每个请求的序号
Start Time:每个请求开始时间
Thread Name:每个线程的名称
Label:Http请求名称
Sample Time:每个请求所花时间,单位毫秒
Status:请求状态,如果为勾则表示成功,如果为叉表示失败。
Bytes:请求的字节数
如果Status为叉,那很显然请求是失败了,但如果是勾,也并不能认为请求就一定完全成功了,因为还得看Bytes的字节数是否是所请求网页的正常大小值,如果不是则说明发生了丢包现象,也不是完全成功。

5、几个术语
(1)线程组:测试里每个任务都要线程去处理,所有我们后来的任务必须在线程组下面创建。可以在“Test Plan(鼠标右击) -> 添加 ->Threads(Users) -> 线程组”来建立它,然后在线程组面板里有几个输入栏:线程数、Ramp-Up Period(in seconds)、循环次数,其中Ramp-Up Period(in seconds)表示在这时间内创建完所有的线程。如有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是,一开始不会对服务器有太大的负载。
(2)取样器(Sampler):可以认为所有的测试任务都由取样器承担,有很多种,如:HTTP请求。
(3)断言:对取样器返回的请求结果给出判断是否正确。
(4)monitor:它的功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等

0 0
原创粉丝点击