jmeter是Apache组织开发的基于Java的压力测试工具。
用于对软件做压力测试
对应用程序做功能/回归测试
用于对静态和动态的资源的性能进行测试
接口测试
数据库压力测试
批量生产测试数据
主要是使用同步计时器(设置并发数),同步计时器主要有两个参数
模拟用户的数量:并发数
超时时间(ms):设置等待时间,如果0则永久等待,直到满足模拟的用户数。非0则等待指定时间,如果在时间内,则满足条件就释放,否则超时释放。
主要测试持续一段时间访问接口,测试接口的稳定性。
主要涉及的配置为,线程组设置循环次数永久,持续时间设置为15分钟(根据自己的项目要求而定)
必要的时候,添加统一随机定时器元件:主要有两个参数
随机的最大时间(ms):在这个范围内进行随机
常量延时时间(ms):固定的延时时间
最后的延时时间=随机的时间+常量延时时间
主要测试多个接口联动,模拟真实接口的调用,增加统一随机定时器模拟用户真实操作,比如添加购物的流程涉及到:登录接口–搜索商品接口–浏览商品接口–添加到购物车接口
其中主要最难的是:登录接口提交的验证码处理,我之前的项目是开发给定了一个固定的万能验证,进行提交登录,添加HTTP Cookie管理器
使用事务控制器元件进行管理这些接口,这些接口就属于一个事务流程,只要一个测试失败,则事务通过失败。
主要测试一个接口或者一个业务场景的支持量,主要用到了一个扩展组件:bzm - Concurrency Thread Group),通过逐步加压的方式,查看每个阶段的响应数据,简单的确认出负载数。该组件也可以用于测试并发量,和同步计时器使用,好处是,能够逐步增大并发数,避免因为客户机硬件的原因(比如:一下子生成1000线程数,可能会导致客户机CPU过高,影响并发数)导致并发数的不准确。
主要是日常工作中对主站接口进行一些压力测试,从而来判断对应接口的性能,同时可以优化性能较差的接口;一定程度上避免了测试过程中提出的接口性能差的问题;
用来描述测试,包含本次测试所有相关功能的Thread(users)线程用户;
thread group(线程组):通常添加运行的线程,开通多少个线程就代表有多少个并发的用户;
线程数就是代表用户数:循环次数就是每个用户执行操作的次数;持续时间是线程组持续执行的时间;
线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
Delay Thread creation until needed:直到需要时延迟线程的创建。
Delay Thread creation until needed是否勾选的区别:
勾选:设置的线程数量将在Ramp-Up Period时间内启动并且运行,比如图中2秒内10个线程,那么每隔1秒就启动5个线程,并运行(RUNNING状态)我们请求的Sampler
不勾选:启动了所有线程(NEW状态),但是不立即运行Sampler,而是按照Ramp-Up Period时间来运行,比如图中一开始10个线程就全部就绪了,但是每隔1秒只有5个线程来运行请求的Sampler
调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
持续时间(秒):测试持续时间,会覆盖结束时间
启动延迟(秒):测试延迟启动时间,会覆盖启动时间
启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。
结束时间:测试结束时间,持续时间会覆盖它。
在线程组下边设置http请求;
服务器名称或IP :接收HTTP请求的目标服务器名称或IP地址
协议:向目标服务器发送HTTP请求时的传输协议,可设置为http或https ,默认为http
路径:URL路径(不包括服务器地址和端口)
Content encoding :请求内容的编码方式,缺省的编码方式可通过配置文件jmeter.properties中的sampleresult.default.encoding设置
自动重定向:选中则表示,当发送HTTP请求后若响应为301/302,Jmeter会自动重定向到对应的新页面,但不会记录重定向的请求和响应内容,只有GET和HEAD请求才能使用自动重定向。
跟随重定向:自动重定向未勾选时,该选项才有用,默认选中,表示响应为301/302时,会自动跳转到目标页,初始重定向和进一步响应将作为附加样本出现。父取样器的URL和data字段的值取自最后一个非重定向取样器。但是父取样器的字节数和间隔时间将包含所有取样器的,而latency的值则是取自第一个响应。
Use keep Alive : 当该选项被选中时,jmeter 和目标服务器之间使用 Keep-Alive方式进行HTTP通信,默认选中。在默认HTTP实现下它不起作用,因为连接重用不在用户控制之下。但在Apache HttpComponents HttpClient下它是起作用的。
Use multipart/from-data for HTTP POST :使用 multipart/from-data或application/x-www-form-urlencoded方法发送HTTP POST 请求,默认不选中时表示的Content-Type是application/x-www-form-urlencoded
如果向同一个服务器发送多个HTTP请求,可以使用HTTP请求默认值,它可以为HTTP请求设置默认值
如何添加:线程组右键——>配置元件——>http请求默认值
作用:http请求默认值,还在发送http请求的时候自带这些参数,起到复用的一个作用,也可以单独配置http请求,单独配置的优先级更高。
前置处理器一般处理一些需要参数加密后再传入的请求
后置处理器可以编辑计划结果的文件编码格式等等;
它可以自动储存服务器发送给客户端的所有Cookie,并在发送请求时附加上合适的Cookie
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 数
Received KB/sec(接收数据):每秒从服务器端接收到的数据量。
Sent KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec
一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。
要先下载插件Basic Graphs,下载好Basic Graphs插件之后重启jmeter,就可以看到Response Time组件;
Response Times Over Time(事物响应时间)它监听整个事物运行期间的相应时间,性能测试中,最重要的2个指标之一,横坐标是运行时间,纵坐标是响应时间,单位是毫秒;通过jp@gc-Response Times Over Time可以查看每个时间段的平均响应时间;
它的主要作用是在测试脚本执行过程中,监控查看响应时间的实时平均值、整体响应时间走向等。
要先下载插件Basic Graphs,下载好Basic Graphs插件之后重启jmeter,就可以看到Transaction per Second组件;
Transactions per Second即TPS:每秒事务数,性能测试中,最重要的2个指标的另外一个。该插件的作用是在测试脚本执行过程中,监控查看服务器的TPS表现————比如整体趋势、实时平均值走向、稳定性等。
Throughput是用来衡量吞吐量的指标,通常用TPS或者QPS来表示。
TPS表示每秒通过的事物数,QPS表示每秒查询接口数。
Jmeter中如果只有单接口,那么TPS=QPS。
如果是多接口的混合场景,只有在事物控制器下执行,才能将其理解为TPS。
配置元件:影响其作用范围内的所有元件。
前置处理器:在其作用范围内的每一个sampler元件之前执行。
定时器:在其作用范围内的每一个sampler有效
后置处理器:在其作用范围内的每一个sampler元件之后执行。
断言:在其作用范围内的对每一个sampler元件执行后的结果进行校验。
监听器:在其作用范围内对每一个sampler元件的信息收集并呈现。
执行顺序:测试计划——>线程组——>配置元件——>前置处理器——>定时器——>取样器——>后置处理器——>断言——>监听器
作用域:辅助组件(除测试计划、线程组、取样器之外的组件)作用于父组件、同级组件、以及同级组件下的所有子组件
在测试计划上点击右键——>添加——>Thread(User)——>线程组;
创建好线程组后可以给创建好的线程组命名;可以根据测试需要填写相对应的属性,例如线程数【用户数】,循环次数等等;
在创建好的线程组上点击右键——>添加——>sampler——>http请求
配置需要进行测试的程序协议、地址和端口basic中web服务器的协议一栏,如果是http请求的话可以省略不写,https请求的话需要添写为https;本地测试的时候,basic中web服务器的路径可以不写服务名称,直接写接口名称;可以在Parameters、Body Data、Files Upload中添加测试过程中需要的参数;
键值对类型参数
json、xml格式的传参方式;
eg:{"key":"d8363df900778f95eb2e7985965d0845","date":"2022-07-05"}
2.2.3.1 参数的用途
文件的上传的时候
2.2.3.2 参数的解释
文件名称:你的文件地址,绝对地址
参数名称:file
MIME类型:多媒体类型 根据文件的后缀 去寻找MIME类型
三个参数都是必填的,否则会报错;parameter和body data参数类型只能2选1参数输入时要注意空格
在我们刚刚创建的线程组上右键 【添加】-->【配置元件】-->【HTTP信息头管理器】。
在我们刚刚创建的线程组上右键 【添加】-->【监听器】-->【察看结果树】。
直接添加,然后点击运行按钮就可以看到结果了。
线程组上右键【添加】-->【监听器】-->【聚合报告】。
线程组上右键【添加】-->【监听器】-->【jp@gc - Response Times Over Time】。
线程组上右键【添加】-->【监听器】-->【jp@gc - Transactions per Second】。