初衷
之前在公司做的性能测试基本上都是关于数据库的,针对接口的性能测试还是比较少一点。考虑到后边大模型问答产品的推广,公司方面也要求对相关接口进行压测,也趁着这个机会,对jmeter进行深入研究,进一步加强自己性能测试方面的专业知识。
我希望能够结合自己的实际经历与心路历程,包括踩过的坑,一并与大家进行分享,共同提高自己的技术。
在这个系列里面,我也会逐步记录自己成长的历程
Jmeter介绍
以这个接口为例:
线程组(Thread Group)概述
线程组是 JMeter 中最基本的元素,用于控制模拟用户的行为。可以把线程组看作是一群虚拟用户的集合,这些虚拟用户将按照设定的规则来执行测试计划。例如,在测试一个 Web 应用时,线程组中的每个线程就代表一个虚拟用户,这些用户会并发地访问应用的各种接口。
线程数(Number of Threads)
- 含义:
线程数表示同时执行测试任务的虚拟用户数量。例如,将线程数设置为 100,就相当于有 100 个虚拟用户同时对目标系统进行操作。这个参数直接决定了压测的并发程度。 - 应用场景和影响:
在测试一个小型的企业内部系统接口时,如果预计同时使用该接口的用户不超过 50 人,那么可以将线程数设置为 50 来模拟实际的使用场景,观察系统在这种负载下的响应情况。如果线程数设置过高,比如对于一个性能较差的系统设置了过多的线程数,可能会导致系统崩溃或者响应时间过长,因为系统无法承受这么多并发请求。
Ramp - Up Period(in seconds)
- 含义:
它表示所有线程在多长时间内全部启动完成。例如,设置线程数为 100,Ramp - Up Period 为 10 秒,那么 JMeter 会在 10 秒内逐步启动这 100 个线程,平均每秒启动 10 个线程。 - 应用场景和影响:
当测试一个新开发的系统时,如果想慢慢增加负载来观察系统在不同负载阶段的性能变化,可以适当设置较长的 Ramp - Up Period。这样可以更细致地了解系统从低负载到高负载过程中的性能瓶颈。如果 Ramp - Up Period 设置得过短,可能会导致系统瞬间承受较大的压力,出现异常情况,无法准确评估系统在逐渐增加负载过程中的性能。
循环次数(Loop Count)
- 含义:
循环次数决定了每个线程执行测试任务的次数。例如,设置循环次数为 5,表示每个虚拟用户(线程)会重复执行测试计划 5 次。如果设置为 “永远(Forever)”,则线程会一直循环执行测试任务,直到手动停止压测。 - 应用场景和影响:
在测试一个具有缓存机制的系统时,如果想观察缓存对系统性能的影响,可以通过设置不同的循环次数来实现。比如,先设置较低的循环次数,让系统有机会缓存部分数据,然后再设置较高的循环次数,观察缓存是否能够有效降低系统的响应时间。循环次数设置的多少直接影响了总的请求数量和测试的持续时间。
调度器(Scheduler)概述
- 在 JMeter 中,调度器是用于更精细地控制线程执行时间和执行策略的工具。它允许用户根据特定的时间要求和测试场景来安排线程的启动、停止以及执行的节奏。
调度器、线程数、Ramp-Up Period、循环次数的联系
与线程数的联系
- 负载控制:
线程数确定了总的模拟用户数量,而调度器可以决定这些用户在什么时间范围内参与测试。例如,当设置了较高的线程数(如 1000 个线程),如果希望这些用户在特定的时间段(如工作时间 9:00 - 17:00)内进行测试,可以通过调度器来实现。调度器可以设置测试的开始时间和结束时间,从而在这个时间窗口内按照线程数所确定的负载规模对目标系统进行压测。 - 动态调整负载:
在某些复杂的测试场景中,可能需要根据系统的响应情况动态调整负载。例如,在测试一个自适应负载均衡的系统时,开始时可以通过调度器设置较低的线程数(如 100 个线程)来观察系统的基本性能。随着测试的进行,如果系统性能表现良好,可以通过调度器在后续阶段增加线程数(如增加到 500 个线程),以进一步测试系统的负载承受能力。
与 Ramp - Up Period 的联系
- 负载增长节奏控制:
Ramp - Up Period 规定了线程启动的速度,调度器与之相结合可以更灵活地控制负载增长的节奏。例如,在一个分布式系统的性能测试中,调度器可以设置在系统负载较低的夜间时段开始测试,并且通过 Ramp - Up Period 参数控制线程的缓慢启动。如果 Ramp - Up Period 设置为 60 秒,调度器可以确保在这个规定的时间内,按照设定的速度逐步增加线程,使得系统能够平稳地从低负载状态过渡到高负载状态,避免系统因为突然的高负载而出现异常。 - 时间依赖的负载增长:
调度器可以使 Ramp - Up Period 具有时间依赖性。比如,在模拟一个电商平台的促销活动场景时,根据活动开始时间(由调度器控制),可以设置在活动开始后的前 5 分钟内完成所有线程的启动(通过 Ramp - Up Period 来设置具体的启动时间),这样就可以模拟出促销活动开始时用户流量逐渐增加的实际情况。
与循环次数的联系
- 测试持续时间和负载模式:
循环次数决定了每个线程执行测试任务的重复次数,调度器可以根据时间来限制这种重复。例如,设置循环次数为 “永远(Forever)”,但通过调度器可以将测试限制在一个特定的时间范围内(如 2 小时)。这样,在这 2 小时内,线程会按照循环次数的设定不断执行测试任务,而一旦超过这个时间,测试就会停止。这对于模拟长时间运行的系统或者进行长时间稳定性测试非常有用。 - 阶段性测试策略:
调度器可以结合循环次数来实现阶段性的测试策略。比如,在测试一个具有多种功能模块的系统时,调度器可以先安排一个阶段,在这个阶段中设置较低的循环次数,让线程重点测试系统的某个核心功能模块。然后,通过调度器切换到下一个阶段,增加循环次数,使线程对系统的其他功能模块进行更深入的测试。这种方式可以更有针对性地利用循环次数来进行全面的系统性能测试。