Jmeter 性能压测-TPS与QPS

1、TPS和QPS的区别

TPS:意思是每秒事务数,具体事务的定义都是人为的,可以一个接口、多个接口、一个业务流程等等。

一个事务是指事务内第一个请求发送到接收到最后一个请求的响应的过程,以此来计算使用的时间和完成的事务个数。

以单接口定义为事务为例,每个事务包括了如下3个过程:

向服务器发请求
服务器自己的内部处理(包含应用服务器、数据库服务器等)
服务器返回结果给客户端

如果每秒能够完成N次这三个过程,TPS就是N;

如果多个接口定义为一个事务,那么,会重复执行1/2/3,完成一次这几个请求,算做一个TPS。

QPS:意思是每秒查询率,是一台服务器每秒能够响应的查询次数(数据库中的每秒执行查询SQL的次数)

显然这个不够全面,不能描述增删改,所以,不建议用QPS来作为系统性能指标。

两者的区别:

如果是对一个查询接口(单场景)压测,且这个接口内部不会再去请求其它接口,那么TPS = QPS,否则,TPS ≠ QPS

如果是容量场景,假设n个接口都是查询接口,且这个接口内部不会再去请求其它接口,QPS = n*TPS

Jmeter聚合报告中,Throughput是用来衡量请求的吞吐量,也就是TPS。

TPS = 样本数/运行时间

我们定义的是TPS,不是QPS。如果没有定义事务,会把每个请求作为一个事务。

QPS是数据库中的概念,每秒执行条数(查询),被引申到压测中来了,但是不包括插入、更新、删除操作,所以不建议用QPS来描述系统整体的性能。

建议用TPS,这个T,你可以随意的定义,可以是一个接口,也可以是一个业务流程等等。

2、面试性能测试bug

①在做压力测试的时候,吞吐量TPS上不去,原本的TPS标准是要达到400/sec,但是实际压测只有50多的TPS。

后面发现是数据库的磁盘空间满了,导致查询速度和请求速度过慢,然后我让我们后端开发同事把数据库的磁盘清理一下就恢复正常了。

②我在压测(修改密码,新建用户,投保用户列表接口,保单管理接口,支付接口,保单查询接口,查看险种接口,投保接口)

接口的时候【这里面接口自己选一个】,平均响应时间在10s左右,不符合性能指标3s

后来发现:原因是接口通过redis,每次请求redis都会初始化。

后面解决:在测试环境增加路由配置之后,这个问题就解决了

最后感谢每一个认真阅读我文章的人!作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,坚持几天便放弃的感受的话,在这里我给大家分享一些软件测试的学习资源,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,希望能给你前进的路上带来帮助。如果你用得到的话可以直接拿走:

软件测试资料领取:[内部资源] 想拿年薪40W+的软件测试人员,这份资料必须领取~

软件测试面试刷题工具领取:软件测试面试刷题【800道面试题+答案免费刷】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

### 如何在JMeter脚本中设置和调整QPS #### 使用吞吐量控制器来控制QPS 为了实现特定的QPS,在JMeter试计划中可以利用吞吐量控制器。通过配置此组件,能够精确地管理每秒钟发送到服务器的请求数量[^2]。 对于设定固定的QPS值,比如10QPS的情况,可以在试脚本里加入吞吐量控制器,并对其进行如下参数化: - **目标吞吐量**:设为期望的QPS数值,即在此案例中的10次/秒。 - **执行方式**:选择“按线程”,这有助于更均匀地分配请求给各个虚拟用户。 - **最大并发数**:依据实际需求而定;某些情况下,可能仅需少量并发就能达成所需的QPS水平。 另外,还需注意的是Duration(持续时间)应根据具体应用场景合理规划,如一小时内保持稳定负载,则将其设为3600秒;如果是短周期内的高密度冲击型试,则可能是较短时间内完成更多次数的操作,例如半小时内则设为1800秒。 #### 配置线程组以支持所需QPS 除了借助吞吐量控制器外,适当调节线程组里的基本属性同样重要。合理的线程数量、启动延迟以及循环计数均会影响最终能否顺利达到预期的QPS指标。通常来说,如果单个用户的响应速度快于所希望维持的间隔时间,那么增加更多的模拟用户可以帮助提高整体流量至指定级别。 ```java // 示例代码展示如何创建一个简单的HTTP请求并应用上述原则 ThreadGroup threadGroup = new ThreadGroup(); threadGroup.setNumThreads(10); // 设置初始线程数目 threadGroup.setRampUp(1); // 控制加速度, 即每隔多少秒启动一个新的线程 LoopController loopController = new LoopController(); loopController.setLoops(-1); // 表示无限循环直到手动停止或满足其他终止条件 ``` #### 查看验证QPS效果 当完成了以上配置之后,可以通过查看聚合报告中的`Throughput`字段来确认是否达到了预设的目标QPS。该值代表了单位时间内成功处理了多少事务,也就是TPS (Transactions Per Second),它QPS有着密切的关系——特别是在只涉及读取操作而不含写入的情况下两者几乎相等[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值