Jmeter压力测试工具学习及使用

Jmeter学习

1.1 什么是jmeter

jmeter是Apache组织开发的基于Java的压力测试工具。

1.2 jmeter适用的测试领域

  • 用于对软件做压力测试

  • 对应用程序做功能/回归测试

  • 用于对静态和动态的资源的性能进行测试

  • 接口测试

  • 数据库压力测试

  • 批量生产测试数据

1.3 Jmeter可以做哪些测试

1.3.1 并发测试

  • 主要是使用同步计时器(设置并发数),同步计时器主要有两个参数

  • 模拟用户的数量:并发数

  • 超时时间(ms):设置等待时间,如果0则永久等待,直到满足模拟的用户数。非0则等待指定时间,如果在时间内,则满足条件就释放,否则超时释放。

1.3.2 稳定性测试测试

  • 主要测试持续一段时间访问接口,测试接口的稳定性。

  • 主要涉及的配置为,线程组设置循环次数永久,持续时间设置为15分钟(根据自己的项目要求而定)

  • 必要的时候,添加统一随机定时元件:主要有两个参数

  • 随机的最大时间(ms):在这个范围内进行随机

  • 常量延时时间(ms):固定的延时时间

  • 最后的延时时间=随机的时间+常量延时时间

1.3.3 业务场景测试

主要测试多个接口联动,模拟真实接口的调用,增加统一随机定时器模拟用户真实操作,比如添加购物的流程涉及到:登录接口–搜索商品接口–浏览商品接口–添加到购物车接口

其中主要最难的是:登录接口提交的验证码处理,我之前的项目是开发给定了一个固定的万能验证,进行提交登录,添加HTTP Cookie管理器

使用事务控制器元件进行管理这些接口,这些接口就属于一个事务流程,只要一个测试失败,则事务通过失败。

1.3.4 负载测试

主要测试一个接口或者一个业务场景的支持量,主要用到了一个扩展组件:bzm - Concurrency Thread Group),通过逐步加压的方式,查看每个阶段的响应数据,简单的确认出负载数。该组件也可以用于测试并发量,和同步计时器使用,好处是,能够逐步增大并发数,避免因为客户机硬件的原因(比如:一下子生成1000线程数,可能会导致客户机CPU过高,影响并发数)导致并发数的不准确。

1.3.5 我们的使用目的

主要是日常工作中对主站接口进行一些压力测试,从而来判断对应接口的性能,同时可以优化性能较差的接口;一定程度上避免了测试过程中提出的接口性能差的问题;

1.4 常用核心组件

1.4.1 测试计划

用来描述测试,包含本次测试所有相关功能的Thread(users)线程用户;

1.4.2 线程组

  • 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是否勾选的区别:

Jmeter压力测试工具学习及使用_第1张图片

勾选:设置的线程数量将在Ramp-Up Period时间内启动并且运行,比如图中2秒内10个线程,那么每隔1秒就启动5个线程,并运行(RUNNING状态)我们请求的Sampler

不勾选:启动了所有线程(NEW状态),但是不立即运行Sampler,而是按照Ramp-Up Period时间来运行,比如图中一开始10个线程就全部就绪了,但是每隔1秒只有5个线程来运行请求的Sampler

  • 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)

  • 持续时间(秒):测试持续时间,会覆盖结束时间

  • 启动延迟(秒):测试延迟启动时间,会覆盖启动时间

  • 启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。

  • 结束时间:测试结束时间,持续时间会覆盖它。

Jmeter压力测试工具学习及使用_第2张图片

1.4.3 取样器sample

在线程组下边设置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

Jmeter压力测试工具学习及使用_第3张图片

1.4.4 http默认请求

如果向同一个服务器发送多个HTTP请求,可以使用HTTP请求默认值,它可以为HTTP请求设置默认值

如何添加:线程组右键——>配置元件——>http请求默认值

作用:http请求默认值,还在发送http请求的时候自带这些参数,起到复用的一个作用,也可以单独配置http请求,单独配置的优先级更高。

Jmeter压力测试工具学习及使用_第4张图片

1.4.5 前置处理器

前置处理器一般处理一些需要参数加密后再传入的请求

Jmeter压力测试工具学习及使用_第5张图片

1.4.6 后置处理器

后置处理器可以编辑计划结果的文件编码格式等等;

Jmeter压力测试工具学习及使用_第6张图片

1.4.7 HTTPCookie管理器

