开放式和封闭式负载测试工具之间的区别

Difference between open-ended and close-ended load testing tools

开放式和封闭式负载测试有什么区别?
基于线程的负载测试工具属于哪一类?
每个类别中有哪些负载测试工具示例?

看起来你在谈论 closed vs. open workload models.

此分类基于 closed/open 系统分离:

  • 封闭系统模型的情况下 新请求仅由先前请求的完成触发,然后是思考时间。系统有负面反馈,无法埋没服务,所以用户在提出新请求之前等待响应;
  • 开放系统模型的情况下 新请求的到达与完成无关,例如根据随机过程或固定轨迹。系统无负反馈。

基于此分类,我们可以根据使用的工作负载模型将负载测试工具分为以下几类:

  • 基于线程的模型,其中每个线程在发送另一个请求之前将等待响应 - 因此请求率取决于响应率(负载生成器以系统可以的速度驱动负载拿着):
    • 基于线程的方法是 VU [虚拟用户] 导向的,同时试图模拟 N 个用户一起工作;
    • 基于线程的工具需要一个单独的线程来模拟用户;
    • 示例:JMeter
  • 基于命中的模型
    • 基于命中的方法是 RPS [每秒请求] 导向的,同时尝试每秒产生 N 次加载;
    • 基于命中的工具使用异步方法,并将始终尝试创建定义的请求率,必要时对请求进行排队;
    • 示例:tsung, Yandex.Tank.

基本同意Aliaksandr对closed/open系统的解释,给大家举个例子

例如:您有 3 个用户,每个用户迭代一系列请求。在开始新的迭代之前,必须先完成先前的迭代。如果所有请求都已完成,则上一次迭代结束。如果被测系统需要更长的时间来响应,request/s 速率会下降。所以 load-generator 和 system-under-test 是一个闭环。

在开环中,无论响应时间如何,请求率都是恒定的 - 没有反馈。

两种模型都揭示了被测系统的不同性能特征,即 capacity/throughput 闭环限制、开环队列大小。使用开环

更容易使系统过载

关于线程,通常 基于线程的工具定义闭环,但是,您也可以对开环建模。

以 JMeter 为例,如果你想在 3600 秒的时间内保持 2 users/s 的恒定速率,你可以使用 3600 秒的加速时间和 7200 的线程数,没有循环。

Gatling 是另一个免费工具,它不是基于线程而是基于事件。您可以对闭环(重复、期间)或开环 (constantUsersPerSecs)

建模