JAVA 性能测试工具 JMeter 介绍

Apache JMeter 是100%的Java桌面应用程序 。用于对软件 做压力测试,它最初被设计用于Web应用测试 但后来扩展到其他测试领域。。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本 、Java 对象、数据库, FTP 服务器, 等等。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能。


一、 JMeter 功能介绍 


1.测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
2.线程组:代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。可以在“测试计 划->添加->线程组”来建立它,然后在线程组面板里有几个输入栏:线程数、Ramp-Up Period(in seconds)、循环次数,其中Ramp-Up Period(in seconds)表示在这时间内创建完所有的线程。如有8个线程,Ramp-Up = 200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。线程组是为模拟并发负载而设计。
3、取样器(Sampler):模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。如:HTTP 、ftp请求等等。
4、监听器:负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。
6、断言:用于来判断请求响应的结果是否如用户所期望,是否正确。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试 是非常有用的。
7、定时器:负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。
5、逻辑控制器:允许自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
8. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
9. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。


二、Jmeter报告说明




1、Aggregate Report 解析


Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅。
如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Report中,会显示一行数据,共有10个字段,含义分别如下。
Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
#Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间
Median:中位数,也就是 50% 用户的响应时间
90% Line:90% 用户的响应时间
Note:关于 50% 和 90% 并发用户数的含义,请参考下文
http://www.cnblogs.com/jackei/archive/2006/11/11/557972.html
Min:最小响应时间
Max:最大响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec


三、各种参数说明 


1、吞吐量:是指在没有帧丢失的情况下,设备能够接受的最大速率。
2、存储的最小单位是字节Byte,对于存储单位,有以下几个单位,GB、MB和KB,那么这三者之间的换算关系 是:1GB=1024MB,1MB=1024KB,1KB=1024Bytes。
Bit :“位”,称为bit,也就是比特,有的时候也称为位。一个字节为8位二进制表示。
Byte:“字节”,一个字节就是8比特。
3、Mbps (million bits per second 兆位/秒) 代表每秒传输1,000,000比特。该缩写用来描述数据传输速度。例如:4Mbps=每秒钟传输4M比特。
数据传输速率的单位,字母b(bit)是比特和字母 B (Byte)是字节。
4、吞吐量与带宽的区分:吞吐量和带宽是很容易搞混的一个词,两者的单位都是Mbps.先让我们来看两者对应的英语,吞吐 量:throughput ; 带宽: Max net bitrate 。当我们讨论通信链路的带宽时,一般是指链路上每秒所能传送的比特数。我们可以说以太网的带宽是10Mbps。但是,我们需要区分链路上的可用带宽(带 宽)与实际链路中每秒所能传送的比特数(吞吐量)。我们倾向于用“吞吐量”一次来表示一个系统的测试性能。这样,因为实现受各种低效率因素的影响,所以由 一段带宽为10Mbps的链路连接的一对节点可能只达到2Mbps的吞吐量。这样就意味着,一个主机上的应用能够以2Mbps的速度向另外的一个主机发送 数据。
5、方差和标准差都是用来描述一组数据的波动性的(集中还是分散),标准差的平方就是方差。方差越大,数据的波动越大。




四、利用BadBoy生成测试计划(测试脚本) 
badBoy可以非常容易的生成web的测试脚本。类似与LoadRunner的使用,输入站点的URL,点击Record开始录制。File –> Export to Jmeter ,导出为Jmeter认识的测试脚本。




五、测试示例思路 


a. 需要的“测试脚本”,对应web的应用使用badboy生成测试脚本。直接导入Jmeter,进行配置。
b.TestPlan :是整个Jmeter测试执行的容器。
ThreadGroup :模拟请求,定义线程数、Ramp-Up Period、循环次数。
Step1 :循环控制器 ,控制Sample的执行次数。
Sample取样器 :决定进行那种类型的测试,如http、ftp等。
监听器 :图形结果、聚合报告。
定时器 :Random类型,定义线程请求的延迟。
c.聚合报告的解释
Label :各个模拟测试的名称
#Samples :各个测试的样本总数
Average :每个请求的平均响应时间
Median :中值,即50%请求的平均响应时间
90%Line :90%请求的响应时间
Min :最小响应时间 ,Max :最大的响应时间
Error% :错误响应的概率。即无法响应的概率。
ThroughPut :吞吐量 -- 默认情况下表示每秒完成的请求数(Request per Second)。
KB/Sec :每秒从服务器端接收到的数据量。




