Linux下 运行Jmeter (含一个jmeter简单示例)
2016-05-04 17:46
495 查看
本文的方法是现在图形界面下添加好组件,生成jmx脚本文件,然后将jmx文件放到linux环境下用命令行运行脚本,进行性能测试。
1. 用Jmeter进行打压测试
如果可以打开图形界面,则可以参看图形界面的使用教程;
此外,在Linux下用命令行进行测试。
1.1 在图形界面编辑打压测试脚本
参考《Jmeter教程 简单的压力测试》:http://www.cnblogs.com/TankXiao/p/4059378.html
其实所谓的脚本文件,就是用图形界面配置好信息后保存的jmx文件,jmx是一个xml格式的文本,可以用来在命令行作为参数执行。
4000
以下流程是在《Jmeter教程 简单的压力测试》的基础上根据 Y公司 的测试习惯做得补充和修改:
什么是压力测试
顾名思义:压力测试,就是 被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定(资源占用情况)
比如: 2000个用户同时到一个购物网站购物,这些用户打开页面的速度是否会变慢,或者网站是否会奔溃
做压力测试的常用工具
做压力测试,一般要使用工具, 人工是没办法做的。 最常用的工具是LoadRunner, 但是LoadRunner毕竟是收费软件,而且使用上也比较复杂。 现在越来越多的人开始使用Jmeter来做压力测试。 免费, 而且使用上非常简单。
做压力测试的步骤如下:
1. 写脚本 或者录制脚本
2. 使用用户自定义参数
3. 场景设计
4. 使用控制器,来控制 模拟多少用户。
5. 使用监听器, 查看测试结果
本文做压力测试的例子
本文举的实例是: 在一台电脑用Jmeter模拟200个用户,同时去使用bing搜索不同的关键字, 查看页面返回的时间是否在正常范围内。
第一步: 使用CSV Data Set Config 来参数化
首先我们把测试需要用到的2个参数放在txt文件中,
新建一个data.txt文件,输入些数据, 一行有两个数据,用逗号分隔。
![](https://img-blog.csdn.net/20160504171310092?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
1. 启动Jmeter, 会出现如下界面,系统自动添加了一个Test Plan(测试计划),在名称位置可以更改测试计划名称,比如: Bing接口测试样本
![](https://img-blog.csdn.net/20160504171339889?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2. 先添加一个Thread Group (右击 Test Plan(测试计划) -> Add(添加) -> Thread(Users)-> Thread Group(线程组) );
![](https://img-blog.csdn.net/20160504171426984?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
线程组也可以重命名,比如:Bing 200并发
3. 然后在“线程组” 下 添加一个CSV Data Set Config (右击线程组 -> Add(添加) -> Config Element(配置元件) -> CSV Data Set Config);
![](https://img-blog.csdn.net/20160504171456032?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在 CSV Data Set Config 中配置测试中要用到的文件内容信息,
![](https://img-blog.csdn.net/20160504171536922?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
第二步:添加HTTP Request.
我们添加http 请求,发送get 到 http://cn.bing.com/search?q=${param1}+${param2} ()
1. 选择Thread Group 右键 (Add(添加) ->Sampler -> HTTP Request(HTTP 请求)),
![](https://img-blog.csdn.net/20160504171557376?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2. 需要填的数据如下:
A. 在路径中使用变量
![](https://img-blog.csdn.net/20160504171612937?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
B. 在变量栏中添加变量
![](https://img-blog.csdn.net/20160504171732473?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
C. 在变量中添加变量,同时路径中也含有变量
![](https://img-blog.csdn.net/20160504171744313?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
本文后续采用第二种方式
第三步: 使用Thread Group, 控制模拟多少用户
选中Thread Group
![](https://img-blog.csdn.net/20160504171803036?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Number of Threads(users 线程数): 一个用户占一个线程, 200个线程就是模拟200个用户
Ramp-Up Period(in seconds)(准备时长): 设置线程需要多长时间全部启动。如果线程数为200 ,准备时长为10 ,那么需要1秒钟启动20个线程。也就是每秒钟启动20个线程。
Loop Count(循环次数): 每个线程发送请求的次数。如果线程数为200 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为200*100=20000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。
注:如果想保证线程数里的线程能同时执行,所有线程的执行时间必须大于Ramp-up Period的时间。Jmeter打压的同时运行线程数最大不会超过我们设置的线程数。
关于 Number of Threads、Ramp-Up Period 以及 Loop Count 之间关系的解释,可参考:http://blog.csdn.net/hsd412237463/article/details/49929173
主要是对于 Ramp-Up Period 参数的理解(http://www.knowsky.com/367353.html)。
( 每个线程均独立运行测试计划。因此, 线程组常用来模拟并发用户访问。假如客户机没有足够的能力来模拟较重的负载,可以使用Jmeter的分布式测试功能来通过一个Jmeter控制台来远程控制多个Jmeter引擎完成测试。
参数 ramp-up period 用于告知JMeter 要在多长时间内建立全部的线程。默认值是0。假如未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程,假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。
线程组的大部分参数是不言自明的,只有ramp-up period有些难以理解, 因为如何设置适当的值并不轻易。 首先,假如要使用大量线程的话,ramp-up period 一般不要设置成零。 因为假如设置成零,Jmeter将会在测试的开始就建立全部线程并立即发送访问请求, 这样一来就很轻易使服务器饱和,更重要的是会隐性地增加了负载,这就意味着服务器将可能过载,不是因为平均访问率高而是因为所有线程的第一次并发访问而引起的不正常的初始访问峰值,可以通过Jmeter的聚合报告监听器看到这种现象。
这种异常不是我们需要的,因此,确定一个合理的ramp-up period 的规则就是让初始点击率接近平均点击率。当然,也许需要运行一些测试来确定合理访问量。
基于同样的原因,过大的ramp-up period 也是不恰当的,因为将会降低访问峰值的负载,换句话说,在一些线程还未启动时,初期启动的部分线程可能已经结束了。 )
此外,对于Thread Group 的循环次数的设置,可以选用调度器来指定:
![](https://img-blog.csdn.net/20160504171843599?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
第四步: 添加监听器 查看测试结果
有两种比较常用的监听器,一个是察看结果树(View Result Tree),右击线程组 -> Add -> Listener(监听器)-> View Result Tree(察看结果树)
![](https://img-blog.csdn.net/20160504171905397?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
一个是聚合报告(Aggregate Report),右击线程组 -> Add -> Listener(监听器)-> Aggregate Report(聚合报告)
![](https://img-blog.csdn.net/20160504171917475?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
下面运行完成之后再简单解释这两个监听器的作用
第五步: 运行一下
到目前为止, 脚本就全写好了, 我们来运行下, 如何看下测试的结果
![](https://img-blog.csdn.net/20160504171956048?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
点击启动之后,脚本就会执行,在“察看结果数”界面会看到我们发送的请求的具体信息和响应数据。
在实际的应用中,建议勾选“仅日志错误”,因为运行的请求太多时,如果全都显示,系统容易崩溃,且我们比较关心的是错误的结果。
![](https://img-blog.csdn.net/20160504172008305?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
聚合报告会显示很多详细信息,请求数量,99响应时间,错误率以及吞吐等。详细的解释请参看 《JMeter 聚合报告》( http://www.cnblogs.com/jackei/archive/2007/01/17/623166.html)。
1.2 在命令行下运行脚本
将1.1中的脚本保存,在编辑是随时可以保存,保存后是一个jmx格式的文件(如图),这个就是要在命令行下运行的脚本(作为参数运行)。
这个脚本文件可以不包含1.1中第四和第五步,即可以不需要添加监听器,运行是在命令行下执行。
![](https://img-blog.csdn.net/20160504172048087?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
进到解压apache-jmeter-2.13的路径下,
执行Jmeter 脚本的命令是:
./bin/jmeter -n -t .jmx文件(脚本) -l .jtl文件(测试运行结果文件)
例:
./bin/jmeter -n -t /home/test/Bing接口测试样本.jmx
-l /home/test/Bing接口测试样本.jtl
参数说明:
-n表示以nogui方式运行测试计划
-t表示测试计划,后面跟测试计划名称
-l表示测试结果,后面跟测试结果文件名称
运行后显示如下界面,即成功运行了脚本:
![](https://img-blog.csdn.net/20160504172120072?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
运行结束后,会显示:
![](https://img-blog.csdn.net/20160504172137721?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
显示 ... end of run 即脚本运行结束,在输入的测试运行结果文件的路径下就会出现命令中输入的jtl文件了。
![](https://img-blog.csdn.net/20160504172635129?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2. 查看测试结果
将上一步运行结束后生成的jtl文件传输到可视化图形界面可打开的路径下, 打开可视化图形界面的jmeter
随便新建一个项目,也可以用先用的项目,添加监听器,在监听器界面,点击浏览,选择测试运行的结果文件 .jtl文件,就可以查看结果了。
![](https://img-blog.csdn.net/20160504172307230?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20160504172716317?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20160504172729379?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
打开文件后,就会显示文件中的结果,但是如上述给出的命令在linux下得到的jtl文件里只有取样器结果,请求和相应数据为空
![](https://img-blog.csdn.net/20160504172758239?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20160504172813067?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
同样,在聚合报告中也可以打开jtl文件,查看结果:
![](https://img-blog.csdn.net/20160504172828458?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
备注: 另外,在Linux下我们有时候希望线程可以在后台运行,这样我们关闭当前连接后,线程依然可以运行,这里提供一个将 jmeter命令设置为后台线程的方法。
使用setsid命令:
setsid bin/jmeter -n -t .jmx文件 -l .jtl文件
setsid ./bin/jmeter -n -t .jmx文件 -l .jtl文件
有没有 ./ 当前目录的表示符都可以
运行结束后,会显示:
1. 用Jmeter进行打压测试
如果可以打开图形界面,则可以参看图形界面的使用教程;
此外,在Linux下用命令行进行测试。
1.1 在图形界面编辑打压测试脚本
参考《Jmeter教程 简单的压力测试》:http://www.cnblogs.com/TankXiao/p/4059378.html
其实所谓的脚本文件,就是用图形界面配置好信息后保存的jmx文件,jmx是一个xml格式的文本,可以用来在命令行作为参数执行。
4000
以下流程是在《Jmeter教程 简单的压力测试》的基础上根据 Y公司 的测试习惯做得补充和修改:
什么是压力测试
顾名思义:压力测试,就是 被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定(资源占用情况)
比如: 2000个用户同时到一个购物网站购物,这些用户打开页面的速度是否会变慢,或者网站是否会奔溃
做压力测试的常用工具
做压力测试,一般要使用工具, 人工是没办法做的。 最常用的工具是LoadRunner, 但是LoadRunner毕竟是收费软件,而且使用上也比较复杂。 现在越来越多的人开始使用Jmeter来做压力测试。 免费, 而且使用上非常简单。
做压力测试的步骤如下:
1. 写脚本 或者录制脚本
2. 使用用户自定义参数
3. 场景设计
4. 使用控制器,来控制 模拟多少用户。
5. 使用监听器, 查看测试结果
本文做压力测试的例子
本文举的实例是: 在一台电脑用Jmeter模拟200个用户,同时去使用bing搜索不同的关键字, 查看页面返回的时间是否在正常范围内。
第一步: 使用CSV Data Set Config 来参数化
首先我们把测试需要用到的2个参数放在txt文件中,
新建一个data.txt文件,输入些数据, 一行有两个数据,用逗号分隔。
1. 启动Jmeter, 会出现如下界面,系统自动添加了一个Test Plan(测试计划),在名称位置可以更改测试计划名称,比如: Bing接口测试样本
2. 先添加一个Thread Group (右击 Test Plan(测试计划) -> Add(添加) -> Thread(Users)-> Thread Group(线程组) );
线程组也可以重命名,比如:Bing 200并发
3. 然后在“线程组” 下 添加一个CSV Data Set Config (右击线程组 -> Add(添加) -> Config Element(配置元件) -> CSV Data Set Config);
在 CSV Data Set Config 中配置测试中要用到的文件内容信息,
第二步:添加HTTP Request.
我们添加http 请求,发送get 到 http://cn.bing.com/search?q=${param1}+${param2} ()
1. 选择Thread Group 右键 (Add(添加) ->Sampler -> HTTP Request(HTTP 请求)),
2. 需要填的数据如下:
A. 在路径中使用变量
B. 在变量栏中添加变量
C. 在变量中添加变量,同时路径中也含有变量
本文后续采用第二种方式
第三步: 使用Thread Group, 控制模拟多少用户
选中Thread Group
Number of Threads(users 线程数): 一个用户占一个线程, 200个线程就是模拟200个用户
Ramp-Up Period(in seconds)(准备时长): 设置线程需要多长时间全部启动。如果线程数为200 ,准备时长为10 ,那么需要1秒钟启动20个线程。也就是每秒钟启动20个线程。
Loop Count(循环次数): 每个线程发送请求的次数。如果线程数为200 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为200*100=20000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。
注:如果想保证线程数里的线程能同时执行,所有线程的执行时间必须大于Ramp-up Period的时间。Jmeter打压的同时运行线程数最大不会超过我们设置的线程数。
关于 Number of Threads、Ramp-Up Period 以及 Loop Count 之间关系的解释,可参考:http://blog.csdn.net/hsd412237463/article/details/49929173
主要是对于 Ramp-Up Period 参数的理解(http://www.knowsky.com/367353.html)。
( 每个线程均独立运行测试计划。因此, 线程组常用来模拟并发用户访问。假如客户机没有足够的能力来模拟较重的负载,可以使用Jmeter的分布式测试功能来通过一个Jmeter控制台来远程控制多个Jmeter引擎完成测试。
参数 ramp-up period 用于告知JMeter 要在多长时间内建立全部的线程。默认值是0。假如未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程,假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。
线程组的大部分参数是不言自明的,只有ramp-up period有些难以理解, 因为如何设置适当的值并不轻易。 首先,假如要使用大量线程的话,ramp-up period 一般不要设置成零。 因为假如设置成零,Jmeter将会在测试的开始就建立全部线程并立即发送访问请求, 这样一来就很轻易使服务器饱和,更重要的是会隐性地增加了负载,这就意味着服务器将可能过载,不是因为平均访问率高而是因为所有线程的第一次并发访问而引起的不正常的初始访问峰值,可以通过Jmeter的聚合报告监听器看到这种现象。
这种异常不是我们需要的,因此,确定一个合理的ramp-up period 的规则就是让初始点击率接近平均点击率。当然,也许需要运行一些测试来确定合理访问量。
基于同样的原因,过大的ramp-up period 也是不恰当的,因为将会降低访问峰值的负载,换句话说,在一些线程还未启动时,初期启动的部分线程可能已经结束了。 )
此外,对于Thread Group 的循环次数的设置,可以选用调度器来指定:
第四步: 添加监听器 查看测试结果
有两种比较常用的监听器,一个是察看结果树(View Result Tree),右击线程组 -> Add -> Listener(监听器)-> View Result Tree(察看结果树)
一个是聚合报告(Aggregate Report),右击线程组 -> Add -> Listener(监听器)-> Aggregate Report(聚合报告)
下面运行完成之后再简单解释这两个监听器的作用
第五步: 运行一下
到目前为止, 脚本就全写好了, 我们来运行下, 如何看下测试的结果
点击启动之后,脚本就会执行,在“察看结果数”界面会看到我们发送的请求的具体信息和响应数据。
在实际的应用中,建议勾选“仅日志错误”,因为运行的请求太多时,如果全都显示,系统容易崩溃,且我们比较关心的是错误的结果。
聚合报告会显示很多详细信息,请求数量,99响应时间,错误率以及吞吐等。详细的解释请参看 《JMeter 聚合报告》( http://www.cnblogs.com/jackei/archive/2007/01/17/623166.html)。
1.2 在命令行下运行脚本
将1.1中的脚本保存,在编辑是随时可以保存,保存后是一个jmx格式的文件(如图),这个就是要在命令行下运行的脚本(作为参数运行)。
这个脚本文件可以不包含1.1中第四和第五步,即可以不需要添加监听器,运行是在命令行下执行。
进到解压apache-jmeter-2.13的路径下,
执行Jmeter 脚本的命令是:
./bin/jmeter -n -t .jmx文件(脚本) -l .jtl文件(测试运行结果文件)
例:
./bin/jmeter -n -t /home/test/Bing接口测试样本.jmx
-l /home/test/Bing接口测试样本.jtl
参数说明:
-n表示以nogui方式运行测试计划
-t表示测试计划,后面跟测试计划名称
-l表示测试结果,后面跟测试结果文件名称
运行后显示如下界面,即成功运行了脚本:
运行结束后,会显示:
显示 ... end of run 即脚本运行结束,在输入的测试运行结果文件的路径下就会出现命令中输入的jtl文件了。
2. 查看测试结果
将上一步运行结束后生成的jtl文件传输到可视化图形界面可打开的路径下, 打开可视化图形界面的jmeter
随便新建一个项目,也可以用先用的项目,添加监听器,在监听器界面,点击浏览,选择测试运行的结果文件 .jtl文件,就可以查看结果了。
打开文件后,就会显示文件中的结果,但是如上述给出的命令在linux下得到的jtl文件里只有取样器结果,请求和相应数据为空
同样,在聚合报告中也可以打开jtl文件,查看结果:
备注: 另外,在Linux下我们有时候希望线程可以在后台运行,这样我们关闭当前连接后,线程依然可以运行,这里提供一个将 jmeter命令设置为后台线程的方法。
使用setsid命令:
setsid bin/jmeter -n -t .jmx文件 -l .jtl文件
setsid ./bin/jmeter -n -t .jmx文件 -l .jtl文件
有没有 ./ 当前目录的表示符都可以
运行结束后,会显示:
相关文章推荐
- tomcat、netty以及nodejs的helloworld性能对比 3ff8
- Jmeter接口测试实例讲解
- 用jmeter测试impala
- JMeter技巧集锦
- JMeter的介绍和脚本录制以及对WEB进行测试
- Jmeter基础
- Jmeter使用
- 使用jmeter来造数据
- 测转型到测试开发
- Jemeter测试——安装及简单配置
- Jmeter使用流程及简单分析监控
- 学习PHP精粹,编写高效PHP代码之性能
- Jmeter压力测试自动化
- 2013年阿里巴巴测试开发类笔试题 9-22号晚上考的
- 不靠谱的benchmark测试,关于Gatling和JMeter的测试结果验证
- 用jmeter进行接口压力测试的步骤
- JMeter - java请求
- Jmeter 接口测试发送数据乱码的问题
- jmeter使用CSV Data Set Config参数化方法
- jmeter 线程 上的参数解释理解的误区~