jmeter一个简单的性能测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jmeter一个简单的性能测试相关的知识,希望对你有一定的参考价值。
1.测试目标网站http://www.jianshu.com/
2.测试目的是该网站15QPS负载下的响应时间
执行测试之前,要先建立一个测试计划,而jmeter每次打开后,都会生成一个空的测试计划
添加线程组
一个性能测试是基于测试计划完成,而一个测试计划又是基于线程组完成的。所以一个测试计划必定有一个线程组,在jmeter中,添加线程组非常简单。鼠标右键->添加->Threads->线程组
下面说说线程组的构成
线程数:vuer的数量,也就是虚拟机用户数。一个线程数代表一个虚拟用户,需要多少虚拟用户就设置多少线程数。
Ramp-Up Period(in seconds):启动时长,所有虚拟用户的总启动时间。假如启动时长是5s,线程数20,也就是每一秒启动4个线程。
循环次数:顾名思义,也就是每个线程发起请求的循环次数。假如10线程,循环次数5,也就是每个线程发起5次请求,总请求=线程数*循环次数 10*5=50。如果勾选永远,线程就会一直不停的发起请求,直到手动停止脚本为止。
本例中,要求测试达到15QPS的响应时间,如果线程数太低,则达不到QPS需要的请求,合理的线程数是达到测试目标的重要依据。合理的循环次数也是非常重要的(压力测试中,1万次请求,就是根据循环次数和线程数来决定的)。另外,调用器可以控制测试开始执行的时间。
添加HTTP请求
添加http请求也非常简单,在添加线程组之后,鼠标右键线程组->添加->Sampler->HTTP请求
Sample(取样器):主要对服务器发出请求;记录响应数据,响应时间。(通常与Listen搭配使用)
下面说一下HTTP的构成
名称:每一个sample都有一个名称属性,建议取一个与测试相关的名字。
注释:跟编程里面的注释用法一致,对测试没有任何作用,仅用户标识的解释。
服务器名称或IP:HTTP请求发送的目标服务器名称或IP地址。
端口号:目标服务器或者IP的端口,默认80。
协议:向目标服务器发起请求时的协议,通常是HTTP和HTTPS,默认是HTTP。
方法:向目标服务器发起请求时的方法,常用有GET、POST、HEAD。
Content encoding:内容的编码方式,默认值为iso8859。
路径:目标URL路径(不包括服务器地址和端口)
自动重定向:选中该选项时,当发送HTTP请求后得到的响应是302/301时,JMeter 自动重定向到新的页面,默认勾选跟随重定向。
Use keep Alive: 当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。keep-alive,保持长连接,目的减少连接的开销
同请求一起发送参数: 在请求中发送URL参数,对于带参数的URL ,jmeter提供了一个简单的对参数化的方法。用户可以将URL中所有参数添加到本表,参数以键值对的形式存在。
同请求一起发送文件:在请求中发送文件,HTTP需要文件上传时可以通过这种方式模拟。
用作监视器:此取样器被当成监视器,在Monitor Results Listener 中可以直接看到基于该取样器的图形化统计信息。默认为不选中。
设置QPS限制
本次性能测试的需求中提到测试的目的是“了解简书的首页在负载达到15 QPS时的响应时间”,因此需要控制向博客首页发送请求的负载为15QPS。
方式一:逐步调整测试计划中线程数,并通过添加定时器计算响应时间,使HTTP发出的请求的数量达到15QPS。但是这种方法有个很致命的缺陷,一旦网络响应时间改变,就需要重新计算QPS的数量。
方式二:Jmeter有一个非常有用的定时器,叫做Constant Throughput Timer (常数吞吐量定时器),该定时器可以根据时长控制取样器吞吐量。右键点击线程组->添加->定时器->Constant Throughput Timer
Target throughput(in samples per minute):目标吞吐量。这里是每分钟发送的请求数(in sample per minute),15QPS对于值也就是15*60=900
Constant Throughput Timer 的主要属性介绍:
名称:定时器的名称
Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。
Calculate Throughput based on:
This thread only:每个线程的吞吐量,总吞吐量=target Throughput*线程数。
All active threads:所有线程的活动,总target Throughput分配到每个线程上。
All active threads in current thread group :当前线程组中的所有活跃的线程。将所有target Throughput分配到每个活跃的线程上。
All active threads (shared ):所有活动线程(共享),与All active threads in current thread group效果相同,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
All cative threads in current thread group (shared ):当前线程组中的所有活跃的线程,与All active threads in current thread group效果相同,唯一区别,每个活跃线程都会在所有活跃线程上一次运行结束后,等待合理的时间后再次运行。
Label:每一个sample都有一个name属性,可以取一个有意义的名字
Samples:此次测试计划中的所有请求。
Average:平均响应时间,默认是单个请求的平均响应时间。
Median:中位数响应时间,50%的用户响应时间。
90%Line:90%的用户响应时间。
Min:最小响应时间。
Max:最大响应时间。
Error%:本次测试出现错误的比例。
Throughput:吞吐量,默认从每秒处理请求数。默认单位是/sec,跟loadrunner的每秒点击次数类似。
KB/sec:从服务器接受的数据量,跟loadrunner的Throughput/sec一致。
运行脚本
jmeter运行脚本的方式,非常简单。点击绿色三角形的启动按钮,就可以了。打开调度器的记得关闭,否则jmeter只会执行一次循环。
测试数据
run启动
OK,到此为止,一个简单的性能测试就完成了,希望大家学到一些东西。
PS: 柠檬班7月25日晚上8点,免费公开课又要来啦!!!
课题:安全测试之脚本攻击
加群629711745,由管理员带你进课堂
以上是关于jmeter一个简单的性能测试的主要内容,如果未能解决你的问题,请参考以下文章