六、Jmeter常见问题 
说明:这些问答是从网上转载的,自己修改了其中的一些内容,如果大家兴趣,可以将大家在使用Jmeter的时候碰到的问题写下来,我们一起补充到这个问答 里面,共同努力完善jmeter的资料。
1.  JMeter的工作原理是什么?
向服务器提交请求;从服务器取回请求返回的结果。


2.  JMeter的作用?
   JMeter可以用于测试静态或者动态资源的性能(文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源)。 JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。你可 以用JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为。


3.   怎样能看到jmeter提供的脚本范例?
在/JMeter/jakarta-jmeter-2.0.3/xdocs/demos目录下。


4.   怎样设置并发用户数?
  选中可视化界面中左边树的Test Plan节点,单击右键,选择Add-> Thread Group,其中Number of Threads参数用来设置发送请求的用户数目。


5.  JMeter的运行指示?
  Jmeter在运行时,右上角有个单选框大小的小框框,运行是该框框为绿色,运行完毕后,该框框为白色。


6.  User Parameters的作用是什么?
   提高脚本可用性


7.   在result里会出现彩色字体的http response code,说明什么呢?
Http response code是http返回值,彩色字体较引人注目,可以使用户迅速关注。象绿色的302就说明在这一步骤中,返回值取自本机的catch,而不是 server。


8.   怎样计算Ramp-up period时间?
Ramp-up period是指每个请求发生的总时间间隔,单位是秒。如果Number of Threads设置为5,而Ramp-up period是10,那么每个请求之间的间隔就是10/5,也就是2秒。Ramp-up period设置为0,就是同时并发请求。


9.    Get和Post的区别?
  他们是http协议的2种不同实现方式。Get是指server从Request URL取得所需参数。从result中的request中可以看到,get可以看到参数,但是post是主动向server发送参数,所以一般看不到这些 参数的。


10. 哪些原因可能导致error的产生?
  a.   Http错误,包括不响应,结果找不到,数据错误等等;
  b.   JMeter本身原因产生的错误。


11. 为什么Aggregate Report结果中的Total值不是真正的总和?
JMeter给结果中total的定义是并不完全指总和,为了方便使用,它的值表现了所在列的代表值,比如min值,它的total就是所在列的最小值。 下图就是total在各列所表示的意思。


12.  JMeter的Thread Number是提供多个不同用户并发的功能么?
不是,Thread Number仅仅是指并发数,如果需要实现多个不同用户并发,我们应该采用其它方法,比如通过在jmeter外建立csv文件的方法来实现。


13. 同时并发请求时,若需要模拟不同的用户同时向不同的server并发请求,怎样实现呢?
  方法很灵活,我们可以将不同的server在thread里面预先写好。或者预先将固定的变量值写入csv文件,这样还可以方便修改。然后将文件添加到 User Parameters。


14.   User Parameter中的DUMMY是什么意思?
    当其具体内容是${__CSVRead(${__property(user.dir)}${FILENAME},next())}时用来模拟读文件的下 一行。


15.   当测试对象在多server间跳转时,应该怎样处理?
  程序运行时,有些http和隐函数会携带另外的server IP,我们可以从他们的返回值中获取。


16.   为何测试对象是http和https混杂出现?
  Https是加密协议,为了安全,一般不推荐使用http,但是有些地方,使用https过于复杂或者较难实现,会采用http协议。


17.   Http和https的默认端口是什么?
  Apache server (Http)的默认端口是80;
  SSL (Https)的默认端口是443。


18.   为何在run时,有些页面失败,但是最后不影响结果?
  原因较多,值得提及的一种是因为主流页面与它不存在依赖关系,所以即使这样的页面出错,也不会影响运行得到正常结果,但是这样会影响到测试的结果以及分析 结果。


19. 为什么脚本刚开始运行就有错误,其后来的脚本还可运行?
  在Thread Group中有相关设置,如果选择了continue,即使前面的脚本出现错误,整个thread仍会运行直到结束。选择Stop Thread会结束当前thread;选择Stop Test则会结束全部的thread。推荐选项是Stop Thread。


20.     在Regular expression_r Extractor会看到Template的值是$1$,这个值是什么意思呢?
  $1$是指取第一个()里面的值。如果Regular expression_r的数值有多个,用这种方法可以避免不必要的麻烦。