它可以自动储存服务器发送给客户端的所有Cookie,并在发送请求时附加上合适的Cookie

Jmeter压力测试工具学习及使用_第7张图片

1.4.8 聚合报告

  • 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 吞吐量。

1.4.9 Response Time

要先下载插件Basic Graphs,下载好Basic Graphs插件之后重启jmeter,就可以看到Response Time组件;

Response Times Over Time(事物响应时间)它监听整个事物运行期间的相应时间,性能测试中,最重要的2个指标之一,横坐标是运行时间,纵坐标是响应时间,单位是毫秒;通过jp@gc-Response Times Over Time可以查看每个时间段的平均响应时间;

它的主要作用是在测试脚本执行过程中,监控查看响应时间的实时平均值、整体响应时间走向等。

Jmeter压力测试工具学习及使用_第8张图片

1.4.10 Throughput

要先下载插件Basic Graphs,下载好Basic Graphs插件之后重启jmeter,就可以看到Transaction per Second组件;

Transactions per Second即TPS:每秒事务数,性能测试中,最重要的2个指标的另外一个。该插件的作用是在测试脚本执行过程中,监控查看服务器的TPS表现————比如整体趋势、实时平均值走向、稳定性等。

  • Throughput是用来衡量吞吐量的指标,通常用TPS或者QPS来表示。

  • TPS表示每秒通过的事物数,QPS表示每秒查询接口数。

  • Jmeter中如果只有单接口,那么TPS=QPS。

  • 如果是多接口的混合场景,只有在事物控制器下执行,才能将其理解为TPS。

Jmeter压力测试工具学习及使用_第9张图片

1.5 元件的作用域

  • 配置元件:影响其作用范围内的所有元件。

  • 前置处理器:在其作用范围内的每一个sampler元件之前执行。

  • 定时器:在其作用范围内的每一个sampler有效

  • 后置处理器:在其作用范围内的每一个sampler元件之后执行。

  • 断言:在其作用范围内的对每一个sampler元件执行后的结果进行校验。

  • 监听器:在其作用范围内对每一个sampler元件的信息收集并呈现。

执行顺序:测试计划——>线程组——>配置元件——>前置处理器——>定时器——>取样器——>后置处理器——>断言——>监听器

作用域:辅助组件(除测试计划、线程组、取样器之外的组件)作用于父组件、同级组件、以及同级组件下的所有子组件

二 Jmeter测试流程(http请求)

2.1 创建线程组

在测试计划上点击右键——>添加——>Thread(User)——>线程组;

创建好线程组后可以给创建好的线程组命名;可以根据测试需要填写相对应的属性,例如线程数【用户数】,循环次数等等;

2.2 创建http请求

在创建好的线程组上点击右键——>添加——>sampler——>http请求

配置需要进行测试的程序协议、地址和端口basic中web服务器的协议一栏,如果是http请求的话可以省略不写,https请求的话需要添写为https;本地测试的时候,basic中web服务器的路径可以不写服务名称,直接写接口名称;可以在Parameters、Body Data、Files Upload中添加测试过程中需要的参数;

2.2.1 parameter

​ 键值对类型参数

2.2.2 body data

​ json、xml格式的传参方式;

eg:{"key":"d8363df900778f95eb2e7985965d0845","date":"2022-07-05"}

	

	

2.2..3 file upload

2.2.3.1 参数的用途

​ 文件的上传的时候

2.2.3.2 参数的解释

​ 文件名称:你的文件地址,绝对地址

​ 参数名称:file

​ MIME类型:多媒体类型 根据文件的后缀 去寻找MIME类型

三个参数都是必填的,否则会报错;parameter和body data参数类型只能2选1参数输入时要注意空格

2.3 添加HTTP请求头

在我们刚刚创建的线程组上右键 【添加】-->【配置元件】-->【HTTP信息头管理器】。

2.4 添加察看结果树

在我们刚刚创建的线程组上右键 【添加】-->【监听器】-->【察看结果树】。

直接添加,然后点击运行按钮就可以看到结果了。

2.5 添加聚合报告

线程组上右键【添加】-->【监听器】-->【聚合报告】。

2.6 添加Response Time

线程组上右键【添加】-->【监听器】-->【jp@gc - Response Times Over Time】。

2.7 添加Transactions per Second

线程组上右键【添加】-->【监听器】-->【jp@gc - Transactions per Second】。


你可能感兴趣的:(jmeter,测试工具,学习)