JMETTET的使用

一、安装环境:

JMETERWindow XP/2003/W7/w8基本都可以运行,前提是要安装好JDK包,JMeter是基于JAVA开发的压力测试软件。

安装包:

官网下载。

注意:Apache Jmeter 3.2版本,需要1.8版本的jdk.

二、安装步骤:

a) 安装步骤不做解释,JDK安装下一步就好了。JMeter不需要安装,解压后打开lib/jmeter.bat,即启动JMeter.

三、JMeter概要描述

jmeter 是一款专门用于功能测试和压力测试等测试的轻量级测试开发平台。多数情况下是用作压力测试

以下主要讲压力测试

四、测试步骤

4.1 录制脚本:

脚本录制有两种方式:Badboy录制和自带的http代理服务器录制。

4.1.1  badboy录制

优点:录制过程简单,生成的脚本简单

缺点:仅适用于B/C构架的产品录制,因为内置浏览器的内核兼容性问题,会导致部分B/C产品也无法使用。

4.1.2自带http代理服务器

优点:录制过程的可控,适用于任何http协议的产品,不限构架

缺点:只用于http协议

4.2 以下讲解自带http代理服务器的脚本录制

4.2.1 打开JMeter界面

4.2.2 建立HTTP代理服务器

工作台---http代理服务器

 

端口:可随意选择,但是注意与本机链接没有冲突的端口

1.查看是否冲突:打开cmd,输入netstat -an

 

2 主要关注TCP -本地地址中是否含有你要写的端口,没有即可使用,有则不能。

4.2.3  设置代理浏览器

打开IE浏览器--工具--Internet选项--链接--局域网设置

 

地址:JMeter所在的服务器的地址。端口和http代理服务器的端口一致。

4.2.4 启动http代理服务器

JMeter上选择目标控制器:测试计划---线程组。点击启动


4.2.5 登录操作

在浏览器上输入地址xxxxxxxxx

页面看到登录界面。输入用户名,密码点击登录。在线程组会看到录制的脚本

 

4.2.7 脚本选择:

线程组会看到太多的脚本,这个时候有些并非我们所需,可以选择排除模式:对不必要的数据进行排除;

排除规则:.*\.js.*|.*\.css.*|.*\.png.*|.*\.dat.*|.*\.gif.*|.*\.html.*

或者包含模式:只留下包含该后缀的脚本:.*\.cf.*

注意:没有登录的时候需要在HTTP信息头管理器中手动加入cookie

获取cookie:对登录操作进行抓包(抓包不做说明),这里使用Fiddler操作,在工具的Inspectors--Headers里面有cookie

 

 

 

4.3 添加监听器:

目的查看运行结果,分析数据,得出性能测试报告

红色为主要的监听器,其他根据项目需求进行操作。

 

 

 

4.4 多用户并发操作

4.4.1 JMeter 的主要测试组件总结如下:

1. 测试计划是使用 JMeter 进行测试的起点,它是其它 JMeter 测试元件的容器。

2. 线程组代表一定数量的并发用户,它可以用来模拟并发用户发送请求。实际的请求内容在Sampler中定义,它被线程组包含。

3. 监听器负责收集测试结果,同时也被告知了结果显示的方式。

4. 逻辑控制器可以自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

5. 断言可以用来判断请求响应的结果是否如用户所期望的。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

6. 配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。

7. 前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

8. 定时器负责定义请求之间的延迟间隔。

4.4.2 线程组

 

 

线程数:最大测试时候使用的线程数

Ramp-up Period:每个请求发生的总时间间隔,单位是秒。如果线程数设置为100,而Ramp-up period2,那么每个请求之间的间隔就是2100,也就是0.02秒。Ramp-up period设置为0,就是同时并发请求。

循环次数:如果是永远,线程将不停的连续测试系统,如果设置固定值x,线程会循环x后自动退出线程组

调度器:

启动时间:测试计划什么时候启动,启动延迟会会覆盖他,当启动时间按已过。手动运行脚本时也当前时间也会覆盖,但启动时间页面显示不会变

结束时间:测试计划什么时候结束,持续时间会覆盖它

持续时间:测试计划持续多长时间按,会覆盖结束时间

启动延迟:测试计划延迟多长时间,会覆盖启动时间

4.4.3 启动Jmeter

点击头部绿色三角按钮

 

4.4.4察看结果树

绿色表示执行成功,红色表示失败。

 

