apache jmeter压力测试初体会-Mongodb Elasticsearch Test

apache jmeter压力测试初体会-Mongodb Elasticsearch Test

标签: apache jmeter压力测试工具mongodb性能测试elasticsearch测试


前言

最近由于工作需要,要对MongoDB,elasticsearch 进行测试,以便做优化调整,在搜索对比了各个测试工具后决定选择轻量级且免费的apache jmeter,最开始下了个2.12版本,发现没有mongodb config element,后来换成2.10版

基础了解

由于只是找本次测试需要用到的,所以不全面,需要了解全面的可浏览以下网站

http://jmeter.apache.org/usermanual/index.html  

http://www.cnblogs.com/yangxia-test/p/4023905.html 

一. JMeter 介绍

     Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等等。JMeter可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体性能。
     同时,JMeter可以帮助你对你的应用程序进行回归测试。通过你创建的测试脚本和assertions来验证你的程序返回了所期待的值。为了更高的适应性,JMeter允许你使用正则表达式来创建这些assertions.

JMeter与LoadRunner比较
JMeter 是一款开源的测试工具,虽然与LoadRunner相比有很多不足,比如:它结果分析能力没有LoadRunner详细;很它的优点也有很多:

  开源,他是一款开源的免费软件,使用它你不需要支付任何费用,
  小巧,相比LR的庞大(最新LR11将近4GB),它非常小巧,不需要安装,但需要JDK环境,因为它是使用java开发的工具。
  功能强大,jmeter设计之初只是一个简单的web性能测试工具,但经过不段的更新扩展,现在可以完成数据库、FTP、LDAP、WebService等方面的测试。因为它的开源性,当然你也可以根据自己的需求扩展它的功能。

二. JMeter 下载安装


1. http://jmeter.apache.org/下载最新版本的JMeter,解压文件到任意目录(本人用的是2.10版,在本文尾有下载链接)
2. 安装JDK,配置环境变量JAVA_HOME.
3. 系统要求:JMeter2.11 需要JDK1.6以上的版本支持运行
4. JMeter可以运行在如下操作系统上:Unix,Windows和Open VMS.
5. 避免在一个有空格的路径安装JMeter,这将导致远程测试出现问题。

三. JMeter 运行

1. 进入bin目录运行jmeter.bat启动jmeter linux 则用 sh jmeter 命令启动
   注意:打开的时候会有两个窗口,JMeter的命令窗口和JMeter的图形操作界面,不可以关闭命令窗口。

2. JMeter的classpath:

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

3. 打开之后显示的是中文,如果你想使用其他语言,比如英文,那么通过菜单选项->选择语言->英文即可,当然转为中文也是同样操作。

四. JMeter 测试计划元件 


打开Jmeter页面:包括测试计划+工作台。
1.Test Plan (测试计划):

用来描述一个性能测试,包含与本次性能测试所有相关的功能。也就说本的性能测试的所有内容是于基于一个计划的。
右键单击“测试计划”弹出菜单:

注意:

“函数测试模式”复选框,如果被选择,它会使Jmeter记录来自服务器返回的每个取样的数据。如果你在测试监听器中选择一个文件,这个数据将被写入文件。如果你尝试一个较小的测试来保证Jmeter配置正确并且你的服务器正在返回期望的结果,这是很有用的。这样做的后果就是这个文件会快速的增大,并且Jmeter的效率会影响。

如果不记录数据到文件,这个选项就没有不同了。

2.Threads (Users)线程 用户
虽然有三个添加线程组的选项,名字不一样, 创建之后,其界面是完全一样的。之前的版本只有一个线程组的名字。现在多一个setUp theread Group 与terDown Thread Group

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

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

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

线程组:

  名称:就如字面意思,起个有意义的名字就行
  注释:
  线程数:这里选择5
  Ramp-Up Period:单位是秒,默认时间是1秒。它指定了启动所有线程所花费的时间,比如,当前的设定表示“在5秒内启动5个线程,每个线程的间隔时间为1秒”。如果你需要Jmeter立即启动所有线程,将此设定为0即可
  循环次数:表示每个线程执行多少次请求。
3.测试片段(Test Fragment)

     测试片段元素是控制器上的一个种特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。

控制器

JMeter有两种类型的控制器:取样器(sample)和逻辑控制器(Logic Controller),用这些原件来驱动处理一个测试。
4.取样器(Sampler)
    取样器(Sample)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元,JMeter 原生支持多种不同的sampler , 如 HTTP Request Sampler 、 FTP  Request Sample 、TCP  Request Sample 、 JDBC Request Sampler 等,每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。
