首页 > 编程知识 正文

jmeter接口压测流程(jmeter压测指标)

时间:2023-05-04 01:19:58 阅读:1078 作者:1031

为什么要压力测试?

其实这个问题挺没必要的。正在做开发的同学应该很清楚。压力测试的必要性和压力测试的主要目的是让我们在上线前了解我们系统的承受能力,以及当前和未来的系统压力增加情况,评估当前系统的承受能力是否能够满足当前和未来的正常运行。压力测试还能让架构师和开发人员对他们负责的系统有一个清晰的概念。当并发需求较大的活动或其他紧急情况导致访问量突然增加时,他们可以提前做出预测并准备应急计划。

压力测量难度

说了这么多,都是关于压力测试的必要性。既然测试如此重要,那么我们每次发布版本都做压力测试就好了。说这话的学生肯定没真正参加过超压试验。参加超压测试的同学都谈到了压力测试变色的问题,测试人员和开发人员都害怕压力测试。你为什么这么害怕压力测试?主要原因是压力测试存在以下困难:

1)压力测试环境难以准备。

在日常工作中,我们肯定会遇到超压试验环境申请困难的问题。为什么难以应用,主要是因为试压一般要求环境与生产环境一致,这意味着试压机资源稀缺。没有公司会长期为所有系统准备压力测试环境。毕竟成本太高,所以大多数公司通常会为所有系统准备一些机器来共享压力测试环境。每次系统需要做压力测试时,都需要停止或删除之前压力测试系统的数据、应用版本、中间件和数据库,浪费时间。因此,现在很多公司使用docker来准备环境进行压力测试,只需要定期更新docker映像,就可以快速恢复环境。只需要在需要的时候直接拉下被测系统的docker镜像,这样压力测试环境就不再是我们的问题了。

2)试压数据准备困难。

试压过程中的另一个难点是试压数据的准备。如何尽可能真实地模拟生产数据?最简单的就是记录一段时间内产生的访问消息,然后在压力测试环境下正常回放和倍增。目前还没有特别好的记录真实生产消息的工具。大多数公司都会编写一个工具在网络级别进行嗅探,然后将嗅探到的生产消息处理成压力测试脚本,这些脚本可以被Jmeter或LoadRunner等压力测试工具识别。其实这项工作只要做一次就没那么复杂了。

3)压力测量工具的使用复杂。

很久以前,测试人员和开发人员都觉得它很高,很难使用和学习。事实上,这个概念在10年前是正确的。然而,随着越来越多开源压力测试工具的兴起,那些复杂繁琐的商用压力测试工具逐渐被大家遗忘。现在有很多开源的服务器压力测试工具,使用起来还是很简单的,基本上具备了所有应该具备的功能,前面废话真多。也就是说,压力测试没有以前那么复杂了。现在,我们可以使用简单的环境配置和工具快速完成压力测试。我不能帮你做环境准备。今天的文章重点介绍了领先的开源压力测试工具Jmeter的使用和结果分析,让大家爱上压力测试。

试压结果指数的基本概念:

Samples:指示发出的请求总数。

平均:平均响应时间,默认情况下是单个请求的平均响应时间(毫秒)。

错误%:测试中错误请求的百分比。如果出现错误,应该查看服务器的日志,配合开发查找位置原因。

其实常用的压力测试指标不多,主要是用户并发和tps。一般这两个指标一起使用,也就是在用户并发量这么大的前提下,每秒tps是多少。

这有点轻描淡写。举个简单的例子,500个用户同时发起服务请求,服务器可以稳定正确处理的事务数量。这里可以稳定正确处理的事务数量就是我们常说的tps,也叫服务处理吞吐量。在示例中,500个用户同时发起服务请求,“同时发起”也容易被误解。这里的500个用户同时发起的请求是指500个用户在同一秒内发起的请求,并不是说系统一次只能承载500个在线用户。这两个概念完全不同。做指标的时候不要混淆,尤其是和。

一般来说,我们会统计一段时间内当前在线用户在生产环境中的会话数和当时调用接口的次数,并做一个线性乘数,通过这个乘数,我们可以根据最终测得的数据来评估系统可能承载的用户数。

用Jmeter随时进行压力测试

让我们详细介绍一下如何使用Jmeter对服务器接口进行压力测试。Jmeter安装非常方便,直接去官网下载解压运行shell即可。

官网下载地址:http://jmeter.apache.org/download

基本概念

