问题:有一个页面,需要测试一下最大支持多少用户并发?
此时需计算的是最大用户并发数,强调的是同时操作,也可以理解为同时发起请求;
针对这个问题,我们可以通过rps定时器或阶梯加压线程组测试每秒最大的请求数;
首先需要导入jmeter-plugins插件 ,然后去初始化需要用到的插件
在平衡状态下,并发数=RPS*响应时间
a)使用jp@gc - Throughput Shaping Timer(吞吐量成形计时器,调节rps的定时器);
设置线程组中线程数为50,ramp-up时间为1s,永远循环;
同时在请求下面加Throughput Shaping Timer定时间,rps由1增加到400/s;
测试最终运行时间取 线程组运行时间 与 定时器时间的最小值;
设置后我们需要添加几个性能测试中常用的监听器:
添加监听器Hits per Second(每秒请求数)
观察HPS走势,HPS在140的时候持续了十几秒,随后HPS稳定在100
添加监听器 Transaction per second
TPS在48/s稳定了十几秒,然后稳定在30/s
添加监听器 jp@gc - Response Times Over Time
平均响应时间在3s以内
在比较稳定的情况下,最大rps=140/s,平均响应时间=1.6s,则最大并发=140*1.6=224,也就是224个线程同时启动可满足1s内140/s HPS压力值
b)使用阶梯加压线程组
功能如下:
This group will start 100 threads:设置线程组启动的线程总数为400个;
First,wait for N seconds:启动第一个线程之前,需要等待N秒;
Then start N threads:设置最开始时启动N个线程;
Next,add 100 threads every 2 seconds,using ramp-up 10 seconds:每隔2秒,在10秒内启动100个线程;
Then hold load for 40 seconds:启动的线程总数达到最大值之后,再持续运行40秒;
Finally,stop 100 threads every 0 seconds:同时停止100个线程;
设置阶梯线程组各配置项后,再添加各个监听器后观察,发现得出的tps,rps,平均响应时间与添加rps监听器测试出的结果基本一致
下面可以来验证一下,线程组的线程数设置为224,其它值可随意,(如,设置定时60s,循环次数设置为100,因为并发数=rps*响应时间 是在平衡状态下得出的结论,所以运行时间不能太短)
添加监听器Hits per Second,Transactions per Second,Response Times Over Time 查看这些指标是否和上面得出的结果一致(预期应该是满足的)
我们要测试的网站地址是什么?链接是什么?所以现在我们就来设置这些信息。右键点击我们刚创建的线程组,在弹出的菜单中,选择添加->Sampler->Http请求,弹出如下图界面:
路径:
假如你只是对一个链接进行压力测试,直接填写一个链接就ok,比如http://www.baidu.com,但是大多数情况下都不是这样的,我们这里需要多个链接,就如同刚开始讲到的那样,我们要将多个链接保存到一个文本文件中,然后随机读取进行压力测试。我们可以这么做,如图:
在选择一个功能下拉列表中选择_StringFromFile,然后在本机新建一个测试文件C:\Users\root\Desktop\apache-jmeter-2.9\test.txt,在第一行(你也可以不在第一行)的值中填写测试文件的路径,如下图:
然后点击“生成”按钮,在生成按钮的左边文本框中将生成一个字符串如:
${__StringFromFile(C:\Users\wukong\Desktop\test.txt,,,)}
在test.txt测试文件中,我们每行写一个URL链接,如下格式:
如果地址是:www.quzhuanpan.com.那么。在test.txt中的内容,就是相对地址;如
这样一来,当我们并非请求的时候,就会从test.txt中随机选择url来进行压力测试。
另外值得注意的一个地方是,如果参数中有中文的情况,运行的时候可能会出现乱码,这个时候就需要注意你在Jmeter中的编码设置与你要请求的网页编码是一致的。
路径文本框下面的选项,可以按默认的就成,Use multipart/form-data for HTTP POST是当请求中有附件的情况,一般情况下都不用选中的
3) 查看运行结果
鼠标右键点击线程组,在弹出的菜单中选择添加->监听器->用表格查询结果,如下图:
各属性如下:
Sample:每个请求的序号
Start Time:每个请求开始时间
Thread Name:每个线程的名称
Label:Http请求名称
Sample Time:每个请求所花时间,单位毫秒
Status:请求状态,如果为勾则表示成功,如果为叉表示失败。
Bytes:请求的字节数
在下面还有几个参数:
样本数目:也就是上面所说的请求个数,成功的情况下等于你设定的并发数目乘以循环次数
平均:每个线程请求的平均时间
最新样本:表示服务器响应最后一个请求的时间
偏离:服务器响应时间变化、离散程度测量值的大小。