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%⽤户的响应时间
Min:最⼩响应时间
Max:最⼤响应时间
Error%:本次测试中出现错误的请求的数量/请求的总数
Throughput:吞吐量——默认情况下表⽰每秒完成的请求数(Request per Second),当使⽤了 Transaction Controller 时,也可以表⽰类似 LoadRunner 的 Transaction per Second 数
KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
2、基本知识:
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脚本、对象、和查询、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,给程序运⾏带来很多⿇烦。
六.Jmeter测试⼼得(转载)
企业应⽤开发过程中,性能测试是很重要的⼀个环节,在这个环节中Apache的JMeter以它开源、100%纯Java、操作⽅便等优点发挥着很⼤的作⽤。
经过⼀段时间的使⽤,多少有些⼼得和技巧,拿出来共享,希望能有些帮助。
2、出现乱码了?
在⽤JMeter发⾏HTTPRequest时,在请求参数中有中⽂时,发现存储到DB中后,相应的字段是乱码,
明明在参数后⾯的Encode选项中打了V。后来发现badboy录制脚本的时候并没有记录编码⽅式,所以修改脚本,
在Content encoding中设置正确的编码⽅式就不会出现乱码了。
3、JMeter的妙⽤—准备测试数据:
要求性能测试开始前,先准备5W条数据。当然可以通过直接修改DB,但是如果这5W条数据涉及到很多表的关联,
甚⾄还要通过存储过程的处理怎么办,直接修改DB很容易出现错误的数据,要是在客户的机器上弄错,可就闯祸了。
这时候想到了JMeter,它本来是⽤来模拟⼤量⽤户并发请求的,现在⽤它来批量的⽣成数据吧。
如果要求每条数据都不同,就要修改脚本,使⽤JMeter的函数来动态产⽣数据,⽐较常⽤的是CSVRead函数,
记不住名的话Ctrl+F可以呼唤出函数助⼿。使⽤这个函数的时候需要注意⼏点,⾸先是csv⽂件的编码格式,
使⽤ansi没有问题,使⽤unicode时会使读取的第⼀⾏数据出现错误;
{__,0)}—读取本⾏的第⼀列值{__,1)}${__,next)}—读取本⾏的第⼆列值,并把⾏标移动到下⼀⾏
试验证明JMeter应该做好了同步,在多线程环境下上⾯的调⽤⽅法没有问题;
最后,修改JMeter的线程数会加快数据⽣成的速度,原理是当并发线程在20左右的时候会达到最⼤的吞吐量(request/分),
所以应该设定线程数20左右。
4、JMeter中debug⽅法:
JMeter提供了log函数输出log,但是有时候并不好⽤,⽐如我想输出某个函数的返回值看是不是正确的,
${__log(${__,1)})}这样的写法是错误的,JMeter会抛出异常,该怎么办呢?
答案是巧⽤(Listener)来输出想看到的数据,结果显⽰为树的那个,
它可以让你查看每个sampler的请求数据和响应数据,在请求数据中就有你想看到的信息。
report是什么意思6、在winnt系统上,使⽤perfmon来帮助Jmeter采集服务器的系统资源数据,可以配置log输出这些数据作为性能瓶颈分析时使⽤。
记:熟悉Jmeter使⽤之后,⾃⼰更应该关注的是“测试实践”,以及通过怎么样的⽅法改进性能。
Loading [MathJax]/jax/output/HTML-CSS/jax.js

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。