【问题标题】:JMeter - How to simulate long polling clients?JMeter - 如何模拟长轮询客户端?
【发布时间】:2014-08-20 15:33:56
【问题描述】:

我有一个 Web 客户端轮询服务器的场景。根据响应中的数据,他们被授予/拒绝访问某些资源。客户端会动态地对这些更改做出反应,并向用户显示资源或某些等待页面(拒绝)。这是通过长轮询机制完成的。如果资源可用,用户可以进行交互,例如回答问题。

我有一个包含这种长轮询机制的测试计划。我最初尝试将轮询添加到请求循环中以根据真实客户端模拟它,但我的请求随后被延迟,直到长轮询请求得到响应。

Thread group
 |
 |- Get State from server (saves value in variable) - no long polling here
 |- Request loop
 |  |- If Controller (checks the variable) 
       |- Loop until all resources are processed
          |- Get State - long poll **this blocks the user response until the timeout for the server response is met**
          |- User response

然后我尝试在单独的循环中运行轮询。然而,当执行轮询循环时,请求循环似乎不再进入。我用调试采样器检查了变量确实被轮询循环改变了,只要服务器上发生了一些变化。

Thread group
 |
 |- Get State from server (saves value in variable) - no long polling here
 |- Request loop
 |  |- If Controller (checks the variable) 
 |     |- Loop until all resources are processed
 |        |- User response
 |
 |- Long-polling loop
 |  |- Set variable

是否有几乎可以映射真实场景的解决方案?

【问题讨论】:

  • 你能提供2个你试过的模式吗?我对你的问题有点困惑,试着让它更清楚一点,谢谢
  • 我编辑了我的帖子,让它包含更多细节,我还改写了大部分内容。希望现在更清楚了。模式现在更加详细,但并未显示所有细节。我尽量保持简单;-)
  • 这里的 Ajax 长轮询中描述的长轮询:stackoverflow.com/questions/11077857/… Get State 你想发生什么?
  • 我不确定它是否是 AJAX 长轮询,但我认为是这样。与您链接中的示例相比,我们实现的唯一区别是,即使没有数据更改,我们的服务器也总是在特定超时后响应。在最好的情况下,Get State 应该与其他请求并行发生,并且在轮询时不会干扰它们。它基本上充当关闭或打开的门,以便客户端知道特定资源可用或关闭。
  • 没人知道怎么做吗? :(

标签: jmeter long-polling


【解决方案1】:

您必须从不同的线程组发送长轮询。那么问题将是关于如何在两个线程组之间共享会话信息。我通过将会话信息(cookie 等)写入文件并在不同的线程中读取它们来做到这一点。

所以,一个线程组执行常规请求。另一个线程组将进行长轮询。这是使用 jmeter 模拟并行 http 请求的方法。对我来说它有效。

【讨论】:

    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多