在介绍如何使用Jmeter之前,先介绍一下Jmeter中的一些基本概念:

1)测试计划是用JMeter进行测试的起点,JMeter是其他JMeter测试组件的容器。

2)线程组:代表一定数量的并发用户,可以用来模拟并发用户发送请求。的实际请求内容在采样器中定义,采样器包含在线程组中。您可以在“测试计划-添加-线程组”中构建它,然后在线程组面板中有几个输入字段:线程数量、上升周期(以秒为单位)和周期时间,其中上升周期(以秒为单位)意味着所有线程都在此时间内创建。如果有8个线程,斜坡上升=

200秒,那么线程的启动时间间隔为200/8=25秒,这样的好处是:一开始不会对服务器有太大的负载。线程组是为模拟并发负载而设计。

3)取样器(Sampler):模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。如:HTTP 、ftp请求等等。

4)监听器:负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S……)等。

5)逻辑控制器:允许自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。

6)断言:用于来判断请求响应的结果是否如用户所期望,是否正确。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。

7)定时器:负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。

8)配置元件维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。

9)前置处理器和后置处理器负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。

创建一个压力测试

创建线程组

通过右击测试计划->添加->Threads->线程组,进行线程组的创建。

线程组创建好了需要设置线程组,从设置界面其实可以知道主要的设置内容是线程数、Ramp-Up Period、循环次数、取样错误后执行的动作。

创建Http请求

从图上大家可以看到除了可以添加http请求还可以增加Java、JMS、FTP、JDBC等等,因为http请求用的最多所以这里我们就介绍创建http请求JSON接口的具体操作。

添加好Http请求,设置Http请求参数,这里设置http请求参数和我们使用一般调用一个http接口一样,主要需要设置几项内容:

协议:http还是https,这里我们设置http。

服务器名或IP地址:这里设置成自己项目的IP地址或域名。

端口:服务端口这里根据自己项目服务开放的端口来设置。

http请求方法(GET、POST、PUT等)

接口上下文路径:对应你要测试的接口上下文路径。

报文体:因为接口是JSON格式的,按照JSON格式送报文就可以了。

设置Http Header,在创建的Http请求上右击,选择添加->配置元件->HTTP信息头管理器。

因为是http JSON接口所以需要设置报文头里的Content-Type为application/json

压测结果分析

Jmeter对于压测结果可以设置多种监听器来查看结果,可以设置图形结果、结果树、断言结果、聚合报告等多种展示形式。下面分别给大家看下我比较常用的两种压测报告图形结果和聚合报告,这两个结果基本可以满足日常压测结果分析的需求了。

图形结果可以比较直观的查看到压测的结果数据,红色线表示偏离平均值的交易曲线,蓝色线表示平均响应时间,绿色线表示交易吞吐量,这里要注意下默认的吞吐量的时间单位是分钟。

这个是聚合报告,能够比较比较系统的所有被测接口的数据查看报告情况。

测试报告分析思路:

1)Error%:确认是否允许错误的发生或者错误率允许在多大的范围内;

2)Throughput:吞吐量每秒请求的数大于并发数,则可以慢慢的往上面增加;若在压测的机器性能很好的情况下,出现吞吐量小于并发数,说明并发数不能再增加了,可以慢慢的往下减,找到最佳的并发数;

3)压测结束,登陆相应的web服务器查看CPU等性能指标,进行数据的分析;

4)最大的tps:不断的增加并发数,加到tps达到一定值开始出现下降,那么那个值就是最大的tps。

5)最大的并发数:最大的并发数和最大的tps是不同的概率,一般不断增加并发数,达到一个值后,服务器出现请求超时,则可认为该值为最大的并发数。

6)压测过程出现性能瓶颈,若压力机任务管理器查看到的cpu、网络和cpu都正常,未达到90%以上,则可以说明服务器有问题,压力机没有问题。

7)影响性能考虑点包括:数据库、应用程序、中间件(tomact、Nginx)、网络和操作系统等方面。

总结

这篇文章先介绍了压测的重要性,又简单介绍了下我们常用的压测指标,最后重点介绍了下如何通过轻量级开源的Jmeter完成一次http接口的压测,并介绍了下测试报告分析的一个思路,轻量级的Jmeter可以让大家更加方便快速的开展压力测试,尤其对于压测条件不是很充分的小团队,使用这样的开源方案可以很方便的开展压测工作,让自己对系统的情况更加了解,最后希望大家都能够将Jmeter用起来。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。