21.    Regular expression_r中的(.*)是什么意思?
  那是一个正则表达式(regular expression_r)。’.’等同于sql语言中的’?’,表示可有可无。’*’表示0个或多个。’()’表示需要取值。(.*)表达任意长度的字 符串。


22.   在读取Regular expression_r时要注意什么?
  一定要保证所取数值的绝对唯一性。


23.   怎样才能判断什么样的情况需要添加Regular expression_r Extractor?
  检查Http Request中的Send Parameters,如果有某个参数是其前一个page中所没有给出的,就要到原文件中查找,并添加Regular expression_r Extractor到其前一page的http request中。


24.   在自动获取的脚本中有时会出现空的http request,是什么意思呢?
  是因为在获取脚本时有些错误,是脚本工具原因。在run时这种错误不参与运行的。


25.   在运行结果中为何有rate为N/A的情况出现?
  可能因为JMeter自身问题造成,再次运行可以得到正确结果。


26.   常用http错误代码有哪些?
   400无法解析此请求。
   403禁止访问:访问被拒绝。
   404找不到文件或目录。
   405用于访问该页的HTTP动作未被许可。
   410文件已删除。
   500服务器内部错误。
   501标题值指定的配置没有执行。
   502 Web服务器作为网关或代理服务器时收到无效的响应。


27.    Http request中的Send Parameters是指什么?
  是指code中写定的值和自定义变量中得到的值,就是在运行页面时需要的参数。


28.    Parameters在页面中是不断传递的么?
  是的。参数再产生后会在页面中一直传递到所需页面。所以我们可以在动态参数产生时捕获它,也可以在所需页面的上一页面捕获。(但是这样可能有错误,最好在 产生页面获取)


29.   在使用JMeter测试时,是完全模拟用户操作么?造成的结果也和用户操作完全相同么?
  是的。JMeter完全模拟用户操作,所以操作记录会全部写入DB.在运行失败时,可能会产生错误数据,这就取决于脚本检查是否严谨,否则错误数据也会进 入DB,给程序运行带来很多麻烦。




七、测试心得 


企业应用开发过程中,性能测试是很重要的一个环节,在这个环节中Apache的JMeter以它开源、100%纯Java、操作方便等优点发挥着很大的作 用。
经过一段时间的使用,多少有些心得和技巧,拿出来共享,希望能有些帮助。


1、制作测试脚本:
手工制作测试脚本,需要你知道请求的url和携带的参数等等,太花费时间,
所以可以用badboy工具录制脚本。这个工具虽然不是开源的,但是却可以用来免费的录制成.jmx的脚本,使用起来很方便。
官方网站是:http://www.badboy.com.au/


2、出现乱码了?
在用JMeter发行HTTPRequest时,在请求参数中有中文时,发现存储到DB中后,相应的字段是乱码,
明明在参数后面的Encode选项中打了V。后来发现badboy录制脚本的时候并没有记录编码方式,所以修改脚本,
在Content encoding中设置正确的编码方式就不会出现乱码了。


3、JMeter的妙用---准备测试数据:
要求性能测试开始前,先准备5W条数据。当然可以通过直接修改DB,但是如果这5W条数据涉及到很多表的关联,
甚至还要通过存储过程的处理怎么办,直接修改DB很容易出现错误的数据,要是在客户的机器上弄错,可就闯祸了。
这时候想到了JMeter,它本来是用来模拟大量用户并发请求的,现在用它来批量的生成数据吧。
如果要求每条数据都不同,就要修改脚本,使用JMeter的函数来动态产生数据,比较常用的是CSVRead函数,
记不住名的话Ctrl+F可以呼唤出函数助手。使用这个函数的时候需要注意几点,首先是csv文件的编码格式,
使用ansi没有问题,使用unicode时会使读取的第一行数据出现错误;
${__CSVRead(data.txt,0)}---读取本行的第一列值
${__CSVRead(data.txt,1)}${__CSVRead(data.txt,next)}---读取本行的第二列值,并把行标移动到下 一行
试验证明JMeter应该做好了同步,在多线程环境下上面的调用方法没有问题;
最后,修改JMeter的线程数会加快数据生成的速度,原理是当并发线程在20左右的时候会达到最大的吞吐量(request/分),
所以应该设定线程数20左右。