5.逻辑控制器(Logic Controller)
    逻辑控制器,包括两类无件,一类是用于控制test plan 中 sampler 节点发送请求的逻辑顺序的控制器,常用的有 如果(If)控制器 、 switch Controller 、Runtime Controller、循环控制器等。另一类是用来组织可控制 sampler 来节点的, 如 事务控制器、吞吐量控制器。
6.配置元件(Config Element)
    配置元件(config element)用于提供对静态数据配置的支持。CSV Data Set config 可以将本地数据文件形成数据池 (Data Pool),而对应于HTTP Request Sampler和 TCP Request Sampler等类型的配制无件则可以修改 Sampler的默认数据。

  例如,HTTP Cookie Manager 可以用于对 HTTP Request Sampler 的 cookie 进行管理。

     HTTP 请求默认值不会触发Jmeter发送http请求,而只是定义HTTP请求的默认属性。
7.定时器(Timer)
    定时器(Timer)用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手端。类似于LoadRunner里面的“思考时间”。 JMeter 定义了Bean Shell Timer、Constant Throughput Timer、固定定时器等不同类型的Timer。
8.前置处理器(Per Processors)
    前置处理器用于在实际的请求发出之前对即将发出的请求进行特殊处理。例如,HTTP URL重写修复符则可以实现URL重写,当RUL中有sessionID 一类的session信息时,可以通过该处理器填充发出请求的实际的sessionID 。
9.后置处理器(Post Processors)
    后置处理器是用于对Sampler 发出请求后得到的服务器响应进行处理。一般用来提取响应中的特定数据(类似LoadRunner测试工具中的关联概念)。例如,XPath  Extractor 则可以用于提取响应数据中通过给定XPath 值获得的数据。
10.断言(Assertions)
断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。
11.监听器(Listener)
这个监听器可不是用来监听系统资源的元件。它是用来对测试结果数据进行处理和可视化展示的一系列元件。 图形结果、查看结果树、聚合报告、用表格察看结果都是我们经常用到的元件。

五. 工作台

在测试中我们可能需要暂时更改一些组件,可以把一些需要更改的组件保存在工作台中,测试完成后再恢复,但是切记:不能退出jmeter.一旦退出jmeter,工作台中的内容就会消失。

到此,我们已经简单了解了jmeter的基本组成原件,我们后序的测试工作也就是使用这些元件来完成测试任务。

MongoDB压力测试

启动jmter,在open里打开 mongodb.jmx

1 修改mongodb source config 主要修改 MongoDB Connection里的 Server Address List:  192.168.1.15:37017 (服务器地址)MongoDB Source:testmongodb(自定义的名字,后面的测试脚本中要用到这个name)

2 Thread Group 修改 Number of Threads(Users) 数量,Loop Count:(循环次数)

