性能场景之压测策略设计

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 【2月更文挑战第19天】性能场景之压测策略设计

一、前言

性能场景应该说是在性能测试中非常关键的一个环节。

但是在我接触过的同学及公司之中,还是发现有很多人并不是非常关注性能场景中的细节。

二、单业务压测策略

今天就只写一个地方,就是压测策略。压测策略多种,设置也是五花八门。比如说如下几种(用 jmeter 举例,其他工具仅配置方法不同)。

1、策略一

image.png

  • 在这个策略中共有 100 线程(在 loadrunner 中称为vuser),每 30 秒增加 10 个用户,且递增的时间间隔为 6 秒。也就是说,这 30 秒内的 10个 用户是以每次 2 个用户增加的;
    每增加 10 个用户之后,持续 60 秒;

  • 停止线程的时候是每秒停 5 个用户,直到停完为止。

  • 场景在一开始启动时,并没有启动线程,也就是说在前 6 秒内是没有线程启动的,6 秒后 2 个线程启动。

2、策略二

image.png

在这个策略中,我们可以看到如下内容:

  • 100 个线程同时启动;

  • 持续 600 秒;

  • 再同时停止;

3、策略三

image.png

这个策略是:

  • 先启动 10 个线程;

  • 接着每隔 10 秒启动 10 个线程,直到 100 个线程启动完;

  • 持续 600 秒;

  • 然后每隔 10 秒停 10 个线程。

4、综述

举这三个策略为例吧。因为比较典型。什么时候应该用什么样的压测策略呢?这才是关键的问题。

首先,要定义的是测试的目标。如果是在系统的最大容量并不清楚的情况下显然第一种压测策略最为合理,因为在压力逐渐增加的过程中,可以看到响应时间和 tps 之间的关系。

那么第三个压测策略和第一个又有什么区别呢?之所以列出第三个策略是因为第一种使用的人非常少。而第三种相对比较多。目标和第一个是一样的。只是这个时候要把握好递增线程的幅度。

我建议的是在不清楚系统最大 TPS 的情况下,最好使用第一种策略。因为使用第三种,可能需要反复试好几次。

第二种压测策略又有什么讲究呢?我碰到使用第二种策略的人是比较多的。并且大部分是不知道这种策略带来的结果是什么。

通常情况下,这种压测策略只用在秒杀、竞拍之类的场景中。有人说应该用集合点来实现这样的策略。请注意,如果不是在分析了具体场景之后,明确知道应该用多少的压力来做这样的场景,最好不要用集合点。

这里面要有个计算的过程才可以。

有人喜欢用第二种压测策略来实现 100、200、300、400 这样单个场景递增的方式。其实在实际的应用场景中,这是短暂出现的场景。所以这种方式仅是在测试峰值的那一刻,这种方式在实际的性能场景中其实不是那么有必要,应该说过于简化了本来的应用场景。

三、混合场景压测策略

上面写的压测策略是对单个业务来说的。

每次在做项目的时候,我都说起过,要先做基准测试。

之前我看到有人把基准测试定义为脚本的基本验证。从概念上说,这种描述是完全错误的。这个问题可以留待后面再展开来说明。

对于多业务脚本混合的场景来说,每个业务脚本的设置就成了必然要考虑的事情。

所以在这之前需要的是对单个业务特点进行分析,分析到可以设置出符合真实业务场景为止。这一点非常关键,非常关键。 如果做不到和真实业务场景符合的话,性能测试分析优化的整个过程也仅是查查系统的代码问题、环境问题、配置问题、数据问题、架构问题等等。

有人说,这样已经足够了呀。

可是,性能项目的实施仅仅是为了找问题吗?即使找出问题,能让系统支撑得住真实业务场景吗?这个问题是大部分做性能测试的人不敢回答的。

所以场景设计的重要点在于可以把真实业务场景重现出来,进而分析系统容量是否满足业务要求。

混合场景在不同的工具中有不同的设置方法。

1、LoadRunner

image.png

对于 LoadRunner 来说,在设计思路上,它对场景的设定是全局的。有种所有业务都由我掌控的感觉,就是很霸道的全局设置思路,每个业务脚本可自己发挥的空间。

我是很认可这种设计思路的,就是对整个场景要有明确的掌控感。

只是缺乏灵活性。

还好在 LoadRunner 中有 Group 可以弥补这个灵活性的欠缺。

2、Jmeter

image.png

对 Jmeter 来说,各个设置都是松散的,线程组的设置也都是单独的,想怎么玩怎么玩。

所以对混合的场景设置来说,Jmeter 这样的工具才是对个人素质要求更高的。