4.4.5聚合报告:

 

 

Samples:本次运行场景共启动多少个线程

Average:平均相应时间

Median:统计意义上相应时间中间值

90%Line:所有线程中90%的线程响应时间都小于xx的值;

95%Line:所有线程中95%的线程响应时间都小于xx的值;

97%Line:所有线程中97%的线程响应时间都小于xx的值;

Min:相应的最小时间

Max:相应的对打时间

Error%:错误率

Throughput - 吞吐量以“requests/secondrequests /minuterequests /hour”来衡量。 时间单位已经被选取为second,所以,显示速率至少是1.0,即每秒1个请求。 

图行结果:

样本数目:一共发送了多少个数据。

最新样本:服务器响应最后一个请求的时间

偏离:服务器响应时间变化、离散程度测量值的大小,或者,换句话说,就是数据的分布。

中间值:有一半的服务器响应时间低于该值而另一半高于该值。 

平均:总运行时间除以发送到服务器的请求数。 

吞吐量:服务器每分钟处理的数据量

4.4.6 图形结果

 

 

4.4.7 如何设置适当的ramp-up period

一般不要设置成0,如果设置成0Jmeter将会在测试的开始就建立全部线程并立即发送访问请求,这样一来就很轻易的使服务器饱和,更重要的是会隐形的增加负载,这就意味这服务器将可能过载,不是应为英俊访问率而是因为所有线程的第一次并发访问而引起的不正常的初始访问值,可以通过Jmeter的聚合报告能够监听到这种现象。但是这种异常不是我们需要的,因此,确定一个何止的值的规则就是让初始点击来接近平均点击率。

基于同样的原因,ramp-up period的值不能过大,因为将会降低访问峰值的负载,换句话说:有些线程还没有启动的时候,初期启动的部分线程可能已经结束了。

那么如何检验太大或太小呢?首先初始的ramp-up period=总线程/点击率。Eg:总线程数为100,点击率为10,那么ramp-up period=100/10.那么怎么取一个合理的平均点击率呢?没什么好办法,必须通过运行一次脚本来获得

在聚合报告监听器中,包含了所有独立请求的评价点击率。第一次取样的点击率与ramp-up period和线程数量密切相关。通过跳转ramp-up period可以使首期取样的点击率接近平均取样的点击率。

第三, 查验一下Jmeter日志(文件位置:JMeter_Home_Directory/bin) 的最后一个线程开始时第一个线程是否真正结束了,二者的时间差是否正常。

  总之,是否能确定一个适当的ramp-up time 取决于以下两条规则:

·第一个取样器的点击率(hit rate)是否接近其他取样器的平均值,从而能否避免ramp-up period 过小。

·在最后一个线程启动时,第一个线程是否在真正结束了,最好二者的时间要尽可能的长,以避免ramp-up period过大。

  有时,这两条规则的结论会互相冲突。 这就意味着无法找到同时满足两条规则的合适的ramp-up period。 糟糕的测试计划通常会导致这些问题,这是因为在这样的测试计划里,取样器将不能充分地采集数据,可能因为测试计划执行时间太短并且线程会很快的运行结束。

 

 

4.5Jmeter常见问题

1. JMeter的工作原理是什么?
向服务器提交请求;从服务器取回请求返回的结果。

2. JMeter的作用?
JMeter可以用于测试静态或者动态资源的性能(文件、ServletsPerl脚本、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 codehttp返回值,彩色字体较引人注目,可以使用户迅速关注。象绿色的302就说明在这一步骤中,返回值取自本机的catch,而不是server

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

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

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

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

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

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

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

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

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

17. Httphttps的默认端口是什么?
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到其前一pagehttp request中。

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

25. 在运行结果中为何有rateN/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测试心得(转载) http://www.javaeye.com/topic/211216

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

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

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

3JMeter的妙用---准备测试数据:
要求性能测试开始前,先准备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左右。

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

5、常用的功能:
?使用HTTP Cookie ManagerURL重写实现同一线程内的多个请求共享Session
?Login的请求放到只执行一次的控制器中,那么即使循环多次,Login也只请求一次。
?如果想让多个线程在同一时刻同时请求,那么用Synchronizing Timer来做集合点。
?为了节省系统资源,使用非窗口模式运行JMeterjmeter -n -t test.jmx
?如果模拟并发用户过多,比如200线程,那么可以分散到多台机器上运行Jmeter(比如4台电脑,每台50线程)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值