【发布时间】:2016-08-17 13:57:01
【问题描述】:
我需要使用 JMeter 保持一段时间的会话。
测试计划和脚本细节如下:
举例来说,有 100 个用户使用他们各自的凭据登录到我的 Web 应用程序。我的 Web 应用程序的会话超时为 30 分钟。这意味着如果这 100 个用户在登录后保持空闲 30 分钟,应用程序将在接下来的 30 分钟内保持连接打开,以接收来自登录客户端的任何进一步请求。连接不会关闭。所以如果客户端需要进行另一个HTTP事务,它可以使用空闲的keepalive连接而不是创建一个新的TCP连接。现在,当这 100 个连接处于活动或空闲状态时,我需要确定新登录客户端的响应时间。但是我无法使用 JMeter 生成这个场景。
这是我的脚本详细信息:->简单登录请求->终极线程组:启动线程计数-100->启动时间-120->保持负载-120->关闭时间-60->恒定吞吐量计时器-目标吞吐量(1200/分钟)。 ->测试在非 GUI 模式下运行 ->我已在“HTTP 请求”采样器中允许“keepAlive”。
所有线程都在 120 秒内启动,之后,此负载将再保持 120 秒。因此,总共 240 秒的登录请求将被发送(实际上在关机期间也是如此)。在我的测试中,为 100 个线程生成了大约 6500 个登录请求,并且它们都使用不同的凭据登录。我使用 CSV 数据配置元素来传递登录数据。我在执行测试时监控了服务器日志,并观察到所有登录请求都被接受并成功。因此,在实时场景中,如果 6500 个用户使用不同的机器或 PC 登录我的 Web 应用程序,并且在登录后什么都不做,我的服务器将在接下来的 30 分钟内保持连接打开以进行进一步的 HTTP 事务。我如何在 JMeter 中生成这个场景。或者在我的脚本中,所有这些会话都保持活跃吗?
任何建议或指导都会非常有帮助。
【问题讨论】:
-
我认为您将 TCP 级别的 keepalive (en.wikipedia.org/wiki/Keepalive) 与 HTTP 持久连接混淆了,有时也称为“keep-alive” (en.wikipedia.org/wiki/HTTP_persistent_connection)。但它们是无关的。此外,应用程序会话依赖于 TCP 级别的 keepalive 是很不寻常的,但依赖于 HTTP 持久会话并不罕见。
-
那么,在我的测试脚本中,所有这 6500 个请求都会保留它们的会话吗?我用“查看结果树”观察了结果,所有登录请求都生成了具有不同登录凭据的不同会话 ID。我必须确保所有这些会话都保持活动状态,同时我必须确定登录请求的新设置(来自不同机器的另一个“X”用户尝试登录)的响应时间。如何确保我的第一组(100 个用户或线程的 6500 个请求)请求保持活动状态?是否有任何工具可以从服务器端观察这一点?
-
如何检查 HTTP 级别的 keep-alive 完全取决于应用程序级别的行为,而不是某些系统参数或通用工具。即:打开的 TCP 连接数不会映射到服务器上当前活动的会话数。要验证会话是否处于活动状态,您需要知道活动在服务器上的含义。例如,也许您可以在 15 分钟后使用相同的 6500 个用户令牌发出一些操作,并确保不需要登录?或者检查 Web 应用程序中的线程数(如果线程确实映射到连接,情况并非总是如此)。有很多可能性。
标签: performance jmeter load-testing jmeter-plugins