目录
一、Jmeter_简介
二、Jmeter_组成
三、Jmeter_使用
一、Jmeter_简介
Jmeter是Apache公司基于Java开发的一款开源的压力测试工具。因为该工具是基于Java开发的,所以在使用之前,必须安装jdk环境。Jmeter可以对HTTP和FTP服务器进行压力和性能测试,同样也能对数据库进行同样的测试(通过JDBC)。
1、进程和线程
进程:指资源分配的基本单元。一个进程包含多个线程。
线程:指程序执行的最小单元,是系统独立调度和分配CPU(独立运行)的基本单元。
多进程:同时执行多个程序。如:同时执行微信、QQ、企业微信等。
多线程:同时执行多个线程。如:用微信一边聊天、一边视频、一边看下载等。
线程组:进程中有多个线程,为了方便管理,对线程按照性质分组,分组的结果就是线程组。
setUp线程组:最先执行的线程组。
tearDown线程组:最后执行的线程组。
Concurrency线程组:递增式并发线程组(可递增不可递减)。可设置递增次数、递增时长、到达目标递增数量保持时长等。
Arrivals线程组:到达线程组(可递增不可递减)。
Stepping线程组:逐步线程组(可递增可递减)。可设置递增次数、递增启动延迟、递增时长、到达目标递增数量保持时长等。
2、并发
在操作系统中,一段时间内多个程序处于已启动运行到运行结束之间,这些程序都是在一个CPU上运行的,各程序会相互抢占资源,在任一时刻点上都只有一个程序在CPU上运行。并发指的是一段时间内多个程序是同时运行的。Jmeter以线程的方式来进行模拟用户并发访问。
3、并行
当系统有一个以上的CPU时,则线程的操作有可能是非并发的。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占资源,互不影响,可同时进行,该种方式称为并行。
4、压测
通过逐步加压的方法,使得系统的某些资源达到饱和。Jmeter通过模拟大量的虚拟用户向服务器产生负载,使服务器的资源处于极限状态下长时间持续运行,以测试服务器在高负载情况下是否能正常稳定运行。
5、TPS
服务器每秒处理的事务数。QPS(TPS)=并发数/平均响应时间。
6、QPS
每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
TPS包含了(1)用户请求服务器;(2)服务器自己的内部处理;(3)服务器返回给用户;
这三个过程,每秒能完成X个这三个过程,TPS就是X;
对于一个页面的访问,行程一个TPS;
但一次页面请求,可能会产生多次对服务器的请求,服务器对这些请求,都计入QPS。
如果是单接口(单场景)压测,这个接口内部不会调用其他接口,则TPS=QPS,否则TPS≠QPS。
7、吞吐量
系统在单位时间内处理的请求数量。单个请求对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。
影响参数:QPS(TPS)、并发数、响应时间。
二、Jmeter_组成
测试计划
1、测试计划:测试脚本的根节点。每一个测试脚本都是一个测试计划。可自定义名称。
线程组
2、线程组:控制Jmeter用来执行测试的线程数。
组件
3、配置元件:通过配置元件对请求进行配置,对请求新增内容或者修改请求。
4、定时器:Jmeter可能会在很短时间内发送过多的请求到服务器,导致服务器负载过重而崩溃。定时器可以使其作用范围的每个取样器执行前延迟一段时间。
5、监听器:提供了执行测试用例过程中搜集相关信息的途径。比如,“查看结果树”监听器显示取样器请求和响应的详细信息;“聚合报告”监听器作为性能指标分析的重要对象。
6、前置处理器:取样器请求之前执行的操作。前置处理器经常用于在运行之前修改取样器请求的设置,或更新未从响应文本中提取的变量。
7、后置处理器:取样器请求之后执行的操作。后置处理器经常用于处理响应结果,从中提取想要的值。
8、断言:预期结果与实际结果的比对。
控制器
9、取样器:取样器告诉Jmeter如何发送请求到服务器,如,“HTTP请求”。
10、逻辑控制器:用于控制Jmeter发送请求的逻辑。
三、Jmeter_使用
1、添加线程组
步骤:右击【测试计划】-【添加】-【线程(用户)】-【线程组】;
(1)线程数:虚拟用户数。一个虚拟用户占用一个进程或者线程,设置多少个虚拟用户数就在这里设置多少个线程数。
(2)Ramp-Up时间(秒):设置的虚拟用户数需要多长时间全部启动。如果线程数为100,准备时间为10,那么就是需要10秒内启动这100个线程,即每秒钟启动10个线程。
(3)循环次数:每个线程发送的请求次数。如果线程数为100,循环次数为2,那么每个线程发送的请求次数为2次,总请求次数为2*100=200。如果勾选“永远”,那么所有线程将会一直发送请求,除非手动选择停止运行脚本。
(4)调度器:
持续时间(秒):测试计划持续多长时间。
启动延迟(秒):测试计划延长多长时间启动。
2、添加HTTP请求
步骤:右击【线程组】-【添加】-【Sampler】/【取样器】-【HTTP请求】;
(1)Web服务器
协议:向目标服务器发送HTTP请求协议,可以是HTTP或者HTTPS,默认是HTTP
服务器名称或IP:HTTP请求发送的目标服务器或者IP
端口号:目标服务器的端口号,默认值是80
(2)HTTP请求
方法:发送HTTP请求的方法,方法有GET、POST、HEAD、PUT、OPTIONS、DELETE等
路径:目标URL路径(URL中去掉服务器地址、端口及参数后剩余部分)
Content encoding:编码方式,默认为ISO-8859-1编码
添加请求参数
【参数】
注意:参数形式是键值对形式,需严格参照接口文档要求的参数进行填写。注意空格!!!
【消息体数据】
将json格式的请求数据加入到HTTP请求体中。
注意:【参数】和【消息体数据】只能二选一,需要删除【参数】或者【消息体数据】已设置参数才能在另一个设置。
【文件上传】
注意:这三个参数都是必填的!同时注意空格!
3、添加察看结果树
步骤:右击【线程组】-【添加】-【监听器】-【察看结果树】;
设置察看结果树,可以实时看到每个请求的请求数据和响应数据。
4、添加聚合报告
步骤:右击【线程组】-【添加】-【监听器】-【聚合报告】
Label:每个请求的名称,如HTTP请求;
#样本(#Samples):请求数,即发送的请求数量;
平均数(Average):平均响应时间,即单个请求的响应时间;
中位数(Median):所有请求响应时间的中间值;
90%~99%百分位(Line):90%~99%用户的响应时间;
最小值(Min):最小响应时间;
最大值(Max):最大响应时间;
异常%(Error %):错误率,错误请求数/请求总数;
吞吐量(Throughput):每秒完成的请求数;
接受KB/Sec:每秒从服务器端接收到的数据量;
发送KB/Sec:每秒从客户端发送的请求数据量;
性能测试中我们重点关注的数据有:#样本(请求数/Samples)、平均数(Average)、最小值(Min)、最大值(Max)、异常 %(Error %)及吞吐量(Throughput)。