4、JMeter中debug方法:
JMeter提供了log函数输出log,但是有时候并不好用,比如我想输出某个函数的返回值看是不是正确的,
${__log(${__CSVRead(data.txt,1)})}这样的写法是错误的,JMeter会抛出异常,该怎么办呢?
答案是巧用监听器(Listener)来输出想看到的数据,结果显示为树的那个监听器,
它可以让你查看每个sampler的请求数据和响应数据,在请求数据中就有你想看到的信息。


5、常用的功能:
?使用HTTP Cookie Manager或URL重写实现同一线程内的多个请求共享Session。
?把Login的请求放到只执行一次的控制器中,那么即使循环多次,Login也只请求一次。
?如果想让多个线程在同一时刻同时请求,那么用Synchronizing Timer来做集合点。
?为了节省系统资源,使用非窗口模式运行JMeter(jmeter -n -t test.jmx)
?如果模拟并发用户过多,比如200线程,那么可以分散到多台机器上运行Jmeter(比如4台电脑,每台50线程)
更多功能请参照使用手册
中文手册(未完成)http://wiki.javascud.org/pages/viewpage.action?pageId=5566


6、在winnt系统上,使用perfmon来帮助Jmeter采集服务器的系统资源数据,可以配置log输出这些数据作为性能瓶颈分析时使用。




七.置信区间 http://java.chinaitlab.com/tools/355421.html
对数据进行更科学的分析,确定测试结果。类似于Jmeter聚合报告的90% Line给出的参考,而不能仅仅参考均值。


 


以上内容摘自网络


===============================================================================
利用JMeter进行Web测试(简介适合初学者)
利用JMeter进行Web测试
JMeter介绍
脚本录制
运行JMeter进行测试
JMeter主要组件介绍
参数化设置
动态数据关联
使用命令行运行JMeter脚本
利用XSLT分析JMeter结果文件
JMeter介绍


JMeter, 一个100%的纯Java桌面应用,它是Apache组织的开放源代码项目,它是功能和性能测试的工具。JMeter可以用于测试静态或者动态资源的性能 (文件、Servlets、Perl脚本、Java对象、数据库和查询、ftp服务器或者其他资源)。原先Jmemer是为Web/HTTP测试而设计 的,但是它已经扩展以支持各种各样的测试模块。它和用于HTTP和SQL数据库(使用JDBC)的模块一起运送。它可以用来测试静止资料库或者活动资料库 中的服务器的运行情况,可以用来模拟对服务器或者网络系统加以重负荷以测试它的抵抗力,或者用来分析不同负荷类型下的所有运行情况。它也提供了一个可替换 的界面用来定制数据显示,测试同步及测试的创建和执行。
  Jmeter的下载地址:http://jakarta.apache.org/jmeter/usermanual/index.html
  JMeter 的特性:
  a) 能够对HTTP和FTP服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过JDBC)。
  b) 完全的可移植性和100% 纯Java。
  c) 完全 Swing 和轻量组件支持(预编译的JAR使用 javax.swing.*)包。
  d) 完全多线程 框架允许通过多个线程并发取样和 通过单独的线程组对不同的功能同时取样。
  e) 精心的GUI设计允许快速操作和更精确的计时。
  f) 缓存和离线分析/回放测试结果。
  g) 高可扩展性:
  h) 可链接的取样器允许无限制的测试能力。
  i) 各种负载统计表和可链接的计时器可供选择。
  j) 数据分析和可视化插件提供了很好的可扩展性以及 以及个性化。
  k) 具有提供动态输入到测试的功能(包括Javascrīpt)。
  l) 支持脚本变成的取样器(在1.9.2及以上版本支持BeanShell)。
脚本录制




