看来你在谈论 闭合和开放式工作负载模型。 这种分类基于闭合/开放系统的划分: 在 闭合系统模型 中,新的请求仅会在先前请求完成后触发,并伴随着思考时间。系统具有负反馈,使其不可能超负荷服务,因此用户在发出新请求之前会等待响应; 在 开放系统模型 中,新的请求独立于完成,例如根据随机过程或固定跟踪方式进行。系统没有负反馈。 基于这种分类,我们可以根据所使用的工作负载模型将负载测试工具分为以下类别: 基于线程的模型,其中每个线程在发送另一个请求之前都会等待响应,因此请求速率取决于响应速率(负载发生器尽可能快地推动负载): 基于线程的方法是 VU [虚拟用户] 导向,同时试图模拟 N 个用户共同工作; 基于线程的工具需要单独的线程来模拟用户; 例如:JMeter; 基于点击的模型 基于点击的方法是 RPS [每秒请求数] 导向,同时试图产生 N 个点击量的负载; 基于点击的工具使用异步方法,并始终尝试创建定义的请求速率,必要时排队请求; 例如:tsung、Yandex.Tank。
我基本同意Aliaksandr对闭合/开放系统的解释,并给出一个例子。例如:您有3个用户,每个用户都在迭代一系列请求。在新迭代开始之前,必须完成上一次迭代。如果所有请求都已完成,则上一次迭代将结束。如果被测试的系统需要更长时间来响应,则请求速率会降低。因此,负载生成器和被测试系统处于闭环状态。在开环中,请求速率是恒定的,不考虑响应时间-没有反馈。两种模型显示了被测试系统的不同性能特征,即闭环的容量/吞吐量限制,开环的队列大小。使用开环更容易过载系统。关于线程,通常基于线程的工具定义一个闭环,但您也可以对开环进行建模。以JMeter为例,如果您想在3600秒内保持2个用户/秒的恒定速率,则使用3600秒的逐渐增加时间,并使用7200个线程数,而不循环。Gatling是另一个免费的工具,它不是基于线程而是基于事件的。您可以模拟闭环(重复,持续)或开环(constantUsersPerSecs)。