像上图中所展示的,每个线程组可以有不同的发起、持续、停止策略。

不管工具上如何设置,最核心的内容还是如何把真实场景复现出来,而这一点是工具不可能告诉你的。不管是现在的云性能测试工具还是单独的性能测试工具,在这些内容的深化上都存在着很大的发展空间。

性能测试之所以人在其中的作用很大,也就是在这些灵活的部分。

之前我看到有些自研发的工具中给一个简单的脚本,即可以发出上万上亿的请求,并且称之为场景。那是非常片面的一种场景,或者说目标不是复现真实业务场景。

四、一个业务的复杂场景

前面提到了压测策略中的一些内容。

现在我们来看一下,一个业务的复杂场景设置。

是的,你没有看错。就是同一个业务的复杂场景设置。

后面再说多业务的复杂场景

分析了业务之后,如果这个业务有不同的高峰时段,可以有不同的设置方式。

比如下面这样:
image.png

每小时内的请求量各不一样。

对于这个业务的性能执行场景应该制定这样的压测策略。
image.png

配置方式在同一个工具中可能都不一样。

可以在一个线程组中实现,也可以每个小时的业务量有用一个线程组。

这样设置出来的场景才和实际的场景相似。

有人可能会觉得直接设计峰值那个小时内的场景就可以了。

其实不止。

因为还有些时段需要做压力补充,像批处理的业务就要加进去。

另外资源的 open、close 也会是问题出现的点。

五、小结

在细节的控制中才见真功夫。

性能是一门艺术。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
2月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
107 2
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
3月前
|
消息中间件 Kafka 测试技术
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
【Azure 事件中心】使用Kafka的性能测试工具(kafka-producer-perf-test)测试生产者发送消息到Azure Event Hub的性能
|
3月前
|
监控 Java 测试技术
实战派必看!Python性能测试中,JMeter与Locust如何助力性能调优
【8月更文挑战第6天】性能优化是软件开发的关键。本文介绍JMeter与Locust两款流行性能测试工具,演示如何用于Python应用的性能调优。JMeter可模拟大量用户并发访问,支持多种协议;Locust用Python编写,易于定制用户行为并模拟高并发。根据场景选择合适工具,确保应用在高负载下的稳定运行。
131 4
|
3月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【8月更文挑战第6天】在数字化时代,确保软件在高并发下的稳定性至关重要。Python 提供了强大的性能测试工具,如 JMeter 和 Locust。JMeter 可配置复杂请求场景,而 Locust 则以 Python 脚本灵活模拟真实用户行为。两者结合,可全面评估系统性能。例如,对电商网站进行测试时,JMeter 模拟登录请求,Locust 定义浏览和购物行为,共同揭示系统瓶颈并指导优化,从而保证稳定高效的用户体验。
101 1
|
4月前
|
测试技术
性能测试场景设计
**性能测试场景设计**涉及模拟用户行为和负载以评估系统在真实环境下的性能、稳定性和可靠性。常用的测试方法包括:**负载测试**,模拟实际使用以检查不同负载下的性能;**压力测试**,超负荷运行以检测系统极限;**稳定性测试**,验证系统长时间高负载的稳定性;**并发测试**,检查多用户访问时的性能和问题;以及**容量测试**,确定系统处理能力和资源利用率。测试场景多样,旨在确保系统应对未来增长需求的能力。
|
4月前
|
存储 监控 数据可视化
性能测试:主流性能剖析工具介绍
**性能剖析**是识别应用性能瓶颈的关键,涉及指标收集、热点分析、优化建议及可视化报告。常用工具有:**JConsole**监控JVM,**VisualVM**多合一分析,**JStack**分析线程,**FlameGraph**展示CPU耗时,**SkyWalking**分布式跟踪,**Zipkin**追踪服务延迟。这些工具助力开发人员提升系统响应速度和资源效率。
|
4月前
|
测试技术 Linux
linux 服务器运行jmeter 进行服务性能压测
linux 服务器运行jmeter 进行服务性能压测
390 0
|
4月前
|
Java 测试技术
用代码模拟调用接口方式压测现网服务器的服务性能
用代码模拟调用接口方式压测现网服务器的服务性能
35 0
|
4月前
|
监控 数据可视化 测试技术
性能测试:性能测试流程与方法
**性能测试流程与方法概述:** 本文介绍了性能测试的关键步骤,包括现状分析、指标获取、用户场景定义、验收标准设定、测试计划编写、压力环境准备、执行压测、监控、结果分析、报告编写及改进建议。测试方法涉及并发模式(虚拟用户)和RPS模式(吞吐量),确保系统在不同负载下的稳定性和效率。