利用BadBoy进行脚本录制
利用BadBoy录制JMeter脚本(1)
通过Badboy的官方网站(http://www.badboy.com.au)下载Badboy的最新版本;
安装Badboy。安装过程同一般的Windows 应用程序没有什么区别,安装完成后你可以在桌面和Windows开始菜单中看到相应的快捷方式——如果找不到,可以找一下Badboy安装目录下的Badboy.exe 文件,直接双击启动Badboy;
启动Badboy,你可以看到下面的界面。
利用BadBoy录制JMeter脚本(2)
在地址栏(图中红色方框标注的部分)中输入你需要录制的Web应用的URL——这里我们以http://www.baidu.com 为例 。
点击 开始录制 按钮(图中蓝色圆圈标注的部分)开始录制。 
开 始录制后,你可以直接在Badboy内嵌的浏览器(主界面的右侧)中对被测应用进行操作,所有的操作都会被记录在主界面左侧的编辑窗口中(图中黄色方框标 注的部分)——在这个试验中,我们在baidu的搜索引擎中输入 JMeter 进行搜索。不过录制下来的脚本并不是一行行的代码,而是一个个Web对象——这有点像LoadRunner的VuGen中的Tree View视图; 
录制完成后,点击工具栏中的“停止录制”按钮(图中紫色方框标注的部分),完成脚本的录制
利用BadBoy录制JMeter脚本(3)
选择“File -> Export to JMeter”菜单,填写文件名“baidu.jmx”,将录制好脚本导出为JMeter脚本格式。也可以选择“File -> Save”菜单保存为Badboy脚本;
启动JMeter并打开刚刚生成的测试脚本,就可以用JMeter进行测试了


利用JMeter的代理服务器功能进行脚本录制
利用JMeter的代理服务器功能
进行脚本录制(1)
在测试计划中添加线程组,在线程组中添加逻辑控制器-录制控制器。
在工作台中添加非测试元件-HTTP代理服务器。
端口:即代理服务器的监听端口,我们设为8080。
目标控制器选择:测试计划>线程组;
分组选择:每个组放入一个新的控制器。
在HTTP代理服务器中添加定时器-高斯随机定时器(用于告知Jmeter来在其生成的HTTP请求中自动的增加一个定时器)。定时器将会使相 应的的取样器被延迟。 延时的规则是,在上一个访问请求被响应并延时了指定的时间后,下一个被定时器影响的取样访问请求才会被发送出去。 


如果在代理服务器元件里使用了高斯随机定时器,就应该在其中的固定延迟偏移(Constant Delay Offset)设置项里添上${T}(用于自动引用纪录的延迟时间)。
代理服务器配置好以后,点击启动,代理服务器就会开始记录所接受的HTTP 访问请求。 
打开浏览器,打开Internet选项,将局域网(LAN)设置中的代理服务器设为:localhost,端口为在代理服务器中设的端口:8080。
在浏览器地址栏中输入地址并进行相关的操作进行录制,录制完成后, 停止HTTP 代理服务器; 在录制控制器元件上单击右键将记录的元件保存为一个文件用于以后重用,另外,不要忘了恢复浏览器的代理服务器设置。
运行Jmeter进行测试(1)




脚本录制完毕后,就可以运行JMeter来进行我们的测试了。
到JMeter的网站http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
下载JMeter的最新版本,将zip文件解压缩到D:/JMeter,运行D:/JMeter/bin下的jmeter.bat即可。
打开JMeter会有一个默认的测试计划,点击文件-打开,选中录制的脚本文件如:WebXSample_addUser.jmx,打开脚本进行测试。
在线程组上添加监听器-聚合报告(用于分析测试结果)后,点击运行-启动,开始测试,测试完毕后在聚合报告中就可以看到测试结果。一个简单的测试计划就完成了。
聚合报告显示测试结果
Label:每个 JMeter 的 element (例如 HTTP Request )都有一个 Name 属性,这里显示的就是 Name 属性的值 
#Samples:表示你这次测试中一共发出了多少个请求,如果测试计划模拟10个用户,每个用户迭代10次,这里就会显示100 
Average:平均响应时间 — 默认情况下是单个 Request 的平均响应时间,当使用了事务控制器时,也可以以事务为单位显示平均响应时间 
Median:中位数,也就是 50 %用户的响应时间 
90% Line: 90 %用户的响应时间
Min:最小响应时间 
Max:最大响应时间 
Error%:错误率,本次测试中出现错误的请求的数量 / 请求的总数
Throughput:吞吐量 —— 默认情况下表示每秒完成的请求数( Request per Second )
KB/Sec:每秒从服务器端接收到的数据量
测试计划(Test Plan)是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
线程组(Thread Group)代表一定数量的并发用户,它可以用来模拟并发用户发送请求。
取样器(sampler)定义实际的请求内容,被线程组包含,我们主要用HTTP请求。
监听器(Listener) 
逻辑控制器(Logic Controller)
断言(Assertions) 
配置元件(Config Element)
前置处理器(Pre Processors)和后置处理器(Post Processors)
定时器(Timer)
JMeter主要组件介绍-测试计划




测试计划(Test Plan)是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。
名称:你可以为你的测试计划取一个有意义的名字。
注释:对测试计划的注释。
用户定义的变量:用户可以自己定义变量,在用到此变量的时候直接用${变量名}引用即可。例:变量名=url,值=http://www.baidu.com,在需要http://www.baidu.com时直接用${url}即可。
Add directory or jar to classpath:向类路径即%JMETER-HOME%\lib中添加目录及jar包。
JMeter主要组件介绍-线程组
名称:为线程组起名字。
线程属性-线程数:设置发送请求的用户数目 ,即并发数。
线程属性-Ramp-Up Period(in second):线程间的时间间隔,单位是秒。即所有线程在多少时间内启动。
线程属性-循环次数:请求的重复次数,如果选择后面的forever(默认),那么 请求将一直继续,如果不选择forever,而在输入框中输入数字,那么请求将重复指定的次数,如果输入1,那么请求将执行一次,如果是0,会出现问题。
调度器配置-启动时间:测试计划什么时候启动,启动延迟会覆盖它。
调度器配置-结束时间:测试计划什么时候结束,持续时间会覆盖它。
调度器配置-持续时间:测试计划持续多长时间,会覆盖结束时间。
调度器配置-启动延迟:测试计划延迟多长时间启动,会覆盖启动时间。
JMeter主要组件介绍-取样器(HTTP请求)
名称:HTTP请求的名字。
Web服务器-服务器名称或IP、端口号,脚本录制时自动添加,也可以使用“用户自定义变量”。
HTTP请求:用默认值即可。
同请求一起发送参数:请求中的参数、值可以在此设置,需要用到参数化及动态数据关联,我们在后面专门介绍。
同请求一起发送文件:我可以制定同请求一起发送哪个文件。
其他任务包括:从HTML文件中获取所有内含的资源、用作监视器、Embedded URLs must match
监听器(Listener)负责收集测试结果,同时也被告知了结果显示的方式。我们常用的包括:聚合报告、查看结果树、用表格查看结果,都支持将结果数据写入文件。其他的添加上去看看就行。聚合报告前面我们介绍过,后面是查看结果树和用表格查看结果的截图。
JMeter主要组件介绍-监听器(用表格查看结果)
JMeter主要组件介绍-逻辑控制器


逻辑控制器(Logic Controller)可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
循环控制器可以设置请求的循环次数或永远循环(如果选中永远的话)。
事务控制器可以将多个请求放在同一个事务中。如果选中Gegerate parent sample,则聚合报告中只显示事务控制器的数据,而不会显示其中的各个请求的数据,反之则全部显示。
JMeter主要组件介绍-断言


断言(Assertions)可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
JMeter主要组件介绍-配置元件




配置元件(Config Element)维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。我们主要在参数化中用到CSV Data Set Config


JMeter主要组件介绍-前置处理器和后置处理器


前置处理器(Pre Processors)和后置处理器(Post Processors)负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。我们主要在动态关联中用到后置处理器的正则表达式提取器。      
JMeter主要组件介绍-定时器




定时器(Timer)负责定义请求之间的延迟间隔。
参数化设置




在我们的测试计划中我们使用的都是HTTP请求,在HTTP请求中常常会提交一些参数,我们为了不想在每一次请求中都使用相同的参数值,就要想办法让每一次请求的参数的值都是不一样的,我们就需要进行参数化设置,这里我们介绍两种参数化设置的方法。
一种是利用函数助手中的_Random函数进行参数化设置;
一种是利用配置元件中的CSV Data Set Config进行参数化设置。
参数化设置-函数助手(1)


JMeter中有一个函数助手的功能,里面内置了多个函数,我们可以利用其中的_Random函数来进行请求中的参数化设置。
在JMeter中选择“选项-函数助手对话框”打开函数助手对话框。
选择一个功能_Random。
设定最小值为1。
设定最大值为100。
函数名称设为func1。
点击生成将生成一个引用字符串${_Random(1,100,func1},在需要的请求参数中拷贝该字符串即可。
其中函数名称用来在引用中作区别,即我们可以设定不同的名称在不同的地方引用同一个函数的功能
例如:我们生成了两个串${_Random(1,100,func1)}、 ${_Random(1,100,func2)},在添加图书的请求中,我们在bookName的参数值中引 用${_Random(1,100,func1)},在bookConcern的参数值中应用${_Random(1,100,func2)},见截图, 这样测试运行时不同的线程将产生不同的bookName和bookConcern。
参数化设置-CSV Data Set Config(1)




在线程组上点击右键选择添加-配置元件-CSV Data Set Config,打开CSV Data Set Config。
Filename文件名:即参数化要引用的文件名。这里是d:\number.txt
File encoding文件编码:可以不填。
Variable Names(comma-delimited)变量名(用逗号分割):多个变量可以引用同一个文件,用逗号分割。这里是num1,num2
Delimiter(use ‘\t’ for tab):参数文件中多个变量值的分隔符,\t表示用tab键分割,默认是逗号。
Recycle on EOF?:结束后是否循环?默认是True.
Number.txt文件内容见截图。
参数化设置-CSV Data Set Config(2)




在添加图书的请求中,我们在bookName的参数值中引用${num1},在bookConcern的参数值中应用${num2},见截图,这样测试运行时不同的线程将产生不同的bookName和bookConcern。
动态数据关联


在HTTP请求的参数中经常会遇到一些参数的值是从服务器相应的动态数据,这些数据需要进行关联才能使得每一次请求都能成功得被服务器接受,在JMeter中采用正则表达式提取器来获取这些动态的数据。
正则表达式允许用户从服务器响应中获取数据,作为一个后置处理器,正则表达式提取器会在每一个请求执行后再执行,正则表达式提取请求的参数值,产生模板字符串,并将结果保存到给出的变量中。
动态数据关联(1)-正则表达式提取器




在HTTP请求的参数中经常会遇到一些参数的值是从服务器相应的动态数据,这些数据需要进行关联才能 使得每一次请求都能成功得被服务器接受,在JMeter中采用正则表达式提取器来获取这些动态的数据。比如我们想要获得从服务器相应的TOKEN,就可以 使用下面的正则表达式提取器。
使用时就可以使用${token_g1}来表示获取到的TOKEN值。如下图:
使用命令行运行JMeter脚本




JMeter -n -t my_test.jmx -l log.jtl
-n告知JMeter采用非图形化运行JMeter脚本
-t指定要运行的脚本文件
-l指定保存执行结果的文件名
执行命令前要检查当前目录是否是%JMeter_Home%\bin 目录;
如果 JMeter 脚本不在当前目录,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。
利用XSLT分析JMeter结果文件(1)




将结果文件的扩展名改为xml,例:将log.jtl改为log.xml。
在log.xml的文件头
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
中添加
<?xml-stylesheet type=“text/xsl” href=“jmeter-results-report.xsl” ?>
使之变成
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="jmeter-results-report.xsl" ?>
<testResults version="1.2">
其中href指定xsl文件的路径,如果与xml文件在同一目录,则只写文件名即可,否则要写明详细路径。
利用XSLT分析JMeter结果文件(2)
将修改后的xml文件用浏览器打开即可得到统计结果
JMeter中进行分布式测试
作为一个纯 JAVA 的GUI应用,JMeter对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心, 甚至还会引起JAVA内存溢出的错误。不过,JMeter也可以像 LoadRunner 一样通过使用多台机器运行所谓的代理来分担负载产生器自身的压力,并借此来获取更大的并发用户数,我们只需手动配置一下即可。
1、在所有期望运行 JMeter作为 负载产生器的机器上安装JMeter,并确定其中一台机器作为 控制器,其他的机器作为 代理。然后运行所有 代理 机器上的JMeter-server.bat文件—假定我们使用两台机器172.20.80.47和172.20.80.68作为 代理;
2、在Controller 机器的JMeter安装目录下找到 bin 目录,再找到 jmeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;
3、 在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行JMeter代理的机器,这里需要修改为“remote_hosts=172.20.80.47,172.20.80.68”;
4、保存文件,并重新启动控制器机器上的JMeter,并进入启动 ->远程启动菜单项。就会看到我们刚才添加的两个代理的地址,选中即可运行,如果想同时启动所有代理,选择远程全部启动即可。
要进行分布式测试代理机器上需要添加环境变量,即添加用户变量JMETER_HOME=d:\jmeter,系统变量中的path中添加d:\jmeter\bin(假设jmeter放在d盘根目录下)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值