3 点击Thread Group 展开,修改测试脚本,MongoDB Source 填写刚定义的名字 testmongodb, Database Name: process(测试用到的数据库

可以在这里添加多个脚本,在脚本上右键 可以启用,禁用它 

4 点击展开脚本(或在脚本上右键,添加 listener  view Result Tree,Graph Results,jp@gc - PerMon Metrics Collectord

注:jp@gc - PerMon Metrics Collectord 这个listener   在2.10版本里并没有,要添加插件。介绍如下

一.JMeterPlugins插件
很多时候,我们测试性能都需要查看内存和CPU等信息来判断系统瓶颈,关于CPU和内存的监控,Jmeter并没有很好的支持,很多时候,我们都只能通过系统的资源监控器来观察,一闪而过不会记录下来,很不方便。幸好google开发了一款专门监控的Jmeter插件JMeterPlugins,弥补了Jmeter这方面的不足,下面就来介绍一下这款插件——JMeterPlugins.

目前我用的是JMeterPlugins-Standard-1.2.0与ServerAgent-2.2.1版本。

1.JMeterPlugins下载地址
http://jmeter-plugins.org/downloads/all/  选择需要的版本,下载即可

2.JMeterPlugins配置使用

首先将下载的文件进行解压,得到JMeterPlugins-Standard-1.2.0与ServerAgent-2.2.1.

第一步,将JMeterPlugins-Standard-1.2.0\lib\ext\JMeterPlugins-Standard.jar包复制到JMeter的lib目录下面的ext目录下面,重新启动Jmeter

此时,我们点击添加监听器,就可以看到出现了很多的jp@gc-开头的文件。

第二步,这里监控内存我们使用的是:jp@gc - PerfMon Metrics Collectot,在Windows环境下需要双击运行/serverAgent/startAgent.bat这个文件,我们需要将serverAgent目录及下面的文件复制到我们测试的服务器上,然后点击打开(我这里是本机,直接在本机上面打开这个应用系统即可),它的默认端口为4444。

---jmeterplugins end---

至此 测试计划就完成了,每次测试可以选择要测试的脚本(同时禁用本次不测试的脚本)就可以启动测试了,关于测试结果的分析如下:

测试结果的分析

一、Listener的使用

用过LoadRunner的人应该都知道,LoadRunner会为我们提供一大堆图标和曲线。但是在Jmeter里,我们只能找到几个Listener来方便我们查看测试结果。但是,对于初学者来说,一些简单的结果分析工具可以使我们更容易理解性能测试结果的分析原理。所以,千万别小看这几个简单的Listener啊。

A.Aggregate Report 聚合报告




我们可以看到,通过这份报告我们就可以得到通常意义上性能测试所最关心的几个结果了。

Samples -- 本次场景中一共完成了多少个Transaction

Average -- 平均响应时间

Median -- 统计意义上面的响应时间的中值

90% Line -- 所有transaction中90%的transaction的响应时间都小于xx

Min -- 最小响应时间

Max -- 最大响应时间

PS: 以上时间的单位均为ms

Error -- 出错率

Troughput -- 吞吐量,单位:transaction/sec 每秒完成的请求数

KB/sec -- 以流量做衡量的吞吐量


B.View Results Tree 以树状列表查看结果




通过这个Listener,我们可以看到很详细的每个transaction它所返回的结果,其中红色是指出错的transaction,绿色则为通过的。

如果你测试的场景会有很多的transaction完成,建议在这个Listener中仅记录出错的transaction就可以了。要做到这样,你只需要将Log/Display:中的Errors勾中就可以了。

二、.jtl文件的分析

在性能测试过程中,我们往往需要将测试结果保存在一个文件当中,这样既可以保存测试结果,也可以为日后的性能测试报告提供更多的素材。

Jmeter中,结果都存放在.jtl文件。这个.jtl文件可以提供多种格式的编写,而一般我们都是将其以csv文件格式记录,这样做是因为csv文件格式看起来比较方便,更重要的是这样做可以为二次分析提供很多便利。

我这里所说的二次分析是指除了使用Listener之外,我们还可以对.jtl文件进行再次分析。

a.设置jtl文件格式

我们从jmeter官方网站中下载下来的Jmeter解压后是可以直接使用的。但是,使用默认配置生成的jtl文件内容并不能满足我们的需要。于是我们必须进行必要的设置。在2.2版本中,如果要修改jtl设置必须要到jmeter.properties文件中设置;但是在2.3版本中,我们只需要在界面上设置就可以了。你只需要选择某个Listener,点击页面中的configure按钮。此时,一个设置界面就会弹出来,建议多勾选如下项:Save Field Name,Save Assertion Failure Message。

b.jtl文件中的各项

经过了以上设置,此时保存下来的jtl文件会有如下项:

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,Latency

请求发出的绝对时间,响应时间,请求的标签,返回码,返回消息,请求所属的线程,数据类型,是否成功,失败信息,字节,响应时间

其中聚合报告中的,吞吐量=完成的transaction数/完成这些transaction数所需要的时间;平均响应时间=所有响应时间的总和/完成的transaction数;失败率=失败的个数/transaction数

jp@gc PerfMon Metrics Collector结果



MongoDB的测试大致就是这样了,比较粗略,有空再整理下

Elasticsearch压力测试

es的测试直接用现成的脚本就可了,要说明的是这里用到了用户自定义变量和随机变量

在要添加变量的节点上右键添加 config element ->选择要的变量类型 设置名称和值,在要用变量的地方 ${变量名}即可 如 ${numberOfThreads}

测试结果分析同上,略


本人也是第一次使用,还在学习中,本文有错误之处还望指正,有更好的方法也与大家分享

资源地址

http://download.csdn.NET/detail/huwei2003/8156405 (包含apache jmeter 2.10 程序包,解压即可运行,template里有mongodb,elasticsearch 的测试脚本 jmx)

0
0
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值